hive一行變多行及多行變一行


hive一行變多行及多行變一行

場景
name alias
zhaoqiansun abc def ghi

處理數據時需要將上表處理成為下面的形式:

name alias
zhaoqiansun abc
zhaoqiansun def
zhaoqiansun ghi
辦法
  • 使用Lateral viewexplode()來實現,命令如下:
hive> select name, single_alias from test lateral view explode(split(alias, ' ')) test_alias as single_alias;
  • explode()是將array數據分解為單獨行的函數,explode([1, 2, 3]) 處理后就變成了:

    1
    2
    2
  • split是將string按照指定字符分解的函數返回結果為array

  • lateral view的功能是將某數據作為一個虛擬的column

多行變一行,逆操作

列轉為行演示:
hive (hive)> select name,concat_ws(',',collect_set(subject)) from student group by name;
huahua chinese,math
xiaoming english,chinese,math

hive (hive)> select name,concat_ws(',',collect_set(concat(subject,'=',score))) from student group by name;
huahua chinese=80,math=89.5
xiaoming english=92,chinese=98,math=89.5

參考:http://www.cnblogs.com/zhangbojiangfeng/p/6077351.html

如果不使用 concat_ws(連接函數)是這樣的:

hive> select * from test;
OK
zhao	15	20170807
zhao	14	20170809

hive> select name, collect_set(age) from test group by name;
zhao	[15,14]
參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM