华为云DWS与阿里云ADB(MySQL)的差异总结

举报
你怎么这么好看 发表于 2021/02/09 19:16:47 2021/02/09
【摘要】 在线上,我们DWS(数据仓库服务)与ADB for MySQL有非常多的差异,将目前发现的差异总结如下,如有遗漏,欢迎大家补充。

在线上,我们DWS(数据仓库服务)与ADB for MySQL有非常多的差异,将目前发现的差异总结如下,如有遗漏,欢迎大家补充。

一、总体结构的差异

在ADB for MySQL中,由上至下的结构是:实例-->数据库-->

   JDBC需要连接到实例上,使用库名.表名来进行表数据的增删改查等操作。

由此可见,ADB for MySQL中实例对应DWS中的数据库,其数据库对应DWS中的模式(schema),同样,在ADB中可以使用库名.表名的方式进行跨库访问(类似于跨schema访问)。

二、数据类型的差异

ADB(MySQL)中大部分数据类型与DWS是一致的,如VARCHAR、int、bigint、decimal等,但有如下几个数据类型需要大家注意:

    1.datetime与timestamp

在ADB(MySQL)中datetime是没有时区的时间戳,而timestamp是带时区的时间戳,因此,在转换成DWS中的数据类型时,datetime需要转为timestamp without time zone,timestamp转为timestamp with time zone;

    2.tinyint

DWS与ADB中均存在tinyint这种数据类型,但是,在ADB中其范围是 -128~127,而DWS中为0~255,因此,ADB中的tinyint需要转为DWS中smallint,或int;

三、常用函数的差异

ADB中的日期处理函数与DWS中完全不一致,在语法改造过程中需要格外的注意。

日期的加减,在ADB中有两个不同函数,分别为date_add及date_sub,DWS中可直接改为加减号,但是有一点大家要注意,ADB中INTERVAL后是可以不加单引号的,而且其数值可以是一个字段名

      如下,select DATE_ADD(NOW(),INTERVAL col1 DAY) from table1;

而且,在ADB中INTERVAL 后面的小数会自动截取整数位这点也是与DWS有很大差距的,这种语法一样但是结果不同的差异,大家一定要注意。

此外,字符与日期之间的相互转化,ADB中为date_format(now(),'%Y%m%d')及str_to_date('20201127193000','%Y%m%d%H%i%s'),

这里有一点需要注意,to_date这个函数在MySQL兼容模式下,其输出为日期,而不是时间戳。

例如:to_date('20201127193000','yyyymmddhh24miss'),其结果为 2020-11-27,因此在做函数转化的时候,需要将str_to_date改为to_timestamp而不是to_date。

    其他一些ADB特有的函数,如ifnull、if、max_pt等,都需要做相应的转换

四、其他

    ADB(MySQL)与DWS的差异当然不仅仅这些,这里只是简单列举了一些常见的、容易出问题的地方供大家参考,此外还有以下几点需要注意:

1、ADB中联合主键中的某一个字段可以为空值。若需要从ADB中同步数据时,如果报错信息是违反非空约束,那除了字段与ADB没有对齐之外,还有一种可能就是因为联合主键中出现了空值。此时,可以将主键改为唯一索引来规避此问题。

2、ADB中如果没有指定主键,会自动建一个`__adb_auto_id__` bigint AUTO_INCREMENT的自增序列作为主键,DWS中需要改成__adb_auto_id__ bigserial。

在使用CDM从ADB同步数据时,该字段是无法默认出现的,需要在CDM中手工添加该字段的映射关系,或去掉该字段映射,使用DWS的默认自增序列。

3、ADB中的replace into需要改为merge into,如果是调度周期比较短或者更新表数据量很大,需要重点关注,可以将merge into 改为select * from a union all select b.* from b left  join a on b.id =a.id where a.id is null(a是源表,b是目标表)

4、分区

ADB中可以支持overwrite一个分区的数据,而DWS不支持,因此,在进行语法改造的时候要提高警惕,不要把所有的overwrite都复制过来,需要先删除当前分区的数据,再插入新的数据。

博文.png


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。