加载中...
hive行转列
发表于:2022-08-30 | 分类: 程序人生
字数统计: 429 | 阅读时长: 1分钟 | 阅读量:

hive中如何进行行转列呢?

我们先创建一个表,并初始化一些数据进去

CREATE TABLEtest(
      name STRING COMMENT '姓名',
      subject STRING COMMENT '主题',
      score INT COMMENT '分数'

  ) COMMENT '测试表' ;

INSERT INTO test values('张三','语文',100),('李四','语文',90),('张三','数学',80),('李四','数学',80);

可以看到现在表test中的数据是这样的

现在我们用name进行分组,然后把subject的语文、数学变成列,再将score变成语文、数学列的值。

SELECT name
,concat_ws('-',collect_list(if(subject = '语文',CAST(score as STRING),null))) as `语文`
,concat_ws('-',collect_list(if(subject = '数学',CAST(score as STRING),null))) as `数学`
FROM test
GROUP BY name

再看一下效果

其中涉及到几个函数

concat_ws


concat_ws函数需要传入2个参数,第一个参数为拼接字符串,第二个参数为需要拼接的列名集合,需要注意的是,如果集合中存在null则会被忽略,利用这一点我们可以把多行的同一列数据拼接成一个字段,形成列转行。

IF


if 函数用来判断条件然后返回内容,第一个参数是条件,第二个参数是条件true时返回的内容,第三个参数是条件false时返回的内容。配合concat_ws函数忽略null的特性,可以用来指定返回那一行的值,例如

if(subject = '语文',CAST(score as STRING),null)

则只会返回语文那一行的数据

CAST


这是一个转换函数,因为concat_ws后的列需要一个string类型,所以将score从int转为string

上一篇:
半连接
下一篇:
网站可用性监控
本文目录
本文目录