hive转置

hive行转列lateral view explode用法

  • |
  • 浏览:1235
  • |
  • 更新:2014-11-19 13:29
  • hive行转列lateral view explode用法 1
  • hive行转列lateral view explode用法 2
  • hive行转列lateral view explode用法 3
  • hive行转列lateral view explode用法 4
  • hive行转列lateral view explode用法 5
分步阅读

lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

工具/原料

  • HADOOP、HIVE
  • HIVE、CRT

方法/步骤

  1. 先把要转换的各列拼到一起,如有9列,下面为了测试方便,我用1,2,3,4,5,6,7,8,9代替,sql为

    select concat_ws(',','1','2','3','4','5','6','7','8','9') from test.dual;

    其中我的test.dual为只有一条记录的表,可以根据需要变动

    效果如下:

    hive行转列lateral view explode用法
  2. 用split函数把上面拼接的字符串转换为分割数组,类型为array。sql为

    select split(concat_ws(',','1','2','3','4','5','6','7','8','9'),',')  sp

    from test.dual;

    效果如下:

    hive行转列lateral view explode用法
  3. 上面返回结果为array数组类型,如果想取上面数组的第5个数的值也就是5,加个下标就可以(注:跟行转列无关)

    sql为:select split(concat_ws(',','1','2','3','4','5','6','7','8','9'),',')[4]from test.dual; 

    效果图如下:

    hive行转列lateral view explode用法
  4. 用explode函数实现行转列,sql为

     select explode(split(concat_ws(',','1','2','3','4','5','6','7','8','9'),',')) from test.dual;

    效果如下:

    hive行转列lateral view explode用法
  5. 上面方法实现了行转列,不过仅仅实现了一列,如果表中还有其他字段,也想一起显示出来,就要用到lateral view 了,不过写法更上面有些不同,sql为:

    select s.*,spfrom test.dual slateral view explode(split(concat_ws(',','1','2','3','4','5','6','7','8','9'),',')) t as sp;

    效果如下图:

    hive行转列lateral view explode用法
  6. 6

    解释一下,from后面是你的表名,在表名后面加lateral view explode。。。(你的行转列sql) ,还必须要起一个别名,我这个字段的别名为sp。然后再看看select后面的 s.*,就是原表的字段,我这里面只有一个字段,且为X,效果就是上面的图片效果了。

    END

注意事项

  • 写法有点怪,一定不要写错
  • 不要忘记起别名,要不select没列可写

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值