蜂巢中Presto的transform()函数的等效项

Vlemaistre

我似乎在Hive中找不到与Presto的transform()函数等效的函数。

TLDR:如何在Hive中将函数应用于数组的每个元素?

更准确地说,我有一个包含零个或多个结构的数组。每个结构都具有相同的架构,并包含多个变量,其中一个is_done是布尔值。我想做的是评估数组中是否至少有一个结构体的变量is_done为True。

在Presto中,我们将使用transform提取布尔值然后array_max查看是否至少有一个为真:

array_max(transform(a.array_task, x -> x.is_done))
左连接

不幸的是,Hive没有此类功能。无需使用其他UDF,就可以通过展开数组并检查struct元素来做到这一点,如下所示:

with your_table as (select array(named_struct('is_done',true),named_struct('is_done',false)) initial_array) 

select t.initial_array, max(a.s.is_done) as is_done 
  from your_table t
       lateral view outer explode(initial_array) a as s --s is a struct
  group by  t.initial_array    
  ;

结果:

initial_array                           is_done 

[{"is_done":true},{"is_done":false}]    true

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章