Hive語法總結

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

  1. 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
  2. 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 joinregexp

相關文章
相關標籤/搜索