Hive练习题之列转行
源数据
+-----------+-------+-------+-------+
| grade_id | yw | sx | zz |
+-----------+-------+-------+-------+
| 1 | 98.0 | 0.0 | 0.0 |
| 2 | 0.0 | 80.0 | 78.0 |
| 5 | 88.0 | 66.0 | 99.0 |
+-----------+-------+-------+-------+
1,98.0,0.0,0.0
2,0.0,80.0,78.0
5,88.0,66.0,99.0
想得到的结果:
+--------------+------------------+---------------+
| grade_id | subject_name | max_score |
+--------------+------------------+---------------+
| 1 | 语文 | 98.0 |
| 2 | 数学 | 80.0 |
| 2 | 政治 | 78.0 |
| 5 | 语文 | 88.0 |
| 5 | 数学 | 66.0 |
| 5 | 政治 | 99.0 |
+--------------+------------------+---------------+
建表
create table if not exists test.tb_ms2 (grade_id int, yw double, ss double, zz double)
row format delimited fields terminated by ",";
导入数据
load data local inpath "/doit16/ms2.txt" into table tb_ms2;
解法1:
SELECT grade_id,split(cs, ':') [0] AS subject_name,split(cs, ':') [1] AS score
FROM (SELECT grade_id,concat_ws(',', cast(yw AS string), cast(ss AS string), cast(zz AS string)) AS sub_scoreFROM (SELECT grade_id,concat_ws(':', 'yw', cast(yw AS string)) AS yw,concat_ws(':', 'ss', cast(ss AS string)) AS ss,concat_ws(':', 'zz', cast(zz AS string)) AS zzFROM tb_ms2) t1) t2 LATERAL VIEW explode(split(sub_score, ',')) susc AS cs;
解法2:
selectgrade_id,subject,score
from
(selectgrade_id,str_to_map(concat_ws(',',yw,ss,zz)) as subjectsfrom(selectgrade_id,concat_ws(':','yw',cast(yw as string)) as yw,concat_ws(':','ss',cast(ss as string)) as ss,concat_ws(':','zz',cast(zz as string)) as zzfrom tb_ms2)t1
)t2
lateral view explode(subjects)s as subject,score
Hive练习题之列转行相关推荐
- Hive _偏门常用查询函数(二)附带实例(列转行、窗口函数)
接上篇博客: Hive _偏门常用查询函数(一)附带实例 https://blog.csdn.net/qq_41946557/article/details/102904642 列转行 1.函数说明 ...
- hive 行转列和列转行的方法_面试常考!SQL行转列和列转行
关注上方"数据挖掘工程师",选择星标,关键时间,第一时间送达!行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SE ...
- hive 如何将数组转成字符串_hive详细笔记(八)-Hive之列转行和行转列(附带讲解视频 )...
1 行转列 1.1 函数 CONCAT(string A/col, string B/col-):返回输入字符串连接后的结果,支持任意个输入字符串; CONCAT_WS(separator, str1 ...
- Hive SQL中的concat、concat_ws、concat_group列转行,行转列
目录 1.concat函数,concat_ws函数,concat_group函数 CONCAT() 函数 2.CONCAT_WS(SEPARATOR ,collect_set(column)) 等价于 ...
- Hive 之collect_list/collect_set(列转行)
Hive笔记之collect_list/collect_set(列转行) Hive中collect相关的函数有collect_list和collect_set. 它们都是将分组中的某列转为一个数组返回 ...
- Hive之行转列/列转行
1.行转列 场景:在hive表中,一个用户会有多个人群标签,List格式(逗号分隔如要转成List),有时我们需要统计一个人群标签下有少用户,这是就需要使用行转列了 例如,user_crowd_inf ...
- Hive ,Hsql行转列、列转行实现
HQL中实现行列转换 其实并不用纠结哪个是行转列.哪个是列转行,明白二者之间的需求即可 在Hive sql应用中会遇到"行转列"和"列转行"的场景,下面介绍其基 ...
- hive Sql列转行使用explode的注意事项-null值处理
hive Sql列转行使用explode的注意事项-null值处理 日常工作中,我们经常会用Lateral View 结合explode将数据炸裂,但是该方法对应explode的内容是有非null限制 ...
- python列转行函数_Python pandas 列转行操作详解(类似hive中explode方法)
最近在工作上用到Python的pandas库来处理excel文件,遇到列转行的问题.找了一番资料后成功了,记录一下. 1. 如果需要爆炸的只有一列: df=pd.DataFrame({'A':[1,2 ...
最新文章
- NVIDIA 认证系统
- 论前端工程师如何应对西电教学评估系统
- jdbcutils.java_空指针异常错误哪个地方错了Exception in thread main (JdbcUtils.java:62) main(JdbcUtils.java:87)...
- mysql创建用户并授登录权限_mysql创建用户并授予权限
- python有趣的小项目-10 个最值得 Python 新人练手的有趣项目
- rust腐蚀 木制窗户怎么修_冬天装修后怎么去除甲醛?紧闭门窗和准备一盆水,轻松教你解决!...
- 阿里云李响荣获 2020 中国开源杰出贡献人物奖,我们找他聊了聊开源和云原生
- qt mysql读写_QT读写Sqlite数据库
- JQuery 方法查询大全
- 单片机编程用什么软件?单片机开发软件有哪些?
- 机器学习:决策树算法案例(西瓜数据集3.0)
- 算法:中国象棋中马的最少步数走法和不重复周游走法的实现(利用图论算法中的BFS和DFS)
- 51 温度传感器 DS18B20程序代码
- 高斯投影坐标正反算公式
- 【经验分享】调试STM32F107VC单片机驱动DP83848以太网PHY芯片时遇到的问题
- 用CHATGPT做微信视频号和抖音大神,就这几步!
- 那年的中秋——杂乱无章篇 2011年9月10日 阴
- 12V铅酸电池充放电保护板
- Cinema 4D(一):初识C4D
- 51nod3146 绿豆蛙的归宿