当前位置: 首页 > news >正文

Hive SQL:实现炸列(列转行)以及逆操作(行转列)

目录

  • 列转行
  • 行转列

列转行

函数:
EXPLODE(ARRAY):将ARRAY中的每一元素转换为每一行
EXPLODE(MAP):将MAP中的每个键值对转换为两行,其中一行数据包含键,另一行数据包含值

数据样例:
在这里插入图片描述

1、将每天的课程,拆成日期和课程单独一条的

-- split(a.concat_lesson, ',') :将concat_lesson转换为array类型
select a.week_type, a.concat_lesson,b.data_dup
from
(
select '周一' as week_type, '历史,生物,西方文化' as concat_lesson
union all select '周二','线性代数,数据结构,C语言'
union all select '周三','轮滑') as a
lateral view explode(split(a.concat_lesson, ',')) b as data_dup -- 炸列依据,concat_lesson使用逗号分割形成了array,explode函数对array进行处理

结果:
在这里插入图片描述

2、将每天的 课程数 和 瞌睡数拆开,分别和日期形成一行

select a.week_type, a.concat_lesson,b.data_dup,split(b.data_dup,':')[0] as col_name, -- 提取冒号分割的第一部分split(b.data_dup,':')[1] as col_value -- 提取冒号分割的第二部分
from
(
select '周一' as week_type, '课程数:3节,瞌睡数:4次' as concat_lesson
union all select '周二','课程数:2节,瞌睡数:1次'
union all select '周三','课程数:1节,瞌睡数:0次') as a
lateral view explode(split(a.concat_lesson, ',')) b as data_dup -- 炸列依据

结果:
这里在进行完列转行后(黄色框),还利用split进一步提取了 信息名称和对应值(绿色框)
在这里插入图片描述

在实际应用中,要炸列的信息(对应上述的concat_lesson)可能不是来自一个字段,可能来自多表的不同字段。这时候可能需要自己构造。类似:

-- concat_lesson中信息不是来自同一个表时,可以借助concat构造
-- 然后再利用上述方式取值,主要应用于构造一维表
select t1.week_type,concat('记录01:课程数:',t1.lesson_count,',','记录02:瞌睡数:',t2.nap_count,',','记录03:天气:',t3.weather) as concat_lesson
from t1 
left join t2 on ...
left join t3 on ...

行转列

CONCAT_WS(STRING SEP, ARRAY ):以指定分隔符SEP将ARRAY中的元素拼接成字符串
COLLECT_LIST(col):将指定列中的数据组合为数组,不去重复数据


select t.name_p,concat_ws(',',collect_list(t.hobby)) 
from 
(select 'A' AS name_p ,'swim,draw,sing' as hobbyunion all select 'A','run'union all select 'B','run'
) as t
group by t.name_p

结果:
在这里插入图片描述

http://www.lryc.cn/news/388588.html

相关文章:

  • MD5算法详解
  • ES6的代理模式-Proxy
  • 排序(堆排序、快速排序、归并排序)-->深度剖析(二)
  • 七一建党节|热烈庆祝中国共产党成立103周年!
  • Spring Boot应用知识梳理
  • Spring中利用重载与静态分派
  • 文本三剑客之awk:
  • SpringSecurity-授权示例
  • 选哪个短剧系统源码好:全面评估与决策指南
  • AI时代的软件工程:挑战与改变
  • Zuul介绍
  • 7-1作业
  • ElasticSearch安装、配置详细步骤
  • 【Mybatis 与 Spring】事务相关汇总
  • Leetcode 2065. 最大化一张图中的路径价值(DFS / 最短路)
  • SeeSR: Towards Semantics-Aware Real-World Image Super-Resolution
  • 七月论文审稿GPT第5版:拿我司七月的早期paper-7方面review数据集微调LLama 3
  • 盘古5.0,靠什么去解最难的题?
  • 2.3章节Python中的数值类型
  • 每日Attention学习7——Frequency-Perception Module
  • 【从0实现React18】 (五) 初探react mount流程 完成核心递归流程
  • 0-30 VDC 稳压电源,电流控制 0.002-3 A
  • HTML5+CSS3+JS小实例:图片九宫格
  • 湘潭大学软件工程数据库总结
  • Codeforces Testing Round 1 B. Right Triangles 题解 组合数学
  • 怎样将word默认Microsoft Office,而不是WPS
  • C语言之进程的学习2
  • web使用cordova打包Andriod
  • 内卷情况下,工程师也应该了解的项目管理
  • 【解锁未来:深入了解机器学习的核心技术与实际应用】