设为首页 加入收藏

TOP

Impala中多列转为一行
2015-11-21 01:46:12 来源: 作者: 【 】 浏览:0
Tags:Impala 多列 转为 一行

之前有一位朋友咨询我,Impala中如何实现将多列转为一行,其实Impala中自带函数可以实现,不用自定义函数。

下面我开始演示:

-bash-4.1$ impala-shell

Starting Impala Shell without Kerberos authentication
Connected to cdha:21000
Server version: impalad version 1.4.2-cdh5 RELEASE (build eac952d4ff674663ec3834778c2b981b252aec78)
Welcome to the Impala shell. Press TAB twice to see a list of available commands.


Copyright (c) 2012 Cloudera, Inc. All rights reserved.


(Shell build version: Impala Shell v1.4.2-cdh5 (eac952d) built on Tue Sep 16 19:15:40 PDT 2014)

[cdha:21000] > create table student(name string,subject string,score decimal(4,1)); -------------创建演示表:student(脱离学校四年了,还不忘自己是学生^_^)
Query: create table student(name string,subject string,score decimal(4,1))


Returned 0 row(s) in 1.97s
[cdha:21000] > insert into student values('xiaoming','math',89.5); ----------------插入演示数据 (小明和花花的学习成绩,他们感情比较好)
Query: insert into student values('xiaoming','math',89.5)
Inserted 1 rows in 2.56s
[cdha:21000] > insert into student values('xiaoming','english',92);
Query: insert into student values('xiaoming','english',92)
Inserted 1 rows in 0.39s
[cdha:21000] > insert into student values('xiaoming','chinese',98);
Query: insert into student values('xiaoming','chinese',98)
Inserted 1 rows in 0.42s
[cdha:21000] > insert into student values('huahua','chinese',80);
Query: insert into student values('huahua','chinese',80)
Inserted 1 rows in 0.40s
[cdha:21000] > insert into student values('huahua','math',89.5);
Query: insert into student values('huahua','math',89.5)
Inserted 1 rows in 0.29s
[cdha:21000] > select * from student; ----------每次考完试,老师报分数时都很紧张
Query: select * from student
+----------+---------+-------+
| name | subject | score |
+----------+---------+-------+
| xiaoming | english | 92.0 |
| huahua | chinese | 80.0 |
| xiaoming | chinese | 98.0 |
| huahua | math | 89.5 |
| xiaoming | math | 89.5 |
+----------+---------+-------+
Returned 5 row(s) in 0.23s


[cdha:21000] > select name,group_concat(subject,',') from student group by name; ------------小试牛刀,看到了吧,多列拼接到一起了
Query: select name,group_concat(subject,',') from student group by name
+----------+----------------------------+
| name | group_concat(subject, ',') |
+----------+----------------------------+
| xiaoming | english,chinese,math |
| huahua | chinese,math |
+----------+----------------------------+
Returned 2 row(s) in 0.38s

------------下面演示有价值的示例,显示高手之招,呵呵

------------这样就可以在一行上面,看到小明和花花的各科成绩了

[cdha:21000] > select name,group_concat(concat_ws('=',subject,cast(score as string)),',') from student group by name;
Query: select name,group_concat(concat_ws('=',subject,cast(score as string)),',') from student group by name
+----------+-------------------------------------------------------------------+
| name | group_concat(concat_ws('=', subject, cast(score as string)), ',') |
+----------+-------------------------------------------------------------------+
| xiaoming | english=92.0,chinese=98.0,math=89.5 |
| huahua | chinese=80.0,math=89.5 |
+----------+-------------------------------------------------------------------+
Returned 2 row(s) in 0.39s
[cdha:21000] >
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇执行shell命令 下一篇使用pt-heartbeat监控主从复制延迟

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: