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