大数据计算服务(MaxCompute,原名ODPS)是一种快速、完全托管的EB级数据仓库解决方案。通过数据传输服务DTS(Data Transmission Service),您可以将MySQL的数据同步至MaxCompute,帮助您快速搭建数据实时分析系统。
前提条件
- 已开通MaxCompute。
- 已在MaxCompute中创建项目。
注意事项
- 仅支持表级别的数据同步。
- 在数据同步时,请勿对源库的同步对象使用gh-ost或pt-online-schema-change等类似工具执行在线DDL变更,否则会导致同步失败。
- 如果源数据库没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据。
源库支持的实例类型
执行数据同步操作的MySQL数据库支持以下实例类型:
- 有公网IP的自建数据库
- ECS上的自建数据库
- 通过专线/VPN网关/智能网关接入的自建数据库
- 同一或不同阿里云账号下的RDS for MySQL实例
本文以RDS for MySQL实例为例介绍配置流程,当源库为其他实例类型时,配置流程与该案例类似。
说明 如果源库为自建MySQL数据库,您还需要为自建MySQL创建账号并设置binlog。
支持同步的SQL操作
- DDL操作:ADD COLUMN
- DML操作:INSERT、UPDATE、DELETE
同步过程介绍
操作步骤
增量日志表结构定义说明
DTS在将MySQL产生的增量数据同步至MaxCompute的增量日志表时,除了存储增量数据,还会存储一些元信息,示例如下。
说明 示例中的modifytime_year
、modifytime_month
、modifytime_day
、modifytime_hour
、modifytime_minute
为分区字段,是在配置同步策略和同步对象步骤中指定的。
结构定义说明
字段 | 说明 |
---|---|
record_id | 增量日志的记录id,为该日志唯一标识。
|
operation_flag | 操作类型,取值:
|
utc_timestamp | 操作时间戳,即binlog的时间戳(UTC 时间)。 |
before_flag | 所有列的值是否为更新前的值,取值:Y或N。 |
after_flag | 所有列的值是否为更新后的值,取值:Y或N。 |
关于before_flag和after_flag的补充说明
对于不同的操作类型,增量日志中的before_flag和after_flag定义如下:
- INSERT
当操作类型为INSERT时,所有列的值为新插入的记录值,即为更新后的值,所以before_flag取值为N,after_flag取值为Y,示例如下。
- UPDATE
当操作类型为UPDATE时,DTS会将UPDATE操作拆为两条增量日志。这两条增量日志的record_id、operation_flag及utc_timestamp对应的值相同。
第一条增量日志记录了更新前的值,所以before_flag取值为Y,after_flag取值为N。第二条增量日志记录了更新后的值,所以before_flag取值为N,after_flag取值为Y,示例如下。
- DELETE
当操作类型为DELETE时,增量日志中所有的列值为被删除的值,即列值不变,所以before_flag取值为Y,after_flag取值为N,示例如下。
全量数据合并示例
执行数据同步的操作后,DTS会在MaxCompute中分别创建该表的全量基线表和增量日志表。您可以通过MaxCompute的SQL命令,对这两个表执行合并操作,得到某个时间点的全量数据。
本案例以customer表为例(表结构如下),介绍操作流程。
原创文章,作者:网友投稿,如若转载,请注明出处:https://www.cloudads.cn/archives/33888.html