MaxCompute 行转列 列转行

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 搜了一下行转列、列转行,除了隐林一篇之外,好像没有了最近在帮助项目组初学者整理初学者文档,刚好用关系型数据库的例子变化实现了一个借鉴:https://developer.aliyun.com/article/40518供大家参考

发现MaxCompute相关的帖子真不多,补充发布一个。实际上,实现行转列和列转行的方法,根据实际需求应该还有很多种方法。MaxCompute其实也提供了很多的函数来帮助大家实现,有机会可以多探索几种方式。
一、行转列

with ta as (
select * from values
 ('张三' , '语文' , 74)
,('张三' , '数学' , 83)
,('张三' , '物理' , 93)
,('李四' , '语文' , 74)
,('李四' , '数学' , 84)
,('李四' , '物理' , 94)
t(name , subject , result))

--方法一:使用case when end结构,通用写法
select name as 姓名
,max(case subject when '语文' then result end) as 语文
,max(case subject when '数学' then result end) as 数学
,max(case subject when '物理' then result end) as 物理
  from ta
 group by name
;
+--------+------------+------------+------------+
| 姓名 | 语文     | 数学     | 物理     |
+--------+------------+------------+------------+
| 张三 | 74         | 83         | 93         |
| 李四 | 74         | 84         | 94         |
+--------+------------+------------+------------+
--方法二:非要多写一步的写法
with ta as (
select * from values
 ('张三' , '语文' , 74)
,('张三' , '数学' , 83)
,('张三' , '物理' , 93)
,('李四' , '语文' , 74)
,('李四' , '数学' , 84)
,('李四' , '物理' , 94)
t(name , subject , result))
select name
      ,keyvalue(subject,'语文') as 语文
      ,keyvalue(subject,'数学') as 数学
      ,keyvalue(subject,'物理') as 物理
  from(
select name,wm_concat(';',concat(subject,':',result))as subject
  from ta
 group by name)tt
;

这个方法用wm_concat做聚合之前,先用concat把多列合并为一列。然后在拼接后用keyvalue去解析出来。
二、列转行

with tb as (
select * from values
 ('张三', 88,99,89)
,('李四', 78,77,87)
t(name , subject_yw, subject_sx, subject_wl))
--方法一:使用union all,通用写法
select name,subject,result
  from(
select name,'语文' as subject,subject_yw as result from tb
 union all
select name,'数学' as subject,subject_sx as result from tb
 union all
select name,'物理' as subject,subject_wl as result from tb)tt;
+------+---------+--------+
| name | subject | result |
+------+---------+--------+
| 张三 | 语文  | 88     |
| 张三 | 数学  | 99     |
| 张三 | 物理  | 89     |
| 李四 | 语文  | 78     |
| 李四 | 数学  | 77     |
| 李四 | 物理  | 87     |
+------+---------+--------+
with tb as (
select * from values
 ('张三', 88,99,89)
,('李四', 78,77,87)
t(name , subject_yw, subject_sx, subject_wl))
--方法二:
select name,split_part(subject,':',1) as subject
           ,split_part(subject,':',2) as result
  from(
select trans_array(1,';',name,subject) as (name,subject) 
  from(
select name
,concat('语文',':',subject_yw
   ,';','数学',':',subject_sx
   ,';','物理',':',subject_wl) as subject
  from tb)tt)tx;

这个例子,为了与通用方式产出一致。用到了 trans_array() 函数,split_part()函数,为了构造结构,还用concat拼接了字符串。

上面这两个针对maxcompute的例子,实际上看上去并不会比通用方法效率高,只是提供了一种思路。大家实际使用中有类似的结构,可以参考借鉴。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
5月前
|
缓存 分布式计算 大数据
MaxCompute产品使用合集之行转列的函数如何与group by和聚合函数一起使用
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
SQL 分布式计算 MaxCompute
MaxCompute SQL-列转行和行转列
1. 假设我们在MaxCompute中有两张表,其中一张表是存用户基本信息,另一张表是存用户的地址信息等,表数据假设如下: user_basic_info: id name 1 a 2 b 3 c
13379 0
|
1月前
|
存储 机器学习/深度学习 分布式计算
大数据技术——解锁数据的力量,引领未来趋势
【10月更文挑战第5天】大数据技术——解锁数据的力量,引领未来趋势
|
11天前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
97 7
|
11天前
|
存储 分布式计算 大数据
大数据 优化数据读取
【11月更文挑战第4天】
26 2
|
24天前
|
数据采集 监控 数据管理
数据治理之道:大数据平台的搭建与数据质量管理
【10月更文挑战第26天】随着信息技术的发展,数据成为企业核心资源。本文探讨大数据平台的搭建与数据质量管理,包括选择合适架构、数据处理与分析能力、数据质量标准与监控机制、数据清洗与校验及元数据管理,为企业数据治理提供参考。
68 1
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
50 3
|
8天前
|
存储 大数据 数据管理
大数据分区简化数据维护
大数据分区简化数据维护
16 4
|
18天前
|
存储 大数据 定位技术
大数据 数据索引技术
【10月更文挑战第26天】
40 3
|
18天前
|
存储 大数据 OLAP
大数据数据分区技术
【10月更文挑战第26天】
52 2

相关产品

  • 云原生大数据计算服务 MaxCompute
  • 下一篇
    无影云桌面