hive行转列星座血型案例分析和列转行电影类型数案例分析

hive行转列星座血型案例分析和列转行电影类型数案例分

又很多小伙伴对于行转列和列转行搞不清楚,接下来我就跟大家举个例子分析一下行转列和列转行的区别

我们可以简单这样理解一个表如果行多了就会变得很高,很瘦,如果列多了就会变得很矮很胖,

所谓行转列就是由瘦高转向矮胖横向发展会用到concat()拼接函数和collect()收集函数两个函数案例就是行转列,

而列和转行就是由矮胖转向瘦高纵向发展会用到explode()炸裂和 lateral view 函数

下面我将结合星座血型案例举例说明行转列

数据:
name constellation blood_type
孙悟空 白羊座 A
娜娜 射手座 A
宋宋 白羊座 B
猪八戒 白羊座 A
凤姐 射手座 A

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

答案:

select
    t1.base,
    concat_ws('|', collect_set(t1.name)) name
from
    (select
        name,
        concat(constellation, ",", blood_type) base
    from
        person) t1
group by
t1.base

表格实现:
射手座,A 娜娜|凤姐
白羊座,A 孙悟空|猪八戒
白羊座,B 宋宋

知识点:
1.利用concat()的参数一分隔符,这个函数,合并多个字符串
2.利用collect()的参数都是列名

下面我将结合电影类型案例举例说明列转行

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

需求
将电影分类中的数组数据展开。结果如下:
《疑犯追踪》 悬疑
《疑犯追踪》 动作
《疑犯追踪》 科幻
《疑犯追踪》 剧情
《Lie to me》 悬疑
《Lie to me》 警匪
《Lie to me》 动作
《Lie to me》 心理
《Lie to me》 剧情
《战狼2》 战争
《战狼2》 动作
《战狼2》 灾难

答案:
1.)将数据炸开用explode(装复杂数组的列名)函数炸裂!

select 
explode (category) 
from mov;

2.)用lateral view隐藏的拼接条件将炸开的数据连接(他自己会知道他自己是一行的)

select 
movie,ty  
from mov
lateral view explode(category) t as  ty;

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
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 ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值