1.lateral view explode()json
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
) ssession
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是 依据用户加入的圈子的名字是否含有各类游戏关键词的分类表
以上四张表都会存在同一个用户存在多个分类的状况ui
TODO
hdfs文件的存储
map的数据倾斜问题
join的底层原理
common join.
Map joinregexp