hive函数之炸裂函数二

479 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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
​
​

结果大家可以自行执行获得,注意左表的数据是全部保留的,所以这两张表的数据可以设置不一样,才能看出效果来。