相当于 Hive 中 Presto 的 transform() 函数
Equivalent of Presto's transform() function in hive
我似乎无法在 Hive 中找到与 Presto 的 transform() 函数等效的函数。
TLDR:如何将函数应用于配置单元中数组的每个元素?
更准确地说,我有一个包含零个或多个结构的数组。每个结构都具有相同的架构并包含多个变量,其中一个 is_done
是一个布尔值。我想做的是评估数组中是否至少有一个结构的变量 is_done 为 True.
在 Presto 中,我们会使用 transform
来提取布尔值,然后 array_max
看看是否至少有一个为真:
array_max(transform(a.array_task, x -> x.is_done))
不幸的是,Hive 没有这样的功能。在不使用额外的 UDF 的情况下,您可以通过分解数组并像这样检查结构元素来做到这一点:
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
我似乎无法在 Hive 中找到与 Presto 的 transform() 函数等效的函数。
TLDR:如何将函数应用于配置单元中数组的每个元素?
更准确地说,我有一个包含零个或多个结构的数组。每个结构都具有相同的架构并包含多个变量,其中一个 is_done
是一个布尔值。我想做的是评估数组中是否至少有一个结构的变量 is_done 为 True.
在 Presto 中,我们会使用 transform
来提取布尔值,然后 array_max
看看是否至少有一个为真:
array_max(transform(a.array_task, x -> x.is_done))
不幸的是,Hive 没有这样的功能。在不使用额外的 UDF 的情况下,您可以通过分解数组并像这样检查结构元素来做到这一点:
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