我似乎无法在Hive中找到与Presto的transform()函数等效的函数。
TLDR:如何将一个函数应用于hive中数组的每个元素?
更准确地说,我有一个包含零个或多个结构的数组。每个结构都具有相同的架构,并包含多个变量,其中包括一个is_done
,它是一个布尔值。我想做的是评估数组中是否至少有一个结构体的变量is_done为True。
在Presto中,我们将使用transform
提取布尔值,然后使用array_max
来查看是否至少有一个为真:
array_max(transform(a.array_task, x -> x.is_done))
答案 0 :(得分:1)
不幸的是,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