hive中实现行转列_hive中的列转行和行转列

https://www.cnblogs.com/zzhangyuhang/p/9791795.html

https://www.cnblogs.com/blogyuhan/p/9274784.html

列转行:

user_id order_id

104399 1715131

104399 2105395

104399 1758844

104399 981085

104399 2444143

104399 1458638

104399 968412

104400 1609001

104400 2986088

104400 1795054

把相同user_id的order_id按照逗号转为一行:select user_id,concat_ws(',',collect_list(order_id)) as order_value from col_lie group by user_id

使用方法

UDTF有两种使用方法,一种直接放到select后面,一种和lateral view一起使用。

1:直接select中使用

select explode_map(properties) as (col1,col2) from src;

不可以添加其他字段使用

select a, explode_map(properties) as (col1,col2) from src

不可以嵌套调用

select explode_map(explode_map(properties)) from src

不可以和group by/cluster by/distribute by/sort by一起使用

select explode_map(properties) as (col1,col2) from src group by col1, col2

2:和lateral view一起使用

select src.id, mytable.col1, mytable.col2 from src lateral view explode_map(properties) mytable as col1, col2;

此方法更为方便日常使用。执行过程相当于单独执行了两次抽取,然后union到一个表里。

行转列:

user_id order_value

104408 2909888,2662805,2922438,674972,2877863,190237

select user_id,order_value,order_id

from lie_col

lateral view explode(split(order_value,',')) num as order_id

limit 10;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值