Hive SQL行列转换

本文介绍了Hive SQL中的行转列和列转行操作,详细讲解了CONCAT、CONCAT_WS、COLLECT_SET等函数在行转列中的应用,以及EXPLODE和LATERAL VIEW在列转行中的使用。通过真题实战,展示了如何将用户信息和用户爱好数据进行转换,帮助读者理解并掌握Hive的数据转换技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、行转列

1.1、行转列需要用到的函数

CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串。

例如: concat( aa, ‘:’, bb) 就相当于把aa列和bb列用冒号连接起来了,aa:bb。

CONCAT_WS(separator, str1, str2,…):CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。

COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。

1.2、真题实战

1.2.1、需求

user_name  province       city

张三      广东      广州

李四      河南      开封

王二      广东      深圳

小亮      河南      开封

小明      广东      深圳

如上面表格是hive表user_info里的数据,现在想把省份和城市一样的用户放到一起,想要的结果如下:

place     users

广东,广州    张三

广东,深圳    王二|小明

河南,开封    李四|小亮

题目分析:

SELECT
	t.place AS place,
	CONCAT_WS('|', COLLECT_SET(t.user_name)) AS users
FROM
	(
		SELECT
			user_name,
			CONCAT(province, ',', city) AS place
		FROM
			user_info
	) t
GROUP BY
	t.place;

二、列转行

2.1、列转行需要用到的函数

EXPLODE(col):将hive某列中复杂的array或者map结构拆分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值