Hive Lateral View
Lateral View用于和 UDTF 函数(explode、split)结合来使用。
首先通过UDTF函数拆分成多行,再将多行结果组合成一个支持别名的虚拟表。
主要解决在select使用UTF做查询过程中,查询只能包含单个UDTF,不能包含其他字段 、以及多个UDTF的问题
select explode(likes),id from psn;
【执行会报错 --Only a single expression in the SELECT clause is supported with UDTF's.】
语法
lateral view udtf(expression) tableAlias as columnAlias [, colnumAlias2]
例:
统计人员表中共有多少种爱好、多少个城市? [爱好为数组,地址为map]
select count(distinct(likeCol)) , count(distinct(addrCol)) from psn
lateral view explode(likes) tbl_like as likeCol
lateral view explode(address) tbl_addr as addrCol;
Hive 视图
特点
不支持物化视图
只能查询,不能做加载数据 操作
视图的创建,只是保存一份元数据,查询视图时 才执行 对应的子查询
view定义中若包含了order by / limit语句,当查询视图时也进行order / limit操作,view中定义的语句操作优先级更高
view支持迭代视图
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 columns from view_name;
删除视图
DROP VIEW [IF EXISTS] [db_name.]view_name;
Hive索引
目的:优化查询以及检索性能
创建索引
create index psn_index on table psn(name)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild
in table psn_index_tbl;
as : 指定索引器
in table : 指定存放索引的索引表,若不指定默认生成在 default_psn_psn_index_ 表中
重建索引(建立索引之后 必须重建索引才能生效 )
alter index psn_index on psn rebuild;
查询索引
show index on psn;
删除索引
drop index [if exists] psn_index on psn;
Hive命令运行方式
- 命令行方式cli
- 脚本运行方式---生产环境
- JDBC方式 hiveserver2
- web gui接口 (hwi、hue)
CLI模式中
与 hdfs 交互
执行dfs命令
例: dfs -ls /
与 linux 交互
!开头
例: !pwd
hive脚本运行方式
hive -e ""
hive -e "" > aaa.txt
hive -S -e "" > aaa.txt -- 不输出日志
hive -f filepath
hive -i filepath -- 执行完进入hive控制台
hive控制台里(cli)执行 source filepath
HIVE GUI接口
web界面安装:
1、下载源码包 apache-hive-*-src.tar.gz 解压
2、将hwi war包放在 $HIVE_HOME/lib/
制作方法:将hwi/web/*里面所有的文件打成war包
cd apache-hive-1.2.1-src/hwi/
jar -cvf hive-hwi.war web/*
3、复制tools.jar(在jdk的lib目录下)到$HIVE_HOME/lib下
4、修改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>
5、启动hwi服务(端口号9999)
hive --service hwi
浏览器通过以下链接来访问
http://node3:9999/hwi/
Hive 权限管理
三种授权模型:
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默认授权 - 设计目的仅仅只是为了防止用户产生误操作,而不是防止恶意用户访问未经授权的数据。
SQL Standards Based Authorization in HiveServer2
完全兼容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 功能被禁用。
开启SQL Standards Based Authorization
在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进行连接
使用:
一、角色的添加、删除、查看、设置:
create role role_name; -- 创建角色
drop role role_name; -- 删除角色
set role (role_name | all | none); -- 设置角色
show current roles; -- 查看当前具有的角色
show roles; -- 查看所有存在的角色
默认有的角色 public admin
二、角色的授予、移除、查看
将角色授予某个用户、角色:
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;
查看属于某种角色的用户、角色列表
SHOW PRINCIPALS role_name;
权限:
SELECT privilege
INSERT privilege
UPDATE privilege
DELETE privilege
ALL PRIVILEGES
将权限授予某个用户、角色:
GRANT
priv_type [, priv_type ] ...
ON table_or_view_name
TO principal_specification [, principal_specification] ...
[WITH GRANT OPTION];
principal_specification
: USER user
| ROLE role
priv_type
: INSERT | SELECT | UPDATE | DELETE | ALL
移除某个用户、角色的权限:
REVOKE [GRANT OPTION FOR]
priv_type [, priv_type ] ...
ON table_or_view_name
FROM principal_specification [, principal_specification] ... ;
查看某个用户、角色的对于所有表或某个表的权限:
SHOW GRANT [principal_name] ON (ALL| ([TABLE] table_or_view_name)
摘自官网的每种操作需要的权限
Codes
Y: Privilege required.
Y + G: Privilege "WITH GRANT OPTION" required.
Action | select | insert | update | delete | ownership | admin | URI Privilege (RWX Permission + Ownership) |
---|---|---|---|---|---|---|---|
CREATE TABLE | Y (of database) | Y (for create external table – the location) | |||||
DROP TABLE | Y | ||||||
DESCRIBE TABLE | Y | ||||||
SHOW PARTITIONS | Y | ||||||
ALTER TABLE LOCATION | Y | Y (for new location) | |||||
ALTER PARTITION LOCATION | Y | Y (for new partition location) | |||||
ALTER TABLE ADD PARTITION | Y | Y (for partition location) | |||||
ALTER TABLE DROP PARTITION | Y | ||||||
ALTER TABLE (all of them except the ones above) | Y | ||||||
TRUNCATE TABLE | Y | ||||||
CREATE VIEW | Y + G | ||||||
ALTER VIEW PROPERTIES | Y | ||||||
ALTER VIEW RENAME | Y | ||||||
DROP VIEW PROPERTIES | Y | ||||||
DROP VIEW | Y | ||||||
ANALYZE TABLE | Y | Y | |||||
SHOW COLUMNS | Y | ||||||
SHOW TABLE STATUS | Y | ||||||
SHOW TABLE PROPERTIES | Y | ||||||
CREATE TABLE AS SELECT | Y (of input) | Y (of database) | |||||
CREATE INDEX | Y (of table) | ||||||
DROP INDEX | Y | ||||||
ALTER INDEX REBUILD | Y | ||||||
ALTER INDEX PROPERTIES | Y | ||||||
SELECT | Y | ||||||
INSERT | Y | Y (for OVERWRITE) | |||||
UPDATE | Y | ||||||
DELETE | Y | ||||||
LOAD | Y (output) | Y (output) | Y (input location) | ||||
SHOW CREATE TABLE | Y+G | ||||||
CREATE FUNCTION | Y | ||||||
DROP FUNCTION | Y | ||||||
CREATE MACRO | Y | ||||||
DROP MACRO | Y | ||||||
MSCK (metastore check) | Y | ||||||
ALTER DATABASE | Y | ||||||
CREATE DATABASE | Y (if custom location specified) | ||||||
EXPLAIN | Y | ||||||
DROP DATABASE | Y |