Hive语法总结

1.lateral view explode()

2.抽样 tablesample(10 rows) 每个split
tablesample(bucket 3 out of 32 in rand())
tablesample(bucket 3 out of 32 in momo_id)
3.count(distinct)这种语法可能会导致数据的倾斜
可以通过多层嵌套的group by 多个reducer进行计数


-- 第三层SELECT
SELECT
SUM(s.mau_part) mau
FROM
(
-- 第二层SELECT
SELECT
tag,
COUNT() mau_part
FROM
(
-- 第一层SELECT
SELECT
uuid,
CAST(RAND() * 100 AS BIGINT) tag -- 为去重后的uuid打上标记,标记为:0-100之间的整数。
FROM detail_sdk_session
WHERE partition_date >= '2016-01-01' AND partition_date <= now
GROUP BY uuid -- 通过GROUP BY,保证去重
) t
GROUP BY tag
) s
##########################
4.Hive的注释- -
5.连续活跃的小技巧
select count(distinct momo_id)
From online.table tablesample(10 rows)
where partition_date Between '20160816' AND '20160817'
AND daily_active_status_map[partition_date]=1
6.CONCAT_WS(separator, str1, str2,…)字符串的拼接
7.datediff(结束日期,开始日期)
日期格式: yyyy-MM-DD HH:MM:SS
yyyy-MM-DD
8.regexp_replace(‘2013/04/05’,’/‘,’-‘)
9.COALESCE( NULL, 258, 1311, 0 ) 返回列表中第一个非空的表达式
10.collect_set
配合group by 将列转化成行
10.格式化SQL语法
Cmd + A. cmd+K cmd+f
11.order by 全局一个reducer 排序
sort by 每个reducer 局部排序
12.Hive 的分区 分桶 索引
13.Hive表的抽样;
1.简单的随机抽样
Select * from table distribute by rand() sort by rand() limit 1000
select *
From
(Select ,cast(rand()100 as int) as test from table)
Where test%100=0
两种方式
如果是分桶表:tablesample(bucket 3 out of 8 on **)
如果表没有分桶,那么会先分桶,再抽样。这样的方式比分桶表要慢很多
14.count(
):所有行进行统计,包括NULL行
count(1):所有行进行统计,包括NULL行
count(column):对column中非Null进行统计
count(distinct column):对column中非Null进行去重统计
15.where not like
zip -q -r 压缩后的名字 待压缩文件
用户是最近两个月活跃用户
basic_version1.csv表是 依据用户安装的各种游戏APP的分类表,
group_version1.csv是 依据用户加入过的群组的名字中含有各种游戏关键词的分类表
label_version1.csv是 依据用户写的个人标签中含有各种游戏关键词的分类表
quanzi_version1. Csv是 依据用户加入的圈子的名字是否含有各种游戏关键词的分类表
以上四张表都会存在同一个用户存在多个分类的情况
16.
Select ’kuai_liao’ as event_name,
send_momo_id as momo_id
From table
这里面会在表里面增加一列
17.select from+lateral
Lateral view 中间不能插入where
一种思路不是在map(string:string)explode之后在进行where
而是直接在select的时候进行对map[key]这个特定选择的字段进行操作
17.show create table Mytable
18. Hive 不支持where in
可以使用的替代方案是 left outer join
19.collect_set只接受基本类型进行数组的组合
20.hive的不等值join
21.get_json_object(json_str,”$.key”)
json_tuple() 和lateral view 配合使用
json_to_array(). 直接转化为数组。
22.Row number() over (partition by col1 order by col2 desc) as group_inner_order
23.Map join进行不等值的连接
避免笛卡尔积
Create table …. Select as
无法创建分区,同时会自动给文件进行细分,最好还是先创建文件,再插入数据指定分区。这样方便后续数据的处理

TODO
hdfs文件的存储
map的数据倾斜问题
join的底层原理
common join.
Map join

posted @ 2018-11-11 19:27  吴烨  阅读(798)  评论(0编辑  收藏  举报