Hive行列转换应用:多行转多列、 多行转单列、多列转多行、单列转多行

Hive行列转换应用

多行转多列

  • 通过条件转换CASE WHEN函数实现多行转多列,即取出对应的数据放在对应的位置。
  • 例1:
  1. 写法一:
SELECT
	id,
	CASE
		WHEN id < 2 THEN 'a'
		WHEN id = 2 THEN 'b'
		ELSE 'c'
		END AS caseName
FROM tb_url;
  1. 写法二:
SELECT
	id,
	CASE id
		WHEN 1 THEN 'a'
		WHEN 2 THEN 'b'
		ELSE 'c'
		END AS caseName
FROM tb_url;
  • 结合group by的应用:
SELECT 
	col1 AS col1,
	MAX(CASE col2 WHEN 'c' THEN col3 ELSE 0 END) AS c,
	MAX(CASE col2 WHEN 'd' THEN col3 ELSE 0 END) AS d,
	MAX(CASE col2 WHEN 'e' THEN col3 ELSE 0 END) AS e
FROM
	row2col1
GROUP BY
	col1;

多行转单列

  • 例:将组内某一字段的多行值合并为一个值,各组的值合并为一列。
SELECT
	col1,
	col2,
	CONCAT_WS(',',COLLECT_LIST(CAST(col3 AS STRING))) AS col3
FROM
	row2col2
GROUP BY
	col1,col2;

多列转多行

  • 使用union关键字实现多行数据的拼接。
  • 例:
SELECT col1, 'c' AS col2, col2 AS col3 FROM col2row1
UNION ALL
SELECT col1, 'd' AS col2, col2 AS col3 FROM col2row1
UNION ALL
SELECT col1, 'e' AS col2, col2 AS col3 FROM col2row1;

单列转多行

  • 使用explode函数将一个集合或数组中的每个元素展开,每个元素自成一行。
  • 例:若是字符串类型的数据,需要用split切割为数组。
SELECT
	col1,
	col2,
	lv.col3 AS col3
FROM
	col2row2
		LATERAL VIEW
			EXPLODE(SPLIT(col3,',')) lv AS col3;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值