添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
飘逸的领带  ·  DbCommand ...·  3 天前    · 
飘逸的蚂蚁  ·  R语言&SQL&Java ...·  1 年前    · 
独立的冰棍  ·  dataframe 转string-掘金·  1 年前    · 

本文档详细介绍了Redshift和MaxCompute之间SQL语法的异同。这篇文档有助于加快sql任务迁移到MaxCompute。由于Redshift和MaxCompute之间语法存在很多差异,因此我们需要修改Redshift上编写的脚本,然后才能在MaxCompute中使用,因为服务之间的SQL方言不同。

2.迁移前RedShift于MaxCompute的各项对比差异

2.1.1数据类型对比及类型转化

* 支持复杂数据类型(array,map,struct)

* 支持Java、Python语言的UDF/UDAF/UDTF

* 语法:Values、CTE、SEMIJOIN、FROM倒

装、Subquery Operations 、 Set

Operations(UNION /INTERSECT /MINUS)、

SELECT TRANSFORM 、User Defined Type、

GROUPING SET(CUBE/rollup/GROUPING

SET)、脚本运行模式、参数化视图

* 支持外表(外部数据源+StorageHandler,支

持非结构化数据)

3、RedShift到MaxCompute迁移工具介绍

从数据库表导入到 Amazon S3

https://docs.aws.amazon.com/zh_cn/redshift/latest/dg/c_unloading_data.html?spm=a2c4g.11186623.0.0.50d3358eWX84rm

在线迁移上云服务

https://help.aliyun.com/document_detail/94352.html

将数据从OSS迁移至同区域的MaxCompute项目load命令

https://help.aliyun.com/document_detail/157418.htm?spm=a2c4g.11186623.0.0.50d3358eWX84rm#concept-2419019

语法校验工具二选一

MaxCompute studio

https://help.aliyun.com/document_detail/50889.html

DataWorks sql节点

https://help.aliyun.com/document_detail/137510.html

4、迁移整体方案

数据库迁移主要包含以下内容

迁移实施计划:

用户根据自身现有 RedShift数据量、QPS、TPS 等性能指标、高可用需求和未来业务增长需求,制定合理化的迁移方案。

5.3. 资源规划

用户需要准备好 MaxCompute 的相关环境,同时获取到对应需要使用的迁移工具。迁移工具的相关内容请参考《 RedShift到MaxCompute迁移工具介绍 》 章节。

5.4. 改造及测试验证

5.4.1. 改造

迁移工具可以利用MaxCompute studio(或者DataWorks新建sql节点)客户端语法校验,新建一个sql文件,如图不支持的语法会报红

MaxCompute Studio安装文档 https://help.aliyun.com/document_detail/50889.html

5.4.1.1. 建表

在RedShift中获取表列表和表字段定义,按照Maxcompute支持的字段值进行转换,对于有update和delete语句的表必须建成Transactional表

类型转化参考《数据类型对比及类型转化》章节

--创建新表。

create [external] table [if not exists]

[(  [not null] [default ] [comment ], ...)]

[comment ]

[partitioned by (  [comment ], ...)]

--用于创建聚簇表时设置表的Shuffle和Sort属性。

[clustered by | range clustered by ( [, , ...]) [sorted by ( [asc | desc] [,  [asc | desc] ...])] into  buckets]

--仅限外部表。

[stored by StorageHandler]

--仅限外部表。

[with serdeproperties (options)]

--仅限外部表。

[location ]

--指定表为Transactional表,后续可以对该表执行更新或删除表数据操作,但是Transactional表有部分使用限制,请根据需求创建。

[tblproperties("transactional"="true")]

[lifecycle ];

--基于已存在的表创建新表并复制数据,但不复制分区属性。

create table [if not exists]  [lifecycle ] as ;

--基于已存在的表创建具备相同结构的新表但不复制数据。

create table [if not exists]  like  [lifecycle ];

⚫ 表名与列名均对大小写不敏感。

⚫ 在创建表时,如果不指定 if not exists选项而存在同名表,则返回报错;若指定此选项,则无论是否存在同名表,即使原表结构与要创建的目标表结构不一致, 均返回成功。已存在的同名表的元信息不会被改动。

⚫ 表名、列名中不能有特殊字符,只能用英文的 a-z、A-Z 及数字和下划线(_),

且以字母开头,名称的长度不超过 128 字节。

⚫tblproperties("transactional"="true"):可选(有update和delete语句必须设置)。设置表为Transactional表。后续可以对Transactional表执行update、delete操作实现行级更新或删除数据。更多信息,请参见 更新或删除数据(UPDATE | DELETE)

⚫ Partitioned by 指定表的分区字段,目前仅支持 string类型。分区值不可以有双字节字符(如中文),必须是以英文字母 a-z、A-Z开始后可跟字母数字,名称的长度不超过 128 字节。允许的字符包括:空格、冒号(:)、下划线(_)、美元符$)、井号(#)、点(.)、感叹号(!)和@,出现其他字符行为未定义, 例如:“\t”、“\n”、“/”等。当利用分区字段对表进行分区时,新增分区、更新分区内数据和读取分区数据均不需要做全表扫描,可以提高处理效率。

⚫ 注释内容是长度不超过 1024 字节的有效字符串。

⚫ lifecycle 指明此表的生命周期,单位:天。create table like 语句不会复制源表

的生命周期属性。

⚫ 理论上源表分区最多只能 6 级,但考虑极限存储的分区膨胀方式,请尽可能少用

⚫ 一个表允许的分区个数支持按照具体的 project 配置,默认 60000 个。

⚫ 在create table ... as select ...语句中,如果在 select 子句中使用常量作为列的

值,建议指定列的名字。

⚫ 如果希望源表和目标表具有相同的表结构,可以尝试使用 create table ... like 操

5.4.1.1.1建表具体案例

  • 列名双引号要去掉
  • 形如BIGINT primary key identity(1,1)主键⾃增列要去掉,只保留默认值default 1
  • numeric数据类型要转为decimal
  • 形如::character varying,'1900/01/01'::text这种,两个冒号及后⾯内容要删除,MC不⽀持
  • 形如"n_car_no" numeric DEFAULT -1::numeric,MC不⽀持默认值为-1,需要去掉
  • 形如"ts_req_time" timestamp without time zone DEFAULT to_timestamp('1900/00/00 00:00:00'::text, 'YYYY-MM-DD HH24:MI:SS.MS'::text),需要去掉timezone,并改为timestamp DEFAULT timestamp "1900-01-01 00:00:00"
  • 形如INTERLEAVED SORTKEY(vc_trans_id),MC不⽀持交错排序列功能,可以考虑替换为 zorder。
  • MC不⽀持时区time zone,有关time zone的需要删除。
  • 物化视图修改去掉 AUTO REFRESH YES,同时MaxCompute物化视图不支持窗口函数
  • 5.4.1.2. SQL 迁移

    SQL 迁移实际上就是根据 Oracle 和MaxCompute 两者间 SQL 的差异进行转化,将RedShift中的 SQL 转化成 MaxCompute 中的 SQL,从而使 SQL 可用。具体的 SQL间差异请参考《迁移前RedShift于MaxCompute的各项对比差异》 章节中的相关内容

    5.4.1.2.1 SQL 迁移 具体案例

    DML语句

    1.执行updae或者delet的语句需要创建事务表("transactional"="true")

    2. 形如COMMENT ON column atzc_dev_dw.t_com_fact_auto_pay_gw_trans_pay_gw."n_trans_amt" is 'dml';给列添加 注释,需要改为MC⽀持的语法alter table  change column  comment '';

    DQL语句

    https://help.aliyun.com/document_detail/181920.html

    5.4.3. 测试验证

    目前RedShift到MaxCompute 迁移的数据测试验证工作,还没有工具可以支持,需要

    自行编写脚本工具完成,常用校验方案有如下几种:

    ⚫ 表结构校验,从 RedShift和MaxCompute 分别导出数据表列及类型定义后计算

    md5 进行校验

    ⚫ 数据表行数比对,执行 SQL 语句分别在 RedShift和MaxCompute 统计相同表的

    数据行数进行逐行比对

    ⚫ 数据全量校验,一般用于核心表且数据量较小的校验场景,导出全量数据计算

    md5 进行校验,或全量数据分段计算 md5 进行校验

    ⚫ 数据抽样校验,一般用于核心大表的数据校验场景,按一定抽样规则从源和目标

    抽取数据进行校验。