更新时间:2025-05-06 GMT+08:00
分享

约束与限制

MySQL源端数据源约束

类别

说明

适用版本

5.6、5.7、8.x版本。

权限要求

需要具备如下最小权限:SELECT、SHOW DATABASES、REPLICATION SLAVE、REPLICATION CLIENT,即执行SQL:
GRANT SELECT, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '用户名'@'%';

同步对象范围

  • 支持同步DML:包括INSERT、UPDATE、DELETE。
  • 支持同步的DDL:新增列。
  • 仅支持同步MyISAM和InnoDB表。
  • 不支持同步视图、外键、存储过程、触发器、函数、事件、虚拟列、唯一约束和唯一索引。
  • 不支持同步对象中存在包含CASCADE、SET NULL、SET DEFAULT之类引用操作的外键。这些关联操作会导致更新或删除父表中的行,影响子表对应的记录,并且子表的相关操作并不记录Binlog。

数据库限制

源端数据库中的库名、表名、字段名不能包含:.<'>/\"以及非ASCII字符,建议尽量使用常规字符避免任务失败。

使用限制

  • 通用:
    • 实时同步过程中,不支持IP、端口、账号、密码修改。
    • 不允许源数据库进行恢复操作。
    • 源库需开启Binlog日志,并确保binlog_row_image的参数值为full。
    • 建议MySQL Binlog保留3天以上,不支持强制清理Binlog。

      异常/暂停恢复作业时,记录的Binlog位点过期会导致作业恢复失败,需要关注作业异常/暂停时长及Binlog保留时长。

    • 实时同步过程中,不允许源数据库MySQL跨大版本升级,否则可能导致数据不一致或者同步任务失败(跨版本升级后数据、表结构、关键字等信息均可能会产生兼容性改变),建议在该场景下重建同步任务。
    • 不支持同步视图、外键、存储过程、触发器、函数、事件、虚拟列、唯一约束和唯一索引。
    • 同步无主键表存在数据重复风险,请谨慎同步无主键表。
    • 若源库为8.0.23及以后版本的MySQL数据库,且待同步或迁移的数据中包含不可见的隐藏列,则可能会因为无法获取该列的数据而导致数据丢失。
  • 全量同步阶段:

    任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。

  • 增量同步阶段:
    • 增量同步过程中,执行不幂等的DDL可能导致数据不一致(例如ALTER TABLE ddl_test ADD COLUMN c3 timestamp default now();),Migration会因数据库函数执行结果不幂等导致最终数据不一致。
    • 增量同步过程中,可识别的DDL类型有新建表、删除表、新增列、删除列、重命名表、重命名列、修改列类型、清空表,链路支持的DDL类型请参见各链路对应的“使用限制”部分。
    • 不支持同步对象中存在包含CASCADE、SET NULL、SET DEFAULT之类引用操作的外键。这些关联操作会导致更新或删除父表中的行会影响子表对应的记录,并且子表的相关操作并不记录Binlog。
    • 不支持将位点设置在作业涉及的表发生修改与新增列等涉及表结构变更的DDL之前。
    • 对于版本低于3.2.0-LTS1.5的MRS集群的Hudi MOR表,使用Migration(Flink)增量同步数据后,不支持直接使用CDM或Spark SQL写入数据,需要先进行Compaction后方可写入。
    • 分库分表场景:

      分库分表场景下,执行重命名列操作,必须停业务操作,不然会有数据不一致的风险。

      分库分表场景下,推荐只同步新增列DDL,其他的DDL同步可能会因为目标表被修改而导致任务失败或数据不一致。

      分库分表场景下,执行新增列时,需保证每张表加列的类型一致,否则有可能导致任务失败。

  • 备库抽取:

    备库抽取需确认备库节点上执行SHOW MASTER STATUS能够返回值,否则在作业异常、暂停恢复场景下存在数据作业异常和数据丢失风险。

其他限制

支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。

目标数据库多的列要求非空且没有默认值,源数据库insert数据,同步到目标数据库后多的列为null,不符合目标数据库要求。

SQLServer源端数据源约束

类别

说明

适用版本

企业版2016、2017、2019、2022版本,标准版2016 SP2及以上版本、2017、2019、2022版本。

权限要求

需要具备sysadmin权限,或者view server state权限以及待同步数据库的db_datareader或db_owner权限。

  • 启动数据库及表的CDC能力。
    1. 启用数据库CDC。
      USE YourDatabaseName;
      EXEC sys.sp_cdc_enable_db; 
      -- 查看数据库是否启动CDC
      SELECT is_cdc_enabled, name FROM sys.databases WHERE name = 'YourDatabaseName'
    2. 启用表CDC。
      EXEC sys.sp_cdc_enable_table
           @source_schema = N'dbo', -- Schema
           @source_name = N'YourTable',-- 表名    
           @role_name = NULL,-- 可选,CDC访问角色名称    
           @supports_net_changes = 0;
      -- 查看表是否启动CDC
      SELECT name,is_tracked_by_cdc FROM sys.tables WHERE name = 'YourTable';
  • 源端SQLServer需要给管理中心数据连接中配置的用户赋予以下全部权限。
    • 给用户添加数据库CONNECT, VIEW DATABASE STATE 权限。
      USE YourDatabaseName;
      GRANT CONNECT, VIEW DATABASE STATE TO [YourUserName];
    • 给用户添加CDC schema的SELECT 权限。
      USE YourDatabaseName;
      GRANT SELECT ON SCHEMA::[cdc] TO [YourUserName]; 
    • 给用户添加表的SELECT权限。
      USE YourDatabaseName;
      GRANT SELECT ON OBJECT::[YourSchema].[YourTable] TO [YourUserName];

同步对象范围

  • 支持同步DML:包括INSERT、UPDATE、DELETE。
  • 不支持同步DDL。
  • 仅支持同步主键表。
  • 不支持同步源数据库中开启TDE(Transparent Data Encryption)加密的数据库。
  • 不支持列加密。
  • 不支持同步自增属性列。
  • 自动建表支持同步表结构、普通索引、约束(主键、空、非空)、注释。

数据库限制

源数据库如果开启客户端配置中的“强制协议加密(Force Protocol Encrypton)”,必须同时开启“信任服务器证书(trust server certificate)”。

使用限制

  • 通用:实时同步过程中,不支持IP、端口、账号、密码修改。
  • 全量同步阶段:任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。
  • 增量同步阶段:
    • 支持DML:包括INSERT、UPDATE、DELETE。
    • 不支持DDL操作,源数据库进行的DDL操作不会同步到目标数据库。
    • 不支持大数据类型IMAGE、TEXT、NTEXT的删除操作。
    • 同步过程不支持修改作业中的表。

其他限制

  • 支持目标数据库中的表比源数据库少列场景;也支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。
    • 目标数据库多的列要求非空且没有默认值,源数据库insert数据,同步到目标数据库后多的列为null,不符合目标数据库要求。
    • 目标数据库多的列设置固定默认值,且有唯一约束。源数据库insert多条数据后,同步到目标数据库后多的列为固定默认值,不符合目标数据库要求。
  • 不支持源数据库主备切换,源数据库主备切换会导致同步任务失败。
  • 不支持源数据库Microsoft SQL Server为TLS 1.0、TLS 1.1协议的同步,如果需要同步,建议源库升级到TLS 1.2及以上版本。

PostgreSQL源端数据源约束

类别

说明

适用版本

PostgreSQL 9.4、9.5、9.6、10、11、12、13、14、15、16版本。

权限要求

数据库的CONNECT权限,模式的USAGE权限,表的SELECT权限,序列的SELECT权限,REPLICATION连接权限。
说明:

REPLICATION连接权限的添加方法:

  • 在源数据库的“pg_hba.conf”配置文件的所有配置前增加一行配置“host replication <src_user_name> <drs_instance_ip>/32 <认证方式>”;认证方式可参考PostgreSQL官方文档pg_hba.conf文件配置,常见的认证方式有scram-sha-256等。
  • 在源库使用SUPERUSER用户执行语句“select pg_reload_conf();”生效,或重启数据库实例生效。

同步对象范围

  • 支持同步DML:包括INSERT、UPDATE、DELETE。
  • 不支持同步DDL。
  • 仅支持同步有主键表。
  • 不支持同步视图、外键、存储过程、触发器、函数、事件、虚拟列、唯一约束和唯一索引。
  • 不支持同步无日志表(UNLOGGED TABLE)、临时表、系统模式和系统表。
  • 自动建表支持同步表结构、普通索引、约束(主键、空、非空)、注释。

数据库限制

  • 源数据库的分区表触发器不可以设置为disable。
  • 如果做增量同步:源数据库的“pg_hba.conf” 文件中包含如下的配置:
    host replication all 0.0.0.0/0 md5

使用限制

  • 通用:
    • 实时同步过程中,不支持IP、端口、账号、密码修改。
    • PostgreSQL的WAL日志建议保留3天以上。
    • 源表需要发布在dbz_publiction中。使用 "select * from pg_publication_tables;" 查询所有表的PUBLICATION,使用 "ALTER PUBLICATION name ADD TABLE [ ONLY ] table_name [ * ] [, ...]" 将表加入发布中。
  • 全量同步阶段:

    任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。

  • 增量同步阶段:
    • 请勿修改源数据库表的主键或者唯一键(主键不存在时),否则可能导致增量数据不一致或任务失败。
    • 请勿修改源数据库中表的replica identity属性,否则可能导致增量数据不一致或任务失败。
    • Postgres数据源复制槽数达到上限时,无法执行新的作业,可以通过设置max_replication_slots的数值提高复制槽的使用上限或手动删除复制槽(Postgres数据源不支持自动删除复制槽)解决,手动删除请参见PostgreSQL数据源如何手动删除复制槽?

其他限制

  • 启动任务前,请确保源库中未启动长事务,源库启动长事务会阻塞逻辑复制槽的创建,进而引发任务失败。
  • 任务启动后,不支持源库发生主备倒换。
  • 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。
    • 目标数据库多的列要求非空且没有默认值,源数据库insert数据,同步到目标数据库后多的列为null,不符合目标数据库要求。
    • 目标数据库多的列设置固定默认值,且有唯一约束。源数据库insert多条数据后,同步到目标数据库后多的列为固定默认值,不符合目标数据库要求。

Oracle源端数据源约束

类别

说明

适用版本

10、11、12、19版本。

权限要求

Oracle 库需要开启归档日志,同时需表查询权限和日志解析权限,开通对应权限详情请参考Oracle数据源如何开通归档日志、查询权限和日志解析权限?

同步对象范围

  • 支持同步的DML:包括INSERT、UPDATE、DELETE。
  • 支持同步的DDL:新增列。
  • 仅支持同步主键表。
  • 不支持视图、外键、存储过程、触发器、函数、事件、虚拟列、唯一约束、唯一索引、外键索引、Check约束的同步。
  • 自动建表支持同步表结构、普通索引、约束(主键、空、非空)、注释。

数据库限制

源端数据库中的库名、表名、字段名不能包含:.-以及非ASCII字符,建议尽量使用常规字符避免任务失败。

使用限制

  • 驱动包安装:
  • 通用:
    • 实时同步过程中,不支持IP、端口、账号、密码修改。
    • Oracle归档日志建议保留3天以上,否则可能因无法获取日志导致任务失败,特殊情况导可能致数据不一致或者丢失。
    • 禁止对Oracle源库做resetlogs操作,否则会导致数据无法同步且任务无法恢复。
    • 不支持修改源数据库Oracle用户名(SCHEMA名),包括11.2.0.2之前版本通过修改USER$字典表方式及11.2.0.2之后通过ALTER USER username RENAME TO new_username修改SCHEMA名称的场景。
    • Oracle为源端时,暂不支持迁移CLOB、NCLOB和BLOB类型。
    • Oracle为源端时,暂不支持Oracle RAC集群。
    • Oracle为源端时,支持连接单实例的oracle备库,不支持RAC集群备库,备库读取时只支持读取archive log,不支持读取standby log。连接备库时建议oracle 设置定时归档,减少数据同步时延。
    • 网络带宽建议大于100M/s。
  • 全量同步阶段:

    任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。

  • 增量同步阶段:
    • 支持DML:包括INSERT、UPDATE、DELETE。
    • 支持的DDL:新增列。
    • 不支持混合分区表。混合分区表中的外部分区数据变更不产生DML日志,增量数据同步时无法获取变更信息,会存在数据不一致的风险。
    • 表名和列名长度限制为30个字符。Oracle日志读取采用Oracle logminer,logminer限制了表名和列名在30个字符以内,详情请参见LogMiner分析日志相关介绍
    • 增量启动时,选择时间位点启动,请确保oracle数据库时区和数据库所在主机时区一致,才能保证增量位点的准确性。
    • 增量同步不支持Oracle上的分布式事务(XA事务)和PARALLEL DML。
    • 增量阶段不支持Oracle字符集扩展的字符,标准字符集无法解析Oracle自定义扩展字符。
    • 增量同步不支持同步或迁移触发器,需要关闭目标Oracle的触发器。
    • 增量同步不支持同步或迁移存在外键约束的数据。
    • 增量同步不支持同步或迁移使用Oracle Data Pump向源库导入的数据。

其他限制

  • 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。
    • 目标数据库多的列若是非空且没有默认值,源数据库insert数据,同步到目标数据库后多的列为null,不符合目标数据库要求。
    • 目标数据库多的列设置固定默认值,且有唯一约束。源数据库insert多条数据后,同步到目标数据库后多的列为固定默认值,不符合目标数据库要求。
  • 当使用PDB数据库同步时,由于Oracle LogMiner组件的限制,增量同步时必须打开全部PDB。
  • Oracle为源端时全量+增量或增量作业,如果需要同步PDB库中的表,Oracle连接中需要填写CDB库的用户名和密码,不能为PDB用户名和密码,因为Oracle日志统一在存储在CDB库中,同时Oracle logminer只能运行在CDB库中。
  • 全量和增量同步不支持隐藏列(UNUESD, INVISIBIE)。
  • DDL删除表时需执行“drop table test_table_name purage命令”。

    Oracle数据库默认删除表是一个高危操作,执行"drop table test_table_name"命令时, Oracle会将该命令转换为“rename table test_table_name as xxxxx”, 即将该表重新命名为Oracle临时表空间中的一张待处理表,原表实际并未删除,migration默认直接忽略该语法;Oracle删除表语句"drop table test_table_name purage"会彻底删除表,migration会自动识别删除表并下发给下游。

  • 不支持无主键表。
  • 不支持DCL操作。
  • 不支持同步或迁移连续的RENAME TABLE操作,否则可能会导致任务失败。
  • 不支持同步或迁移全局临时表(任务正常运行)。
  • 不支持同步或迁移含有默认值函数的表,否则会导致数据不一致。
  • 不支持同步或迁移默认值中含有表达式的表。
  • 不支持同步或迁移外部表。
  • 不支持同步或迁移计算列、加密列。
  • 不支持同步或迁移虚拟私有数据库(Virtual Private Database, VPD)。
  • 不支持同步或迁移dbms_scheduler和dbms_job创建的job。
  • 不支持同步或迁移Schema名称的变更操作。
  • 不支持同步或迁移嵌套表,否则会导致任务报错。
  • 不支持同步或迁移物化视图(Materialized View)。
  • 不支持同步或迁移包含关键字或者特殊字符的属性名的DDL操作。
  • 不支持ROWID变更操作(例如split partition、table move、table shrink、move partition key),否则可能会导致数据不一致或任务失败。
  • 不支持Secure Sockets Layer(SSL)加密传输模式。
  • 不支持Oracle Label Security模式。

MongoDB源端数据源约束

类别

说明

适用版本

4.0.0及以上版本。

权限要求

-

同步对象范围

  • 支持同步的DML:包括INSERT、UPDATE、DELETE。
  • 不涉及且不支持同步的DDL:同步时需要指定好字段的映射。
  • 仅支持同步主键表:MongoDB主键默认为_id。
  • 不涉及且不支持视图、外键、存储过程、触发器、函数、事件、虚拟列、唯一约束、唯一索引、外键索引、Check约束的同步。
  • 不支持自动建表,目标端表需手动建立。
  • 不支持同步TTL(Time To Live)索引。
  • 不支持同步或迁移admin和local库中的数据。

数据库限制

源端数据库命名规则遵循MongoDB开源规则。
  • 数据库名约束:

    请勿依靠大小写来区分数据库。例如,不能使用下面这两个名称相似的数据库:salesData 和SalesData。

    在 MongoDB 中创建数据库后,在引用数据库时必须使用一致的大小写。例如,如果创建了salesData 数据库,引用时不要使用其他大小写,例如salesdata或SalesData。

    在 Windows 上运行时,不得包含以下任意字符:/\. "$*<>:|?。

    在 Unix 和 Linux 系统上运行时,不得包含以下任何字符:/\. "$。

    长度限制为 63 字节。

  • 集合名称约束:

    应以下划线或字母字符开头。

    不能包含 null 字符或 $、不能为空字符串(例如 "")。

    不能以 system. 开头。

    未分片集合和视图的命名空间长度限制为 255 字节,分片集合的命名空间长度限制为 235 字节。

  • 字段名称限制:

    长度限制为255字节,不能包含null字符或. $。

使用限制

  • 通用:
    • 实时同步过程中,不支持IP、端口、账号、密码修改。
    • MongoDB实时数据同步不支持单副本的数据源。
    • 不支持在运行过程中修改MongoDB库名、集合名。
    • 不支持自动建表,需要手动在DWS目标端建立接收表。
    • 支持在设置字段映射时,选取extraColumn这个默认自带的源端字段,来确认目标端的某个字段,去接收所有在任务中未被定义过映射MongoDB源端字段。
    • 支持提前自定义字段映射,Migration在同步时,若检测到同名字段则传输,若未检测到对应字段则置空。
    • 支持DML:包括INSERT、UPDATE、DELETE。
  • 全量同步阶段:

    migration会遍历表中所有chunk,源表预设过多chunk时,会导致全量同步时间变长。

其他限制

-

GaussDB源端数据源约束

类别

说明

适用版本

内核引擎版本505.1.0、505.1.0.SPC0100、505.2.0。

权限要求

  1. 需要REPLICATION权限或继承了内置角色gs_role_replication的权限、DATABASE的CONNECT权限、SCHEMA的USAGE权限、表的SELECT权限、序列的SELECT权限。
  2. 需要具备远程连接权限。

    远程连接权限的添加方法:

    • 集中式:在源数据库的“gs_hba.conf”配置文件添加配置“host all <user> 0.0.0.0/0 sha256”和“host replication <user> 0.0.0.0/0 sha256”。
    • 分布式:在源数据库CN节点的“gs_hba.conf”配置文件添加配置“host all <user> 0.0.0.0/0 sha256”;在源数据库DN节点的“gs_hba.conf”配置文件添加配置“host all <user> 0.0.0.0/0 sha256”和“host replication <user> 0.0.0.0/0 sha256”。
    • 在源库使用系统管理员用户执行语句“select pg_reload_conf();”生效,或重启数据库实例生效。
  3. 需保证安全组和防火墙策略放开对应连接端口。

    安全组和防火墙开放策略:数据库连接已放开普通连接和复制连接端口。

    集中式:复制连接端口为普通连接端口+1。

    分布式:复制连接端口为CN/DN连接端口+1,在源数据库执行语句“select * from pgxc_node”可查看DN连接端口。

同步对象范围

  • 支持同步DML:包括INSERT、UPDATE、DELETE。
  • 不支持同步DDL,如果作业配置的源端表有DDL操作需要重启作业。
  • 仅支持同步有主键表。
  • 不支持同步视图、外键、存储过程、触发器、函数、事件、虚拟列、唯一约束和唯一索引。
  • 不支持同步无日志表(UNLOGGED TABLE)、临时表、系统模式和系统表。
  • 自动建表支持同步表结构、普通索引、约束(主键、空、非空)、注释。

数据库限制

  • 源数据库参数要求:
    • 源库的password_encryption_type参数设置为1,修改用户密码使其生效。
    • 源库的wal_level参数设置为logical。
    • 源库的max_replication_slots参数值必须大于当前已使用的复制槽数量,可基于需要创建的实时作业数量评估。
  • 源库要同步的库名、schema名和表名不可以包含/<.>\\'`|\?和!,列名不能为目标库禁止的字段。建议尽量使用常规字符避免任务失败。
  • 源数据库的分区表触发器不可以设置为disable。

使用限制

  • 通用:
    • 实时同步过程中,不支持IP、端口、账号、密码修改。
    • GaussDB的WAL日志建议保留3天以上。
    • 不支持指定位点启动。
    • 不支持暂停新增表。
    • 不支持在作业停止后自动删除逻辑复制槽。
  • 全量同步阶段:

    任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。

  • 增量同步阶段:
    • 请勿修改源数据库表的主键或者唯一键(主键不存在时),否则可能导致增量数据不一致或任务失败。
    • 请勿修改源数据库中表的replica identity属性,否则可能导致增量数据不一致或任务失败。
    • GaussDB数据源复制槽数达到上限时,无法执行新的作业,可以通过设置max_replication_slots的数值提高复制槽的使用上限或手动删除复制槽(GaussDB数据源不支持自动删除复制槽)解决,手动删除请参见PostgreSQL数据源如何手动删除复制槽?

其他限制

  • 启动任务前,请确保源库中未启动长事务,源库启动长事务会阻塞逻辑复制槽的创建,进而引发任务失败。
  • 任务启动后,不支持源库发生主备倒换。

Hudi目的端数据源约束

类别

说明

适用版本

  • MRS集群(3.2.0-LTS.x、3.5.x)
  • Hudi版本(0.11.0)

权限要求

MRS用户需要拥有Hadoop和Hive组件的读写权限,建议参照下图所示角色及用户组配置MRS用户。

图1 MRS Hudi最小化权限

具体MRS集群角色权限管理请参考《MRS集群用户权限模型》

数据库限制

Hudi的库名、表名、字段名仅支持数字、字母和下划线,且字段名必须以字母或下划线开头,建议尽量使用常规字符避免任务失败。

使用限制

  • 通用:
    • 实时同步过程中,不支持对MRS账号、密码修改。
    • 实时同步过程中,对MRS Hadoop组件/角色做停止、重启等变更操作时Hadoop组件可能出现短暂不可用,从而导致实时同步任务异常。
    • 在添加Hudi的配置参数时需要确保其为Flink on Hudi支持参数,否则可能导致任务失败。

      部分Spark on Hudi参数在Flink on Hudi场景不适用或参数名不一致。

    • 对于版本低于3.2.0-LTS1.5的MRS集群的Hudi MOR表,使用实时同步任务(Flink)增量同步数据后,不支持直接使用CDM或Spark SQL写入数据,需要先进行Compaction后方可写入。
  • 建表:
    • 请尽量避免对Hudi表的分区字段做Update,否则软删除场景会出现不同分区下主键重复的数据。请选择字段值相对稳定的列作为Hudi分区字段。
    • 实时同步任务默认Hudi表中已存在三个审计字段:cdc_last_update_date(timestamp类型)、logical_is_deleted(boolean类型)、_hoodie_event_time(string类型),客户手动建表时需要添加三个审计字段,否则会导致任务异常。
    • 手动创建Hudi表时如果字段名中存在大写字母,请确保该字段与源端表对应字段同名且大小写一致,否则会导致作业异常或数据迁移到目的端为null。

      实时同步作业自动建表时会统一将Hudi表字段名建为小写。

  • 作业稳定性:
    • BLOOM索引的Hudi表存在内存开销比较大的情况,作业稳定性不足,请尽量使用BUCKET索引建表。
    • 实时Compaction内存开销比较大,作业稳定性不足,请尽量使用离线Compaction。
  • Changelog表:

    Hudi开启changelog时,如果出现丢数,在通过Spark/Flink作业补数后,下游的Flink作业也需要做重启,否则可能出现changelog丢失,Flink状态不正确的问题。

    当前没有方法对Hudi changelog表做到operation级(-U、+U、+I、-D数据)的补数,对changelog表的补数只能修复Spark查询时的数据一致性,Flink流读的数据一致性无法修复。

  • DDL同步:
    • 不支持指定位置加列的DDL操作(例如ALTER TABLE ddl_test ADD COLUMN c2 AFTER/FIRST c1;),Migration会删除AFTER/FIRST属性,可能会导致列顺序不一致。
    • 执行不幂等的DDL可能导致数据不一致(例如ALTER TABLE ddl_test ADD COLUMN c3 timestamp default now();),实时同步任务会因数据库函数执行结果不幂等导致最终数据不一致。
    • 可识别的DDL类型有新建表、删除表、新增列、删除列、重命名表、重命名列、修改列类型、清空表,当前仅支持同步新增列操作到目的端Hudi,其余DDL可配置成忽略/异常。
      • 分库分表场景下,执行新增列时,需保证每张表加列的类型一致,否则有可能导致任务失败。
      • 源端出现修改列类型、删除列、重命名列时,需要及时停止实时同步任务,通过Spark SQL完成Hudi表的DDL变更,否则会导致作业失败或数据不一致问题。
      • 新增列名时不能超出256字符,否则任务会失败。

DWS目的端数据源约束

类别

说明

适用版本

8.1.3、8.2.0及以上版本(除DWS 3.0)。

权限要求

表权限:账号需要对目标表有INSERT、SELECT、UPDATE、DELETE、CONNECT、CREATE。

数据库限制

数据库中的对象名需要满足约束:长度不超过63个字符,以字母或下划线开头,中间字符可以是字母、数字、下划线、$。

使用限制

  • 通用:
    • 实时同步过程中,不支持IP、端口、账号、密码修改。
    • 不支持同步到DWS无主键表。
    • 不支持并发同步DWS列存表,会有分布式锁,并发更新时可能导致等锁、死锁,建议使用DWS行存或行列混存表,详情请参考DWS官方资料。
  • 全量同步阶段:

    任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。

  • 增量同步阶段:
    • 增量同步过程中,不支持指定位置加列的DDL操作(例如ALTER TABLE ddl_test ADD COLUMN c2 AFTER/FIRST c1;),Migration会删除AFTER/FIRST属性,可能会导致列顺序不一致。
    • 增量同步过程中,执行不幂等的DDL可能导致数据不一致(例如ALTER TABLE ddl_test ADD COLUMN c3 timestamp default now();),Migration会因数据库函数执行结果不幂等导致最终数据不一致。
    • 增量同步过程中,库级同步不支持Online DDL,表级同步目前只支持某些云DMS产生的Online DDL。
    • 增量同步过程中,支持同步的DDL类型有新建表、删除表、新增列、删除列、重命名表、重命名列、修改列类型、清空表,用户可以根据自身需求选择需要同步的DDL类型。
      • 分库分表场景下,执行重命名列操作,必须停业务操作,不然会有数据不一致的风险。
      • 分库分表场景下,推荐只同步新增列DDL,其他的DDL同步可能会因为目标表被修改而导致任务失败或数据不一致。
      • 分库分表场景下,执行新增列时,需保证每张表加列的类型一致,否则有可能导致任务失败。
      • 新增和修改表名、列名时不能超出63字符,否则任务会失败。
      • 增量阶段,源数据库执行CHANGE COLUMN修改列信息,如果该列在目标DWS数据库中为分布列,则该语句会可能导致异常,因为DWS不支持修改分布列。

其他限制

  • 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。
    • 目标数据库多的列要求非空且没有默认值,源数据库insert数据,同步到目标数据库后多的列为null,不符合目标数据库要求。
    • 目标数据库多的列设置固定默认值,且有唯一约束。源数据库insert多条数据后,同步到目标数据库后多的列为固定默认值,不符合目标数据库要求。
  • Migration自动建表时,源库中char、varchar、nvarchar、enum、set字符类型长度在目标库会按照字节长自动扩大(因为DWS目标库为字节长)。
  • 全量同步timestamp类型时,默认值中的on update current_timestamp语法将不会同步到目标库GaussDB(DWS)中。
  • 重命名表仅支持rename后库表在同步范围中的DDL操作(例如:RENAME TABLE A TO B,B需要在同步范围内)。

    不建议在分库分表同步场景下的进行rename操作,可能会导致任务失败或数据不一致。

相关文档

    OSZAR »