一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第20天,点击查看活动详情。
上一篇已经介绍了hive函数中非常重要的炸裂函数,理解起来没有那么容易,大家都看明白了吗?
回顾一下,他这个炸裂函数就是可以将数组或者map中的元素炸裂成多行或者多列,对结果集的数据进行扩散。
然后本文介绍他的一个衍生函数posexplode。序号是接着上文的,因为也属于炸裂函数的一种。
2、posexplode(col) 炸裂函数
posexplode 是在explode 的基础的衍生函数,他对数组或者map的炸裂加工操作和explode()函数基本一样,唯一不同的就是在炸裂的基础上,还会对每一行数据多生成一列索引列,索引从0开始
with mytable as (--Demo dataset, use your table instead of this
select stack(4, --number of tuples
'Peter',float(10),'2021-01-13',
'Peter',float(20),'2021-03-13',
'Peter',float(30),'2021-05-13',
'Peter',float(40),'2021-07-13'
) as (account_name,available_balance,date_balance)
) -- use your table instead of this CTE
select
a.account_name
,a.available_balance
,a.date_balance
,new_col
from mytable a
lateral view posexplode(array('tt','zz','dd','ss')) data_value as new_col
和explode的案例一起执行会得到不同的结果,这个sql结果就会新增出一条索引值的列。
再来介绍两个在日常大数据开发过程中非常常用的表数据关联方法。
表的关联
left join 左连接
常见使用方法:left join......on......
具体功能描述:这跟mysql中的左连接的使用非常像,基本就是一样吧,就是将左边与右边的表进行关联,然后通过关联字段和过滤条件得到信息组合,并且左边表的数据全部保留。
不过在hive中还有一个分区的字段,而使用连接查询时,一定要注意分区字段要跟在表的后面,并且左右表分别要写上分区。
select
sutdent.name
,sutdent.id
,sutdent.age
,color.color
from
(
select
id
,name
,age
from student
where pt ='${-1d}'
)sutdent
left join
(
select
student_id
,color
from student_color
where pt ='${-1d}'
)color
on color.student_id=sutdent.id
结果大家可以自行执行获得,注意左表的数据是全部保留的,所以这两张表的数据可以设置不一样,才能看出效果来。