背景:一些客户反馈,增量同步数据到MaxCompute按照全天的数据做增量数据同步数据量太大,且不使用按天的增量同步数据,进行在MaxCompute上进行数据处理得出增量数据对于delete的相关数据不能做到很好的支持,在次给大家一个对增量数据同步的方案使用DTS做增量同步数据到MaxCompute,数据源为ECS上自建的mysql5.7。
一、为自建MySQL创建账号并设置 1.1登陆自建Mysql数据库CREATE USER 'dtsmigration'@'%' IDENTIFIED BY 'Dts123456';
说明:
- username:待创建的账号。
- host:允许该账号登录的主机,如果允许该账号从任意主机登录数据库,可以使用百分号(%)。
- password:账号的密码。
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
说明:
- privileges:授予该账号的操作权限,如SELECT、INSERT、UPDATE等,如果要授予该账号所有权限,则使用ALL。
- databasename:数据库名。如果要授予该账号具备所有数据库的操作权限,则使用星号(*)。
- tablename:表名。如果要授予该账号具备所有表的操作权限,则使用星号(*)。
- username:待授权的账号。
- host:允许该账号登录的主机,如果允许该账号从任意主机登录,则使用百分号(%)。
- WITH GRANT OPTION:授予该账号使用GRANT命令的权限,该参数为可选。
如果要给账户赋予所有数据库和表的权限,并容许从任意主机登陆数据库
GRANT ALL ON *.* TO 'dtsmigration'@'%';
1.4开启并设置自建Mysql数据库binlog
到指定目录下找到该文件
log_bin=mysql_bin
binlog_format=row
server_id=2 //设置大于1的整数
binlog_row_image=full //当自建MySQL的版本大于5.6时,则必须设置该项。
service mysqld restart
DTS将源库中待同步表的结构定义信息同步至MaxCompute中,初始化时DTS会为表名增加_base后缀。例如源表为customer,那么MaxCompute中的表即为customer_base。
2.2全量数据初始化DTS将源库中待同步表的存量数据,全部同步至MaxCompute中的目标表名_base表中(例如从源库的customer表同步至MaxCompute的customer_base表),作为后续增量同步数据的基线数据。
2.3增量数据同步DTS在MaxCompute中创建一个增量日志表,表名为同步的目标表名_log,例如customer_log,然后将源库产生的增量数据实时同步到该表中。
三、增量同步实践 3.1购买DTS同步
元数据的字段介绍
CREATE TABLE IF NOT EXISTS maxcomputeone_dev.user_all(uid BIGINT,uname STRING,deptno BIGINT,gender STRING,optime DATETIME,record_id BIGINT,operation_flag STRING,utc_timestamp BIGINT,before_flag STRING,after_flag STRING);
4.2查看增量数据最后同步的点位,最后整合全量数据到user_all
合并语句
set odps.sql.allow.fullscan=true;
insert overwrite table user_all
select uid,
uname,
deptno,
gender,
optime
from(
select row_number() over(partition by t.uid
order by record_id desc, after_flag desc) as record_num, record_id, operation_flag, after_flag, uid, uname, deptno,gender,optime
from(
select incr.record_id, incr.operation_flag, incr.after_flag, incr.uid, incr.uname,incr.deptno,incr.gender,incr.optime
from user_log incr
where utc_timestamp
关注
打赏