【hive sql练习】

hive sql

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[ORDER BY order_condition]
[DISTRIBUTE BY distribute_condition [SORT BY sort_condition] ]
[LIMIT number]

union如何记住?

union all
union

多维度聚合分析 grouping sets/cube/roolup

SELECT os, device, city ,COUNT(*)
FROM requests
GROUP BY os, device, city GROUPING SETS((os, device), (city), ());

cube 会枚举指定列的所有可能组合作为 grouping sets,而 roolup 会以按层级聚合的方式产生 grouping sets。

GROUP BY CUBE(a, b, c)  
--等价于以下语句。  
GROUPING SETS((a,b,c),(a,b),(a,c),(b,c),(a),(b),(c),())

GROUP BY ROLLUP(a, b, c)
--等价于以下语句。  
GROUPING SETS((a,b,c),(a,b),(a), ())

正则指定方法 不清楚

`(num|uid)?+.+` 排除 num 和 uid 字段列。

另外,where 使用正则可以如此:where A Rlike B、where A Regexp B。

lateral view

Lateral View 和表生成函数(例如Split、Explode等函数)结合使用,它能够将一行数据拆成多行数据,并对拆分后的数据进行聚合。

SELECT pageid, adid 
FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid;

窗口函数

实现按指定字段的分组排序

row_number() over(partition by col order col_2)

join 本质是集合的运算

join
与集合的关系:
A+A∩B = A B+A∩B = B
A-A∩B A∩B B-A∩B
A∪B A+B-A∩B

注意点

1、left join、right join、full join不管on上的条件是否为真都会返回left或right表中的记录
在这里插入图片描述
2、排序字段(以下a,b,c)为null会导致结果不正确

row_number() over(partition by a,b,c by gmtModified desc) as rk

3、group by字段(以下a,b,c)为null,会导致结果不正确

group by a ,b ,c 

4、join字段为null会导致结果不正确

t1  left join t2 on t1.a=t2.a and t1.b=t2.b and t1.c=t2.c

5、在JOIN的时候最好保证JOIN的字段唯一,不然会出现数据膨胀,在计算聚合值的时候出现问题。

select 
* from a 
left join b 
on a.id=b.id 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值