mysql Hive BigSQL

1. WHERE 搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。

SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Bush' OR Customer='Adams'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500

当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下:

执行where子句查找符合条件的数据;

使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值

最后用having 子句去掉不符合条件的组。

2.子查询中,程序先运行在嵌套在最内层的语句,再运行外层。因此在写子查询语句时,

可以先测试下内层的子查询语句是否输出了想要的内容,再一层层往外测试,增加子查询正确率。

否则多层的嵌套使语句可读性很低。

SELECT * FROM customers
WHERE cust_id
IN (SELECT cust_id FROM orders WHERE order_num IN
(SELECT order_num FROM orderitems WHERE prod_id='TNT2'));

 https://blog.csdn.net/m0_38061639/article/details/82872705

3.Hive:hadoop之上的sql产品,不支持实时查询,通过对hql语句解析生成MapReduce任务运行与hadoop上。

HQL和SQL区别

HQL不支持事务和索引,不支持having,不支持子查询。

4.BigSQL

Client 端发送一个查询到主节点,主节点的 Coordinator 线程会对 SQL 先进行解析、编译、优化,生成一个分布式的执行计划发送给各个从节点。

那么主节点的 scheduler 在这个过程中会做两件事情,

第一是查询 Hive 的 Metastore,得到表的元数据信息,这个元数据信息其中就包含了每一块儿的数据它的存放位置,从而将计算分配到合适的点上,尽量保证计算和数据在同一个节点上,这个跟 MapReduce 的理念是一样的,也就是将计算往数据的节点上推送,而不是将数据移动到计算节点上。

第二件事情是,如果存在分区表,先排除掉与查询无关的分区

特征:

对sql语法的支持程度更高,与hive共享Metastore。

5.

 

 

posted @ 2021-12-01 15:34  dsfsadfdgd  阅读(27)  评论(0编辑  收藏  举报