美文网首页
sql易混淆点

sql易混淆点

作者: 龙眠散人 | 来源:发表于2021-02-21 13:48 被阅读0次

1、order by、sort by、distribute by

1). order by 只有一个reduce负责对所有的数据进行排序,若大数据量,则需要较长的时间。建议在小的数据集中使用order by 进行排序。

2). order by 可以通过设置hive.mapred.mode参数控制执行方式,若选择strict,则order by 则需要指定limit(若有分区还有指定哪个分区) ;若为nostrict,则与关系型数据库差不多。

3). sort by 基本上不受hive.mapred.mode影响,可以通过mapred.reduce.task 指定reduce个数,查询后的数据被分发到相关的reduce中。

4). sort by 的数据在进入reduce前就完成排序,如果要使用sort by 是行排序,并且设置map.reduce.tasks>1,则sort by 才能保证每个reducer输出有序,不能保证全局数据有序。

5). distribute by 采集hash算法,在map端将查询的结果中hash值相同的结果分发到对应的reduce文件中。

6). distribute by 可以使用length方法会根据string类型的长度划分到不同的reduce中,最终输出到不同的文件中。 length 是内建函数,也可以指定其他的函数或这使用自定义函数。

2、where和having的区别

where:
where是一个约束声明,使用where来约束来自数据库的数据;
where是在结果返回之前起作用的;
where中不能使用聚合函数。
having:
having是一个过滤声明;
在查询返回结果集以后,对查询结果进行的过滤操作;
在having中可以使用聚合函数。
2.聚合函数和group by
聚合函数就是例如SUM, COUNT, MAX, AVG等对一组(多条)数据操作的函数,需要配合group by 来使用。

如:

SELECT SUM(population),region FROM T01_Beijing GROUP BY region; //计算北京每个分区的人数
3.where和having的执行顺序
where 早于 group by 早于 having
where子句在聚合前先筛选记录,也就是说作用在group by 子句和having子句前,而 having子句在聚合后对组记录进行筛选

4.where不能使用聚合函数、having中可以使用聚合函数

筛选出北京西城、东城、海淀及各区学校数量

SELECT region,count(school)
FROM T02_Bejing_school
WHERE region IN ('海淀' , '西城' , '东城') GROUP BY region;

筛选出北京西城、东城、海淀三个区中学校数量超过10所的区及各区学校数量。

SELECT region,count(school)
FROM T02_Bejing_school
WHERE region IN ('海淀' , '西城' , '东城')
GROUP BY region HAVING count(school) > 10;
注意!我们不能用where来筛选超过学校数量超过10的区,因为表中不存在这样一条记录。而HAVING子句可以让我们筛选成组后的各组数据.

3、hive调优(where 和 having)

select count(s_age) from (select s_age,count(1) as num from student_tb_seq group by s_age) a where s_age < 30 and a.num > 20;

改进后,务必先过滤再

select count(s_age) from (select s_age,count(1) as num from student_tb_seq where s_age < 30 group by s_age having count(1) > 20) a

相关文章

  • sql易混淆点

    1、order by、sort by、distribute by 1). order by 只有一个reduce负...

  • PMP易混淆知识点汇总

    PMP易混淆知识点之制约因素和假设条件 PMP易混淆知识点之标准和制度 PMP易混淆知识点之组织过程资产和事业环境...

  • String易混淆点

    slice(start,end) 不限正负,负代表从右往左,-1 指字符串的最后一个字符注意:返回新的字符串 su...

  • PMP易混淆知识点汇总

    PMP干货推荐---易混淆知识点汇总 PMP易混淆知识点之制约因素和假设条件 制约因素是指对项目或过程的执行有影响...

  • Vue易混淆知识点

    Vue生命周期常用钩子函数:beforeCreate、created(this.$data)、beforeMoun...

  • PMP易混淆知识点

    6.5.2.6进度压缩:赶工VS快速跟进(P215): 赶工:增加资源,以最小的成本代价来压缩进度工期的一种技术(...

  • 易混淆易忘记

    1、base和nofollow 1、base 可以设置整体链接的打开状态< base target="_blank...

  • mysql中易混淆知识点

    卧薪尝胆,三千越甲可吞吴。 1、date、time、datetime、timestamp 日期数据类型 date:...

  • h5 + css易混淆点

    html1 href和src的区别 href相当于引用,资源不是必须的 src相当于引入,资源是必须的 inlin...

  • 20190717MySQL基础操作(二)

    今天主要是实操练习,把练习中易忘记或易混淆知识点备档。 一、注意点 1、exists 使用时,存在就返回外部查询的...

网友评论

      本文标题:sql易混淆点

      本文链接:https://www.haomeiwen.com/subject/kpgxfltx.html