hive转置
来源:互联网 发布:pp2000软件 编辑:程序博客网 时间:2024/06/06 11:03
hive行转列lateral view explode用法
- |
- 浏览:1235
- |
- 更新:2014-11-19 13:29
- 1
- 2
- 3
- 4
- 5
lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
工具/原料
- HADOOP、HIVE
- HIVE、CRT
方法/步骤
先把要转换的各列拼到一起,如有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为只有一条记录的表,可以根据需要变动
效果如下:
用split函数把上面拼接的字符串转换为分割数组,类型为array。sql为
select split(concat_ws(',','1','2','3','4','5','6','7','8','9'),',') sp
from test.dual;
效果如下:
上面返回结果为array数组类型,如果想取上面数组的第5个数的值也就是5,加个下标就可以(注:跟行转列无关)
sql为:select split(concat_ws(',','1','2','3','4','5','6','7','8','9'),',')[4]from test.dual;
效果图如下:
用explode函数实现行转列,sql为
select explode(split(concat_ws(',','1','2','3','4','5','6','7','8','9'),',')) from test.dual;
效果如下:
上面方法实现了行转列,不过仅仅实现了一列,如果表中还有其他字段,也想一起显示出来,就要用到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;
效果如下图:
解释一下,from后面是你的表名,在表名后面加lateral view explode。。。(你的行转列sql) ,还必须要起一个别名,我这个字段的别名为sp。然后再看看select后面的 s.*,就是原表的字段,我这里面只有一个字段,且为X,效果就是上面的图片效果了。
END
注意事项
- 写法有点怪,一定不要写错
- 不要忘记起别名,要不select没列可写
- hive转置
- Hive
- HIVE
- Hive
- hive
- hive
- hive
- hive
- hive
- Hive
- hive
- Hive
- hive
- Hive
- Hive
- hive
- Hive
- hive
- everyDayEnglish
- 最简单也最难——如何获取到Android控件的高度
- Android Api Demos登顶之路(四十一)Fragment-->Menu
- Hive之insert into 和insert overwrite
- 模态视图-多视图应用
- hive转置
- Linux编程——文件 IO操作
- Caffe + Ubuntu 14.04 + CUDA 6.5
- Spring入门之环境搭建:
- java基础之----选择排序 冒泡排序
- HDU 5411(矩阵快速幂)
- Fiddler 命令
- Caffe + Ubuntu 12.04 64bit + CUDA 5.5
- weight值解释和使用