一、Hive Lateral View
(1)什麼是hive Lateral View / 作用
Lateral View用於和UDTF函數(explode、split)結合來使用。
首先通過UDTF函數拆分成多行,再將多行結果組合成一個支持別名的虛擬表。
主要解決在select使用UDTF做查詢過程中,查詢只能包含單個UDTF,不能包含其他字段、以及多個UDTF的問題
(2)語法
LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)
(3)例子:統計人員表中共有多少種愛好、多少個城市?
select count(distinct(myCol1)), count(distinct(myCol2)) from psn2
LATERAL VIEW explode(likes) myTable1 AS myCol1
LATERAL VIEW explode(address) myTable2 AS myCol2, myCol3;
二、Hive 視圖
(1)hive View視圖特點
- 不支持物化視圖
- 只能查詢,不能做加載數據操作
- 視圖的創建,只是保存一份元數據,查詢視圖時才執行對應的子查詢
- view定義中若包含了ORDER BY/LIMIT語句,當查詢視圖時也進行ORDER BY/LIMIT語句操作,view當中定義的優先級更高
- view支持迭代視圖
(2)View語法
創建視圖:
CREATE VIEW [IF NOT EXISTS] [db_name.]view_name
[(column_name [COMMENT column_comment], ...) ]
[COMMENT view_comment]
[TBLPROPERTIES (property_name = property_value, ...)]
AS SELECT ... ;
查詢視圖:
select colums from view;
刪除視圖:
DROP VIEW [IF EXISTS] [db_name.]view_name;
三、Hive 索引
(1)Hive索引目的
優化查詢以及檢索性能
(2)語法
創建索引:
create index t1_index on table psn2(name)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild
in table t1_index_table;
as:指定索引器;
in table:指定索引表,若不指定默認生成在default__psn2_t1_index__表中
create index t1_index on table psn2(name)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild;
查詢索引:
show index on psn2;
重建索引(建立索引之後必須重建索引才能生效):
ALTER INDEX t1_index ON psn REBUILD;
刪除索引:
DROP INDEX IF EXISTS t1_index ON psn2;
四、Hive 運行方式
(1)Hive有哪幾種運行方式
- 命令行方式cli:控制檯模式
- 腳本運行方式(實際生產環境中用最多)
- JDBC方式:hiveserver2
- web GUI接口 (hwi、hue等)
(2)CLI運行方式
與hdfs交互
執行執行dfs命令
例:dfs –ls /
與Linux交互
!開頭
例: !pwd
(3)腳本運行方式
hive -e ""
hive -e "">aaa
hive -S -e "">aaa
hive -f file
hive -i /home/my/hive-init.sql
hive> source file (在hive cli中運行)
五、Hive GUI接口
(1)Hive Web GU安裝
web界面安裝:
下載源碼包apache-hive-*-src.tar.gz
將hwi war包放在$HIVE_HOME/lib/
製作方法:將hwi/web/*裏面所有的文件打成war包
cd apache-hive-1.2.1-src/hwi/web
jar -cvf hive-hwi.war *
複製tools.jar(在jdk的lib目錄下)到$HIVE_HOME/lib下
修改hive-site.xml
啓動hwi服務(端口號9999)
hive --service hwi
瀏覽器通過以下鏈接來訪問
http://node3:9999/hwi/
修改hive配置文件hive-site.xml添加以下配置內容:
<property>
<name>hive.hwi.listen.host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>hive.hwi.listen.port</name>
<value>9999</value>
</property>
<property>
<name>hive.hwi.war.file</name>
<value>lib/hive-hwi.war</value>
</property>
六、Hive 權限管理
(1)三種授權模型
1、Storage Based Authorization in the Metastore Server
基於存儲的授權 :可以對Metastore中的元數據進行保護,但是沒有提供更加細粒度的訪問控制(例如:列級別、行級別)。
2、SQL Standards Based Authorization in HiveServer2
基於SQL標準的Hive授權 : 完全兼容SQL的授權模型,推薦使用該模式。
3、Default Hive Authorization (Legacy Mode)
hive默認授權 : 設計目的僅僅只是爲了防止用戶產生誤操作,而不是防止惡意用戶訪問未經授權的數據。
(2)完全兼容SQL的授權模型:除支持對於用戶的授權認證,還支持角色role的授權認證
- role可理解爲是一組權限的集合,通過role爲用戶授權
- 一個用戶可以具有一個或多個角色
- 默認包含另種角色:public、admin
限制:
1、啓用當前認證方式之後,dfs, add, delete, compile, and reset等命令被禁用。
2、通過set命令設置hive configuration的方式被限制某些用戶使用。
(可通過修改配置文件hive-site.xml中hive.security.authorization.sqlstd.confwhitelist進行配置)
3、添加、刪除函數以及宏的操作,僅爲具有admin的用戶開放。
4、用戶自定義函數(開放支持永久的自定義函數),可通過具有admin角色的用戶創建,其他用戶都可以使用。
5、Transform功能被禁用。
在hive服務端修改配置文件hive-site.xml添加以下配置內容:
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>
<property>
<name>hive.users.in.admin.role</name>
<value>root</value>
</property>
<property>
<name>hive.security.authorization.manager</name>
<value>org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory</value>
</property>
<property>
<name>hive.security.authenticator.manager</name>
<value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>
</property>
服務端啓動hiveserver2;客戶端通過beeline進行連接
(3)Hive權限管理:角色的添加、刪除、查看、設置
CREATE ROLE role_name; -- 創建角色
DROP ROLE role_name; -- 刪除角色
SET ROLE (role_name|ALL|NONE); -- 設置角色
SHOW CURRENT ROLES; -- 查看當前具有的角色
SHOW ROLES; -- 查看所有存在的角色
(4)角色的授予、移除、查看
將角色授予某個用戶、角色:
GRANT role_name [, role_name] ...
TO principal_specification [, principal_specification] ...
[ WITH ADMIN OPTION ];
principal_specification
: USER user
| ROLE role
移除某個用戶、角色的角色:
REVOKE [ADMIN OPTION FOR] role_name [, role_name] ...
FROM principal_specification [, principal_specification] ... ;
principal_specification
: USER user
| ROLE role
查看授予某個用戶、角色的角色列表:
SHOW ROLE GRANT (USER|ROLE) principal_name;
查看屬於某種角色的用戶、角色列表: