Hive多行转多列,多列转多行

hive中的行列转换包含单行、多行、单列、多列,所以一共有四种组和转换结果。

一、多行转多列

原始数据表

目标结果表

分析:目标表中的a和b是用分组形成,所以groupby字段选用原始表中col1,c、d、e是原始表中的行值,在目标表中成了列名,目标表中可以采用as做列名自定义,当原始表中的某一字段值等于某一特定值时,人为定义为结果表中的列名。

SQL实现

bash 复制代码
select
  col1 as col1,
  max(case col2 when 'c' then col3 else 0 end) as c,//当原始表中col2的字段为C时,取col3中的值,否则取0,然后取最大值,前提是原始表中没有比0更小的数,如果原始表中有比自定义的0值更小的数,else不能采用0,else的值要为原始表中最小数或比最小数还小。
  max(case col2 when 'd' then col3 else 0 end) as d,
  max(case col2 when 'e' then col3 else 0 end) as e
from
  row2col1
group by
  col1;


总结:多行转多列主要是条件函数,再取最大值,再用as自定义为新列名

二、单行转多列

原始数据表

目标数据表

**
分析:结果表是将原始表按照col1和col2进行分组统计,将原始表中具有相同col2的col3值拼接到目标表col3的字段当中,所以要采用hive中的拼接函数,但是拼接函数只使用于字符串,所以要将目标表中的col3的值转换为字符串,同时指定拼接关系逗号

SQL语句

bash 复制代码
select
  col1,
  col2,
  concat_ws(',', collect_list(cast(col3 as string))) as col3
from
  row2col2
group by
  col1, col2;

总结:多行转单列主要知识点就是字符串拼接函数

三、多列转多行

原始表

目标表

分析:union all 是在结果的行后面增加,简单理解为:连接行记录,类似向MySQL数据库中增加行记录
而left join是将两个表的列全部放入一张表的列中,增加列记录。

SQL实现

bash 复制代码
select col1, 'c' as col2, col2 as col3 from col2row1
UNION ALL
select col1, 'd' as col2, col3 as col3 from col2row1
UNION ALL
select col1, 'e' as col2, col4 as col3 from col2row1;

四、单列转多行

原始表

目标表

分析:一列中包含多个数据如Map或array,一般使用explode函数,俗称炸裂函数,将数据集合切分出来展示
SQL实现

bash 复制代码
select
  col1,
  col2,
  lv.col3 as col3
from
  col2row2
    lateral view
  explode(split(col3, ',')) lv as col3;

结果

相关推荐
Q264336502312 小时前
【有源码】基于XGBoost的安卓应用市场数据分析与评分预测系统-面向应用市场的安卓App评分回归预测方法研究
大数据·hadoop·数据挖掘·数据分析·回归·spark·毕业设计
IT毕设梦工厂12 小时前
计算机毕业设计选题推荐:基于大数据的培训机构信息分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hadoop·mysql·数据挖掘·数据分析·spark·课程设计
IT毕设梦工厂1 天前
计算机毕业设计选题推荐:基于大数据的杭州亚运会社交媒体互动数据可视化分析|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hadoop·信息可视化·数据挖掘·数据分析·课程设计·数据分析数据可视化
CarIise2 天前
Spring Boot整合MyBatis与文件上传:从分层架构到文件上传下载实战
数据仓库·hive·hadoop
计算机源码社2 天前
【27届大数据毕设】基于Spark的TikTok短视频属性分享与互动比率可视化分析系统 基于机器学习的TikTok短视频认证属性与互动效能关联分析
大数据·hadoop·python·机器学习·spark·毕业设计·课程设计
ha_lydms2 天前
MaxCompute中加密与解密函数
大数据·数据库·数据仓库·hadoop·dataworks·maxcompute·odps
Q26433650233 天前
【有源码】基于Spark的电商客户细分与盈利洞察分析系统-面向精准营销的电商客户细分模型构建与盈利能力可视化研究
大数据·hadoop·分布式·数据挖掘·数据分析·spark·毕业设计
计算机源码社3 天前
【27届大数据毕设】基于Spark的AI艺术创作者价值评估与市场趋势预测研究 基于Python与Spark的AI生成艺术受众画像及异常热度识别可视化平台
大数据·人工智能·hadoop·python·spark·毕业设计·课程设计
千桐科技3 天前
数据中台 ETL 编排实践:基于 qData 开源版实现数据接入、转换与调度执行
数据仓库·开源·etl
ha_lydms3 天前
MaxCompute中窗口函数
大数据·hadoop·阿里云·云计算·dataworks·maxcompute·odps