hive和presto 行列转化
- 1、行转列
数据源:
要实现的效果:
Hive: collect_set转为数组并去重,concat_ws将数组用逗号间隔连接成字符串
select user_id
, concat_ws(',', collect_set(order_id)) as order_ids
from tmp.tmp_row_to_col
where 1 = 1
group by user_id ;
Presto: array_agg转为数组,array_distinct去重,array_join将数组用逗号间隔连接成字符串
select user_id
, array_join(array_distinct(array_agg(order_id)), ',') as order_ids
from tmp.tmp_row_to_col
where 1 = 1
group by user_id ;
- 2、列转行
即将上面的两张图顺序调换一下
Hive: split将order_ids拆分成数组,lateral view explode将数组炸裂开
select a.user_id
, b.order_id
from tmp.tmp_col_to_row a
lateral view explode(split(order_ids, ',')) b as order_id ;
Presto: split将order_ids拆分成数组,cross join unnest将数组炸裂开,要注意一下两种语法的表名缩写位置
select a.user_id