
# MongoDB同步到DWS作业配置（内测）
#### 支持的源端和目的端数据库版本
表1支持的数据库版本 
| 源端数据库                  | 目的端数据库                            |
|:---|:---|
| MongoDB数据库（4.0.0及以上版本） | DWS集群（8.1.3、8.2.0及以上版本（除DWS 3.0）） |
   
#### 数据库账号权限要求
在使用Migration进行同步时，源端和目的端所使用的数据库账号需要满足以下权限要求，才能启动实时同步任务。不同类型的同步任务，需要的账号权限也不同，详细可参考下表进行赋权。
表2数据库账号权限 
| 类型名称      | 权限要求                                                          |
|:---|:---|
| 源数据库连接账号  | 具备目标数据库表的read相关动作权限。建议连接账号绑定内置read角色或包含read角色所有动作权限的自建角色。     |
| 目标数据库连接账号 | 目标数据库的每张表必须具有如下权限：INSERT、SELECT、UPDATE、DELETE、CONNECT、CREATE。 |
   
#### 支持的同步对象范围
在使用Migration进行同步时，不同类型的链路，支持的同步对象范围不同，详细情况可参考下表。
表3同步对象范围 
| 类型名称   | 使用须知                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|
| 同步对象范围 | - 支持同步的DML：包括INSERT、UPDATE、DELETE。  - 不涉及且不支持同步的DDL：同步时需要指定好字段的映射。  - 仅支持同步主键表：MongoDB主键默认为_id。  - 不涉及且不支持视图、外键、存储过程、触发器、函数、事件、虚拟列、唯一约束、唯一索引、外键索引、Check约束的同步。  - 不支持自动建表，目标端表需手动建立。  - 不支持同步TTL（Time To Live）索引。  - 不支持同步或迁移admin和local库中的数据。   |
   
#### 注意事项
除了数据源版本、连接账号权限及同步对象范围外，您还需要注意的事项请参见下表。
表4注意事项 
| 类型名称  | 使用和操作限制                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
|:---|:---|
| 数据库限制 | - 源端数据库命名规则遵循MongoDB开源规则。 - 数据库名约束： 请勿依靠大小写来区分数据库。例如，不能使用下面这两个名称相似的数据库：salesData 和SalesData。 在 MongoDB 中创建数据库后，在引用数据库时必须使用一致的大小写。例如，如果创建了salesData 数据库，引用时不要使用其他大小写，例如salesdata或SalesData。 在 Windows 上运行时，不得包含以下任意字符：/\\. "$\*\<\>:\|?。 在 Unix 和 Linux 系统上运行时，不得包含以下任何字符：/\\. "$。 长度限制为 63 字节。   - 集合名称约束： 应以下划线或字母字符开头。 不能包含 null 字符或 $、不能为空字符串（例如 ""）。 不能以 system. 开头。 未分片集合和视图的命名空间长度限制为 255 字节，分片集合的命名空间长度限制为 235 字节。   - 字段名称限制： 长度限制为255字节，不能包含null字符或. $。     - 目的端数据库中的对象名需要满足约束：长度不超过63个字符，以字母或下划线开头，中间字符可以是字母、数字、下划线、$。   |
| 使用限制  | 通用： - 实时同步过程中，不支持IP、端口、账号、密码修改。  - MongoDB实时数据同步不支持单副本的数据源。  - 不支持在运行过程中修改MongoDB库名、集合名。  - 不支持自动建表，需要手动在DWS目标端建立接收表。  - 支持在设置字段映射时，选取extraColumn这个默认自带的源端字段，来确认目标端的某个字段，去接收所有在任务中未被定义过映射MongoDB源端字段。  - 支持提前自定义字段映射，Migration在同步时，若检测到同名字段则传输，若未检测到对应字段则置空。  - 支持DML：包括INSERT、UPDATE、DELETE。   全量同步阶段： migration会遍历表中所有chunk，源表预设过多chunk时，会导致全量同步时间变长。 常见故障排查： 在任务创建、启动、全量同步、增量同步、结束等过程中，如有遇到问题，可先参考[常见问题](https://support.huaweicloud.com/dataartsstudio_faq/dataartsstudio_03_7594.html)章节进行排查。                                                                                                                                                                                                                 |
| 其他限制  | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   
#### 操作步骤
本小节以MongoDB到DWS的实时同步为示例，介绍如何配置Migration实时集成作业。配置作业前请务必阅读[使用前自检概览](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_7621.html)， 确认已做好所有准备工作。
1. 参见[新建实时集成作业](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_1603.html)创建一个实时集成作业并进入作业配置界面。
2. 选择数据连接类型：源端选MongoDB，目的端选DWS。 
   图1选择数据连接类型   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002115792018.png "点击放大")
   
   
3. 选择集成作业类型：同步类型默认为实时，同步场景包含单表场景。 
   图2选择集成作业类型   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002115633854.png "点击放大")
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
   同步场景相关介绍请参见[同步场景](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_1601.html#dataartsstudio_01_1601__section1644461120563)。
   
   
4. 配置网络资源：选择已创建的MongoDB、DWS数据连接和已配置好网络连接的migration资源组。 
   图3选择数据连接及migration资源组   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002117928212.png "点击放大")
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
   无可选数据连接时，可单击"新建"跳转至管理中心数据连接界面，单击"创建数据连接"创建数据连接，详情请参见[配置DataArts Studio数据连接参数](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0009.html)进行配置。
   无可选migration资源组时，可单击"新建"跳转至购买migration资源组页面创建migration资源组配置，详情请参见[购买创建数据集成资源组增量包](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0145.html)进行配置。
   
   
5. 检测网络连通性：数据连接和migration资源组配置完成后需要测试整个迁移任务的网络连通性，可通过以下方式进行数据源和migration资源组之间的连通性测试。 
   - 单击展开"源端配置"触发连通性测试，会对整个迁移任务的连通性做校验。
   
   - 单击源端和目的端数据源和migration资源组中的"测试"按钮进行检测。
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
     网络连通性检测异常可先参考[数据源和资源组网络不通如何排查？](https://support.huaweicloud.com/dataartsstudio_faq/dataartsstudio_03_7595.html)章节进行排查。
     
   
   
   
   
6. 配置源端参数。 
   各同步场景下选择需要同步库表的方式请参考下表。
   表5选择需要同步的库表 
   | 同步场景 | 配置方式                                                                                                                            |
   |:---|:---|
   | 单表   | 选择需要迁移的MongoDB集合。 图4选择库表 ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002153465133.png "点击放大") |
      
   
   
7. 配置目的端参数。 
   - 源库表和目标匹配策略。 各同步场景下源端库表和目标端库表的匹配策略请参考下表。
     表6源库表和目标匹配策略 
     | 同步场景 | 配置方式                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
     |:---|:---|
     | 单表   | - Schema匹配策略。 - 与来源库同名：数据将同步至与来源MongoDB库名相同的DWS Schema中。  - 自定义：数据将同步至自行指定的DWS Schema中。    - 表匹配策略。 - 与来源表同名：数据将同步至与来源PostgreSQL表名相同的DWS表中。  - 自定义：数据将同步至自行指定的DWS表中。 图5整库场景下源库表和目标匹配策略 ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002115187224.png "点击放大") 说明： 自定义匹配策略时，支持用内置变量#{source_db_name}和#{source_table_name}标志来源MySQL的库名和表名，其中表匹配策略必须包含#{source_table_name}。      |
        
     
   
   - DWS参数配置。 其余DWS目的端参数说明请参考下表。
     图6DWS配置项   
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002150665793.png "点击放大")
     表7DWS配置项 
     | 配置项      | 默认值         | 单位 | 配置说明                                                                                                                                                                                                                                                                   |
     |:---|:---|:---|:---|
     | 写入模式     | UPSERT MODE | -  | - UPSERT MODE：批量更新入库模式。  - COPY MODE：DWS专有的高性能批量入库模式。   |
     | 批写最大数据量  | 50000       | 条  | 单批次写入DWS数据的条数，可根据表数据大小和作业内存使用适当调整。                                                                                                                                                                                                                                     |
     | 定时批写时间间隔 | 3           | 秒  | 支持配置每批次数据写入DWS的时间间隔。                                                                                                                                                                                                                                                   |
     | 高级配置     | -           | -  | 支持通过参数配置部分高级功能，参数详情可参考[表8 DWS高级配置一览表]。                                                                                                                                                                                    |
        
      表8DWS高级配置一览表 
     | 参数名                            | 参数类型    | 默认值                | 单位 | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
     |:---|:---|:---|:---|:---|
     | sink.buffer-flush.max-size     | int     | 512                | MB | 写入DWS时每批数据的最大字节数，可根据作业配置内存和数据大小适当调整。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
     | sink.keyby.enable              | boolean | true               | -  | 数据分流开关，在多并发场景下开启数据分流可将数据按规则分配给不同的工作进程写入目的端，可提高写入性能。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     | sink.keyby.mode                | string  | table              | -  | 数据分流模式，可选填写： - pk：按数据主键值进行分流。  - table：按表名进行分流。 说明： - 多并发场景下，若开启DDL功能，只能按表名分流，否则可能导致数据不一致。  - 确保不会有DDL时，可以选择按主键分流，多并发场景下可提高写入性能。      |
     | sink.field.name.case-sensitive | boolean | true               | -  | 同步数据大小写敏感开关，开启后在同步数据时对库名、表名、字段名大小写均敏感。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
     | sink.verify.column-number      | boolean | false              | -  | 校验数据列数的开关，链路默认以同名映射方式同步数据，不检验是否所有列均同步。 开启本开关后，若源端与目的端列数不同将认为是数据不一致的场景，导致作业异常。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
     | sink.server.timezone           | string  | 本地时区               | -  | 连接目的端数据库时指定的session时区，支持时区标准写法，例如UTC+8等。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
     | logical.delete.enabled         | boolean | false              | -  | 逻辑删除开关，开启本开关后，需要目的端包含删除标记列，在源端删除数据，不会将目的端对应的数据删除，而是将删除标记列设为true，表示该数据在源端已不存在。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
     | logical.delete.column          | string  | logical_is_deleted | -  | 逻辑删除标记列名称，默认为logical_is_deleted，支持用户自定义。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
     | sink.ddl.isCreateIndex         | string  | true               | -  | 同步源端索引开关，开启后在自动建表时会同步源端的索引。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
        
     
   
   
   
   
8. 刷新源表和目标表映射，检查映射关系是否正确，同时可根据需求修改表属性、添加附加字段，并通过"自动建表"能力在目的端DWS数据库中建出相应的表。 
   图7源表与目标表映射   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002115107624.png "点击放大")
   - 目标字段赋值：单击操作列"目标字段赋值"可自定义MongoDB到DWS的字段映射情况。同时用户可以为所有DWS目标端的字段，设置对应的源表映射字段，或者设置手动赋值的字符串内容。
     - 列名：目的端DWS表字段的名称。
     
     - 类型：目的端DWS表字段的类型。
     
     - 字段值：目的端DWS表字段的取值来源。
       表9字段值的取值方式 
       | 类型   | 示例                                                                                                                                                                  |
       |:---|:---|
       | 手动赋值 | 任意字符。                                                                                                                                                               |
       | 源表字段 | 预设的源表字段：下拉选项中获取或者手动输入的，符合MongoDB字段限制的字段名（参考表4-数据库限制）。 extraColumns：自带的特殊字段名，使用该字段，会将所有没有设置过映射的MongoDB源端字段，写入到该字段中传输到DWS中。 |
          
       ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
       - Migration当前不支持MongoDB源端同步链路的自动建表。
       
       - 自动建表时对应的字段类型映射关系请参见[字段映射关系](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_1615.html)章节。
         
      
   
   
   
   
9. 配置任务属性。 
   表10任务配置参数说明 
   | 参数      | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 默认值  |
   |:---|:---|:---|
   | 执行内存    | 作业执行分配内存，跟随处理器核数变化而自动变化。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 8GB  |
   | 处理器核数   | 范围：2-32。 每增加1处理核数，则自动增加4G执行内存和1并发数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 2    |
   | 并发数     | 作业执行支持并发数。该参数无需配置，跟随处理器核数变化而自动变化。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 1    |
   | 自动重试    | 作业失败时是否开启自动重试。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 否    |
   | 最大重试次数  | "自动重试"为是时显示该参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 1    |
   | 重试间隔时间  | "自动重试"为是时显示该参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 120秒 |
   | 是否写入脏数据 | 选择是否记录脏数据，默认不记录脏数据，当脏数据过多时，会影响同步任务的整体同步速度。 - 否：默认为否，不记录脏数据。 表示不允许脏数据存在。如果同步过程中产生脏数据，任务将失败退出。   - 是：允许脏数据，即任务产生脏数据时不影响任务执行。 允许脏数据并设置其阈值时： - 若产生的脏数据在阈值范围内，同步任务将忽略脏数据（即不会写入目标端），并正常执行。  - 若产生的脏数据超出阈值范围，同步任务将失败退出。 说明： 脏数据认定标准：脏数据是对业务没有意义，格式非法或者同步过程中出现问题的数据；单条数据写入目标数据源过程中发生了异常，则此条数据为脏数据。 因此只要是写入失败的数据均被归类于脏数据。 例如，源端是VARCHAR类型的数据写到INT类型的目标列中，则会因为转换不合理导致脏数据不会成功写入目的端。用户可以在同步任务配置时，配置同步过程中是否写入脏数据，配置脏数据条数（单个分片的最大错误记录数）保证任务运行，即当脏数据超过指定条数时，任务失败退出。       | 否    |
   | 脏数据策略   | "是否写入脏数据"为是时显示该参数，当前支持以下策略： - 不归档：不对脏数据进行存储，仅记录到任务日志中。  - 归档到OBS：将脏数据存储到OBS中，并打印到任务日志中。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 不归档  |
   | 脏数据写入连接 | "脏数据策略"选择归档到OBS时显示该参数。 脏数据要写入的连接，目前只支持写入到OBS连接。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | -    |
   | 脏数据目录   | 脏数据写入的OBS目录。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | -    |
   | 脏数据阈值   | 是否写入脏数据为是时显示该参数。 用户根据实际设置脏数据阈值。 说明： - 脏数据阈值仅针对每个并发生效。比如阈值为100，并发为3，则该作业可容忍的脏数据条数最多为300。  - 输入-1表示不限制脏数据条数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 100  |
   | 添加自定义属性 | 支持通过自定义属性修改部分作业参数及开启部分高级功能，详情可参见[任务性能调优](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_7653.html)章节。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | -    |
      
   
   
10. 提交并运行任务。 
    作业配置完毕后，单击作业开发页面左上角"提交"，完成作业提交。
    图8提交作业   
    ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002134336117.png "点击放大")
    提交成功后，单击作业开发页面"启动"按钮，在弹出的启动配置对话框按照实际情况配置同步位点参数，单击"确定"启动作业。
    图9启动配置   
    ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002151886786.png "点击放大")
    表11启动配置参数 
    | 参数                                                                       | 说明                                                                                                                                                                                                                                                                                                                                                                                       |
    |:---|:---|
    | 同步模式  | - 增量同步：从指定时间位点开始同步增量数据。  - 全量+增量：先同步全量数据，随后实时同步增量数据。   |
    | 时间                                                                       | 增量同步需要设置该参数，指示增量同步起始的时间位点。 说明： 配置的位点时间早于Binlog日志最早时间点时，默认会以日志最新时间点开始消费。                                                                                                                                                                                    |
       
    
    
11. 暂停同步任务并修改作业内容。 
    作业在运行过程中，允许用户通过暂停按钮，暂停该同步任务。用户可以在任务暂停后修改作业内容，提交作业版本后再恢复同步任务。
    当前支持的修改操作有：
    - 在目标字段赋值中增、减加字段的映射规则。
    
    - 修改全局参数，如处理器核数、是否自动重试等内容。
    
    - 修改数据源的高级属性。
    
    
    当前不支持的修改操作有：
    - 在目标字段赋值中，修改已有的字段映射规则。如，将原本是源表字段赋值的规则，修改成手动赋值的规则。
    
    - 修改源端的集合或修改目标端的表。
    
    
    
    
 
