一、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;
效果,结论:view中的先执行。
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