Hive中行列转换

原创 2015年07月08日 23:30:04
1、演示多列转为单行
数据文件及内容: student.txt
xiaoming|english|92.0
xiaoming|chinese|98.0
xiaoming|math|89.5
huahua|chinese|80.0
huahua|math|89.5

创建表studnet:
create table student(name string,subject string,score decimal(4,1))
row format delimited
fields terminated by '|';

导入数据:
load data local inpath '/home/hadoop/hivetestdata/student.txt' into table student;


列转为行演示:
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


2、演示单行转为多列
数据文件及内容:student2.txt
huahua|chinese=80,math=89.5
xiaoming|english=92,chinese=98,math=89.5

创建表:
create table student2(name string,subject_score_list string)
row format delimited

fields terminated by '|';

导入数据:

load data local inpath '/home/hadoop/hivetestdata/student2.txt' into table student2;

行转为列演示:
hive (hive)> select * from student2;
student2.name student2.subject_score_list
huahua             chinese=80,math=89.5
xiaoming          english=92,chinese=98,math=89.5


hive (hive)> select name, subject_list from student2 stu2 lateral view explode(split(stu2.subject_score_list,','))stu_subj as subject_list; ----别名一定不要忘记
huahua    chinese=80
huahua    math=89.5
xiaoming english=92
xiaoming chinese=98
xiaoming math=89.5


Impala的行列转换请查看: http://blog.csdn.net/jiangshouzhuang/article/details/46809931
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

hive-列转行和行转列

1. 假设我们在hive中有两张表,其中一张表是存用户
  • JThink_
  • JThink_
  • 2014年08月26日 21:27
  • 36309

hive collect_set,lateral view,explode 实现行列转换

hive sql 实现行列转换

hive之实现列转行

样例: select * from tab1 limit 10; 结果: id  num a  1 a  2 a  3 b  4 b  3 ···...

hive转置

wmj

hive行列转换总结

1、单列转换成多行 比如: pageid  paged page1   a,b,c 要转换成 page1 a page1 b page1 c select pageid,p from test lat...

hive改表结构的两个坑

坑一:改变字段类型后更新数据不成功   关于hive插入数据的一个小坑,今天插入一个表中数据,插入时写的是常数,比如0.01 ,表中的字段也是DECIMAL(5,2)   按照常理插...

hive 行转列和列转行的方法

一、行转列的使用 1、问题 hive如何将 a       b       1 a       b       2 a       b       3 c       d       4 c  ...

Spark MLlib之矩阵

Spark MLlib的底层组件 BLAS/LAPACK层 LAPACK是用Fortran编写的算法库,顾名思义,Linear Algebra Package是为了解决通用的线性代数问题。算法包BLA...

hive UDAF行列转换

目标实现 1 a 1 b 2 a 2 c 转换为 1 a,b 2 a,c package com.hive.udf; //用法 select a,concat1(b,',') from concat...

Spark SQL/Hive 同一列的多行记录合并为一行

可以写UDAF,但导jar包啥的挺麻烦的,我找了个简单方法,两个函数搞定。 需求是这样的,统计出同一用户在同一地点会去哪些商店,商店以':'隔开。 (第一列用户id,第二列商店id,第三列地区id,第...
  • Dr_Guo
  • Dr_Guo
  • 2016年05月26日 16:07
  • 5077
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hive中行列转换
举报原因:
原因补充:

(最多只允许输入30个字)