presto array:
- reduce操作:依次作用于元素,最终生成一个值
- transform操作,每个元素作操作,最终依旧是array
需求:实现数组的相邻元素做差,特殊的,首个元素跟数组最大值做差
presto可以实现复杂的数组操作,但hive并不支持此类操作。
%%psql
select
kgid
,array_join(minute_diff_arr, ',') minute_diff
,array_join(transform(minute_diff_arr, x -> round(x/60, 2)), ',') hour_diff
,recom_id_list
from (
select
kgid
,recom_id_list
,transform(
split(recom_id_list, ','), x -> if(array_position(split(recom_id_list, ','), x) = 1
,date_diff('minute', from_unixtime(x / 1000), from_unixtime(array_max(split(recom_id_list, ',')) / 1000))
,date_diff('minute', from_unixtime(x / 1000), from_unixtime(split(recom_id_list, ',')[array_position(split(recom_id_list, ','), x) - 1] / 1000))
)
) minute_diff_arr
from tb
)