1.CROSS JOIN
除了内连接(inner jion),外连接(left join ,right join,full join),还支持交叉连接。
交叉连接返回被连接两个表的卡迪尔乘积,即:
select 列名
from 表名1 cross join 表名2
where 表名1.列名=表名2.列名
2.如果想要将ARRAY转换为一组行,即平展操作,可以使用UNNEST运算符。
UNNEST获取一个ARRAY,然后平铺成一个表,表中的每一行都是该ARRAY中的元素。
例如某个字段是ARRAY类型,teamid字段内容[{1,2,3,4}]
select unnest(teamid) as id from table1
3、explode函数
explode()函数是Hive的内置函数,也有人将其称为炸裂函数,
此函数将array或map作为输入,按行输出array或map中的元素,可搭配lateral view使用。
当explode函数的输入是array时,array中的每个元素都单独输出为一行;
当explode函数的输入是map时,map中的每对key-value会单独输出为一行,key为一列,value为一列。
explode函数的输入只能为array或map,若要处理string输入字段,搭配split()函数,split函数可以将string按照规定符号进行划分,
划分结果是array,这样经过划分string变成array,就能当做explode函数的输入。
4、lateral view
Lateral view通常与生成器函数结合使用,比如explode,生成包含一行或多行的虚拟表,
select id — 原字段
,user — 原字段
,orderid — 拆分字段
from table1
lateral view explode(order_set)tmp1 as orderid
使用lateral view的时候需要注意的几点:
1. lateral view的位置是from后where条件前;
2. 生成的虚拟表的表名不可省略;
3. from后可带多个lateral view;
4. 如果要拆分的字段有null值,需要使用lateral view outer 替代.
参考博客:https://blog.csdn.net/weixin_38753213/article/details/115364880