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.