一、Hive Lateral view:使用虚拟表的概念。但并非是真正的视图。
1.1、与UDTF函数(split、explode)联合使用。
1.2、首先通过UDTF函数将数据拆分成多行,再将多行结果组成一个虚拟表(支持别名)。
1.3 主要场景:Hive在使用UDTF函数时,查询只能包含一个UDTF,不能包含其他字段,不能多个UDTF联合使用。错误例子:
1.4 使用语句:
select count(distinct(myTable1.myClo1)),count(distinct(mytable2.myClo2)) from psn
lateral view explode(likes) myTable1 AS myClo1
lateral view explode(address) mytable2 AS myClo2,myClo3;
二、Hive视图。
2.1,创建视图: create view v_psn as select * from psn;
查看视图:show tables;创建视图后mysql中查看hive元数据信息:
2.2 Hive 不支持物化视图。Hive视图只能查询,不能加载数据。
2.3 view 中定义了order by/limit语句,使用view查询时也用了order by/limit语句。view中定义的优先执行。
创建:create view v1_psn as select * from psn order by id;
使用:select * from v1_psn order by id desc limit 3;
2.4 支持迭代视图。
2.5 视图创建只是建立一份元数据。查询视图时再执行响应子查询。
2.6 删除视图:drop view v_psn;
三、Hive索引。
3.1:创建索引。最下面的in_psn_table 是存储索引的偏移量与数据的。也可不指定,会自动创建
create index in_psn on table psn(name)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild
in table in_psn_table;
3.2 索引表创建时,并不会自动将数据的索引构建进去。需要手动构建。
alter index in_psn on psn rebuild; in_psn_table 存储的 索引列、路径、offset
如果数据表构建完索引后又新增数据,需要rebuild重建索引。
3.3 删除索引:drop index in_psn on psn;
四、Hive运行方式。
四种:命令行、JDBC、脚本、web GUI接口.前两种之前已经写过就不再说了。
4.1hive命令行模式中:
发现查询 比直接hdfs查询要快,因为hive已经与hdfs连接中。
4.2 脚本方式运行。
非客户端下:hive -e "select * from psn limit 2;"
查询数据重定向到文件:hive -e "select * from psn limit 2;" >aaa;
hive -e 会有些提示信息。去除提示信息(静默模式):hive -S -e "select * from psn limit 2;"
从文件 读取sql命令执行:例:创建个文件:echo "select id from psn;select name from psn"> bbb
执行文件中的sql :hive -f bbb;
还可以使用 hive -i bbb 也能执行,区别就是,-i代表执行完文件中的sql后会停留在hive客户端状态。
hive客户端状态执行文件中的说起来:source bbb;
五、GUI接口。
这个没什么作用。略过。
六、Hive权限管理。
主要说第二种:
添加权限管理:
1、hive-site.xml中添加。
2、注意服务开启使用hiveserver2.
使用root登录后依然为public权限。很多功能还是用不了。但是可以通过:set role admin;给自己admin角色。;
创建角色:create role test; 删除角色:drop role test; 查看权限:show role grant role test;
授权: grant admin to role test; 向角色回收权限 revoke admin from role test;
下面的了解下即可: