添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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