上次已經講了《Hive數據倉庫之快速入門一》不記得的小伙伴可以點擊回顧一下,接下來我們再講Hive數據倉庫之快速入門二 DQL hive中的order by、distribute by、sort by和cluster by order by 全局排序,只有一個Reduce任務 sort by 只做j ...
上次已經講了《Hive數據倉庫之快速入門一》不記得的小伙伴可以點擊回顧一下,接下來我們再講Hive數據倉庫之快速入門二
DQL
hive中的order by、distribute by、sort by和cluster by
order by
全局排序,只有一個Reduce任務
sort by
只做jubu排序
distribute by
用distribute by 會對指定的欄位按照hashCode值對reduce的個數取模,然後將任務分配到對應的reduce中去執行
cluster by
distribute by 和 sort by 合用就相當於cluster by,但是cluster by 不能指定排序為asc或 desc 的規則,只能是desc倒序排列
註:distribute by 和 sort by,distribute by 必須在 sort by前面
表連接
1.join只支持等值連接
2.可以 join 多於 2 個表
SELECT a.val, b.val, c.val FROM a JOIN b
ON (a.key = b.key1) JOIN c ON (c.key = b.key2)
註:如果join中多個表的 join key 是同一個,則 join 會被轉化為單個 map/reduce 任務
3.LEFT,RIGHT和FULL OUTER
SELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key)
如果 d 表中找不到對應 c 表的記錄,d 表的所有列都會列出 NULL,包括 ds 列。也就是說,join 會過濾 d 表中不能找到匹配 c 表 join key 的所有記錄。這樣的話,LEFT OUTER 就使得查詢結果與 WHERE 子句無關
•解決辦法
SELECT c.val, d.val FROM c LEFT OUTER JOIN d
ON (c.key=d.key AND d.ds='2009-07-07' AND c.ds='2009-07-07')
4.LEFT SEMI JOIN
LEFT SEMI JOIN 的限制是, JOIN 子句中右邊的表只能在 ON 子句中設置過濾條件,在 WHERE 子句、SELECT 子句或其他地方過濾都不行
SELECT a.key, a.value
FROM a
WHERE a.key in
(SELECT b.key
FROM B);
可以被重寫為:
SELECT a.key, a.val
FROM a LEFT SEMI JOIN b on (a.key = b.key)
5.UNION ALL
用來合併多個select的查詢結果,需要保證select中欄位須一致
select_statement UNION ALL select_statement UNION ALL select_statement ...
分析視窗函數
over (partition by * order by d desc)
其他
1.不支持EXIST ,NOT EXIST
2.Top N 關鍵字 為Limit
3.支持正則篩選欄位,如SELECT `(ds|hr)?+.+` FROM test
DCL
許可權
Grant/revoke語法:
grant/revoke priv_type[column_list] on object_type object to/from principal_type principal_name
查看grant 定義:
show grant user user_name on table table_name;
創建/刪除角色:
Create/drop Role role_name
角色分配/回收:
Grant role role_name to user user_name
Revoke role role_name from user user_name
角色授權:
Grant/revoke priv_type[col_List] on object_type object from/to role role_name
查看role定義:
show role grant role role_name
相關hive元信息表:
Db_privs:記錄了User/Role在DB上的許可權
Tbl_privs:記錄了User/Role在table上的許可權
Tbl_col_privs:記錄了User/Role在table column上的許可權
Roles:記錄了全部創建的role
Role_map:記錄了User與Role的相應關係
Hive函數
UDF、UDAF和UDTF
UDF實現輸入一行輸出一行行的函數
UDAF實現輸入多行輸出一行的函數
UDTF實現輸入一行輸出多行的函數
自定義UDF、UDAF和UDTF
相關資料
hive2.0函數大全 http://www.cnblogs.com/MOBIN/p/5618747.html
Mysql數據導入Hive
通過sqoop把mysql數據導入到hive(若hive沒對應表則自動建表)
./bin/sqoop import --connect jdbc:mysql://172.17.4.1:3306/poi --username lizt --table poi_amap --hive-import --password 123456
python 客戶端
pyhs2
pip install pyhs2