Hive行转列、列转行实现

HQL中实现行列转换

其实并不用纠结哪个是行转列、哪个是列转行,明白二者之间的需求即可

行转列

数据、建表如下:
孙悟空 白羊座 A
大海 射手座 A
宋宋 白羊座 B
猪八戒 白羊座 A
凤姐 射手座 A
小明 白羊座 B

create table person_info(
name string,
constellation string,
blood_type string)
row format delimited fields terminated by "\t";

需求如下:
把星座和血型一样的人归类到一起

射手座,A 大海|凤姐
白羊座,A 孙悟空|猪八戒
白羊座,B 宋宋|小明

分析:

  • 先用concat_ws函数将将星座和血型用“,”连接
  • 在根据连接好的星座和血型group by
  • 用collect_set函数对name聚合,
  • 用concat_ws函数对聚合后的name用“|”分割

实现如下:

SELECT
t1.c_b,
CONCAT_WS("|",collect_set(t1.name))
FROM (
SELECT
NAME,
CONCAT_WS(',',constellation,blood_type) c_b
FROM person_info
)t1
GROUP BY t1.c_b

列转行

数据、建表如下:
《疑犯追踪》 悬疑,动作,科幻,剧情
《Lie to me》 悬疑,警匪,动作,心理,剧情
《战狼 2》 战争,动作,灾难

create table movie_info(
movie string,
category string)
row format delimited fields terminated by "\t";

需求如下:
将电影分类中的数组数据展开

《疑犯追踪》 悬疑
《疑犯追踪》 动作
《疑犯追踪》 科幻
《疑犯追踪》 剧情
《Lie to me》 悬疑
《Lie to me》 警匪
《Lie to me》 动作
《Lie to me》 心理
《Lie to me》 剧情
《战狼 2》 战争
《战狼 2》 动作
《战狼 2》 灾难

分析:

  • 先用split函数将category根据“,”分割成数组
  • lateral view结合explode函数进行炸裂后的侧写

实现如下:

SELECT
movie,
category_name
FROM
movie_info
lateral VIEW
explode(split(category,",")) movie_info_tmp AS category_name;
  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Hive中的转行可以通过使用函数EXPLODE和LATERAL VIEW来实现。函数EXPLODE(col)用于将Hive的一中复杂的数组或者Map结构拆分成多。LATERAL VIEW是用于和split、explode等函数一起使用的,可以将一展开成多或将多合并成一。 举个例子来说明,假设我们有一个表person_info,其中包含name、constellation和blood_type三。要将表中的name中的值拆分成多,可以使用LATERAL VIEW和EXPLODE函数,具体的语句如下: SELECT t1.base, concat_ws('|', collect_set(t1.name)) name FROM (SELECT name, concat(constellation, ",", blood_type) base FROM person_info) t1 GROUP BY t1.base; 在上述查询中,通过LATERAL VIEW和EXPLODE函数,将name拆分成多,然后使用concat_ws函数将拼接后的结果作为新的name。最后,通过GROUP BY对base分组。这样就实现Hive中的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [hive转行案例](https://download.csdn.net/download/weixin_38581777/14037437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [hive操作(转行)](https://blog.csdn.net/aiduo3346/article/details/102085019)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值