Hive 语法使用记录
Posted 明风的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive 语法使用记录相关的知识,希望对你有一定的参考价值。
count
count是一种最简单的聚合函数,一般也是我们第一个开始学习的聚合函数,那么他们之间究竟由什么区别呢?
有的人说count(1)和count(*)他们之间有区别,而有的人说他们之间没有区别那么他们之间到底有没有区别呢。
从执行结果来说:
count(1)和count(*)之间没有区别,因为count(*)count(1)都不会去过滤空值,
但count(列名)就有区别了,因为count(列名)会去过滤空值。
从执行效率来说:
他们之间根据不同情况会有些许区别,mysql会对count(*)做优化。
(1)如果列为主键,count(列名)效率优于count(1)
(2)如果列不为主键,count(1)效率优于count(列名)
(3)如果表中存在主键,count(主键列名)效率最优
(4)如果表中只有一列,则count(*)效率最优
(5)如果表有多列,且不存在主键,则count(1)效率优于count(*)
补充关于count(1)count(*)原理 引用百度知道专业回答
count(1),其实就是计算一共有多少符合条件的行。
1并不是表示第一个字段,而是表示一个固定值。
其实就可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1.
count(*),执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作,比固定值的方式效率稍微低一些。
having函数,case when与order by
having:用于筛选分组后的各组数据。
聚合函数,和group by一起使用(where不能和聚合函数使用)
group by放在order by前使用,放在之后报错
SELECT user_id from user_role r GROUP BY r.user_id HAVING COUNT(r.role_id)>=4 ORDER BY user_id DESC; 查询role_id大等于4的user_id
case when与order by,自己设置排序规则
SELECT * FROM user
WHERE state=1
ORDER BY
(
CASE name
WHEN ‘总部管理员’ THEN 1
WHEN ‘机构管理员’ THEN 2
WHEN ‘主管’ THEN 3
ELSE 4
END
) ASC
Case When Then Else End 多条件判断
https://www.cnblogs.com/gengyufei/p/12614387.html
select substr(key,13,2),
case when birthday<‘1968’ then ‘50up’
when birthday<‘1978’ then ‘40-50’
when birthday<‘1983’ then ‘35-40’
when birthday<‘1988’ then ‘30-35’
when birthday<‘1992’ then ‘26-30’
when birthday<‘1998’ then ‘20-25’
else ‘other’ end,
count(1)
from hiveTable
group by substr(key,13,2),
case when birthday<‘1968’ then ‘50up’
when birthday<‘1978’ then ‘40-50’
when birthday<‘1983’ then ‘35-40’
when birthday<‘1988’ then ‘30-35’
when birthday<‘1992’ then ‘26-30’
when birthday<‘1998’ then ‘20-25’
else ‘other’ end
case when/having/自连接/时间窗口
https://blog.csdn.net/a550246215/article/details/108166635
where 1=1或2的作用
where 后面表示过滤的条件,只有满足条件的记录才被选择,因为条件(1=2)为假,
所以整句话其实就是什么都不选择,比如我要建一个和表a相同结构的表b 但我不要数据就可以:
select * into 表b from 表a where 1=2
这样实现了拷贝一个表结构的目的;
如果条件是“1=1”就是选择所有记录。
写 where 1=1 就是为了在编程语言中使用,在语言中可能用户输入条件,也有可能不输入条件,这时可以这样:
如果输入了条件则为 and 字段=变量值,如果没有输入则为空值
组合后变成:select * from tablename where 1=1 and 字段=变量值
或 select * from tablename where 1=1
Hive中count,sum的使用
https://blog.csdn.net/yjgithub/article/details/84568542
left join 和 left outer join 的区别
https://www.cnblogs.com/williamjie/p/9498032.html
以上是关于Hive 语法使用记录的主要内容,如果未能解决你的问题,请参考以下文章