MaxCompute单字段拆分多行多列-阿里云开发者社区

开发者社区> 洛小蒙> 正文

MaxCompute单字段拆分多行多列

简介: 数据导入MaxCompute后,需要把某个字段String类型(多键值(key-value )对 ) 拆分成多行,每行有都有key, value两列。比如“{k1:v1,k2:v2,k3:k4}” 拆成多行,每行两个值key,value 分别为k1,v1;k2,v2;k3;k4。
+关注继续查看

解决场景

数据导入MaxCompute后,需要把某个字段String类型(多键值(key-value )对 ) 拆分成多行,每行有都有key, value两列。

原数据:

  • 比如uid (1234), region(cn-hz), tags, 其中tags值为“{k1:v1,k2:v2,k3:k4}”
    image.png

期望处理结果:

转换成uid ,region,key,value
image.png

详细方案

  1. 准备表
  2. 插入数据
  3. 处理数据,查询处理结果

注意

  • 边界情况
  • tags带特殊字符(,:等)需要自行测试
# 表结构

create table if not exists t1(
    region string,
    uid int,
    tags string
)partitioned by (ds string) lifecycle 1;


# 插入数据 ${dstime} 是变量,给定某天的值

insert overwrite table t1 partition (ds='${dstime}')
select "cn-hz" as region,1234 as uid,"{k1:v1,k2:v2,k3:k4}" as tags ;


# 结果拆分,这里考虑到如果tags的key包含“,” 或者 “:” 则可能需要对于数据做一些转义处理,
# 下面例子是假设tags不包含“,” 或者 “:” 
# TRANS_ARRAY 
# 2 表示不变化的字段的个数, 
# “,”表示分割tags的分割符, 
# uid,region是不变化的字段,
# SUBSTR(tags,2,LENGTH(tags)-2) 处理前后{}后的字段,如果后面的k1有引号需要注意引号的处理

SELECT  uid, region, SPLIT_PART(tags, ":", 1)  as key , SPLIT_PART(tags, ":", 2)  as value FROM (
SELECT  TRANS_ARRAY(
            2 
            ,","
            ,uid
            ,region
            ,SUBSTR(tags,2,LENGTH(tags)-2)
        ) AS (uid,region,tags)
FROM    t1
WHERE   ds = "20201112"
)tmp
;

参考文档:

TRANS_ARRAY 相关使用说明

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9497 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
11212 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13186 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9055 0
解决MaxCompute SQL count distinct多个字段的方法
按照惯性思维,统计一个字段去重后的条数我们的sql写起来如下: Distinct的作用是用于从指定集合中消除重复的元组,经常和count搭档工作,语法如下 COUNT( { [ DISTINCT ] expression ] | * } ) 这时,可能会碰到如下情况,你想统计同时有多列字段重复的数目,你可能会立马想到如下方法: select count( distinct col1 , col2 , col3 , .......) from table 但是,这样是有问题的,如果值包含空,那么我们的结果是什么呢?如果你实验过,正如你实验的一样,结果会比实际少。
3716 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6895 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4012 0
+关注
洛小蒙
coding is all about communication
49
文章
12
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载