MaxComputeSQL-列转行和行转列
2017-06-28 00:00
225 查看
摘要: 1. 假设我们在MaxCompute中有两张表,其中一张表是存用户基本信息,另一张表是存用户的地址信息等,表数据假设如下: user_basic_info: id name 1 a 2 b 3 c
今天通过两个示例来教大家如何实现列转行和行转列问题。
1. 假设我们在MaxCompute中有两张表,其中一张表是存用户基本信息,另一张表是存用户的地址信息等,表数据假设如下:
user_basic_info表
user_address表
我们可以看到同一个用户不止一个地址(这里是假设的),我们需要把数据变为如下格式:
建表:
插入数据:
执行合并:
运行结果:
1 a add1,add2
2 b add3
3 c add4
4 d add5
2. 假设我们有一张表:
user_info表
我们需要拆分address,变为:
建表
插入数据(导入第一个实验的结果):
执行拆分:
结果为:
1 a add1
1 a add2
2 b add3
3 c add4
4 d add5
原文地址
大数据计算服务(MaxCompute,原名ODPS)是一种快速、完全托管的TB/PB级数据仓库解决方案。MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全。产品地址:https://www.aliyun.com/product/odps今天通过两个示例来教大家如何实现列转行和行转列问题。
1. 假设我们在MaxCompute中有两张表,其中一张表是存用户基本信息,另一张表是存用户的地址信息等,表数据假设如下:
user_basic_info表
id | name |
1 | a |
2 | b |
3 | c |
4 | d |
name | address |
a | add1 |
a | add2 |
b | add3 |
c | add4 |
d | add5 |
id | name | address |
1 | a | add1,add2 |
2 | b | add3 |
3 | c | add4 |
4 | d | add5 |
CREATE TABLE user_basic_info ( id string, name string );
CREATE TABLE user_address ( name string, address string );
插入数据:
insert into table user_basic_info select '1','a' from (select count(1) from user_basic_info) t;
insert into table user_address select 'a','add1' from (select count(1) from user_address) t;
执行合并:
select ubi.id, ubi.name, wm_concat(',', ua.address) as address from user_basic_info ubi join user_address ua on ubi.name=ua.name GROUP BY ubi.id, ubi.name;
运行结果:
1 a add1,add2
2 b add3
3 c add4
4 d add5
2. 假设我们有一张表:
user_info表
id | name | address |
1 | a | add1,add2 |
2 | b | add3 |
3 | c | add4 |
4 | d | add5 |
id | name | address |
1 | a | add1 |
1 | a | add2 |
2 | b | add3 |
3 | c | add4 |
4 | d | add5 |
CREATE TABLE user_info ( id string, name string, address string );
插入数据(导入第一个实验的结果):
insert into table user_info select ubi.id, ubi.name, wm_concat(',', ua.address) as address from user_basic_info ubi join user_address ua on ubi.name=ua.name GROUP BY ubi.id, ubi.name;
执行拆分:
select id, name, add_new from user_info ui lateral view explode(split(ui.address,',')) adtable as add_new;
结果为:
1 a add1
1 a add2
2 b add3
3 c add4
4 d add5
原文地址
相关文章推荐
- MaxComputeSQL-列转行和行转列
- MaxCompute SQL 2.0全新的计算引擎
- 为了让开发者写MaxCompute SQL更爽,DataWorks 增强SQL 编辑器功能
- 为了让开发者写MaxCompute SQL更爽,DataWorks 增强SQL 编辑器功能
- MaxCompute SQL引用第三方Base64JAR实现编解码
- 为了让开发者写MaxCompute SQL更爽,DataWorks 增强SQL 编辑器功能
- MaxCompute SQL原理解析及性能调优
- 为了让开发者写MaxCompute SQL更爽,DataWorks 增强SQL 编辑器功能
- MaxCompute SQL引用第三方Base64JAR实现编解码
- MaxCompute SQL 2.0全新的计算引擎
- MaxCompute SQL与标准SQL的主要区别及解决方法
- MaxCompute SQL 概要
- MaxCompute SQL原理解析及性能调优
- MaxCompute SQL与标准SQL的主要区别及解决方法
- 为了让开发者写MaxCompute SQL更爽,DataWorks 增强SQL 编辑器功能
- MaxCompute Studio使用心得系列2——编译SQL脚本
- MaxCompute SQL 2.0全新的计算引擎
- 为了让开发者写MaxCompute SQL更爽,DataWorks 增强SQL 编辑器功能
- Sql 列转行 三种方法对比
- SQL 列转行