离线同步写入MongoDB数据

DataWorks的数据集成为您提供MongoDB Writer插件,可从其他数据源中读取数据,并将数据同步至MongoDB。本文以一个具体的示例,为您演示如何通过数据集成将MaxCompute的数据离线同步至MongoDB。

前提条件

本实践进行操作时,需满足以下条件。

准备示例数据表

本实践需准备一个MongoDB数据集合、一个MaxCompute表,用于后续进行离线数据同步。

  1. 准备MaxCompute表并构造表数据。

    1. 创建一个名称为test_write_mongo的分区表,分区字段为pt

      CREATE TABLE IF NOT EXISTS test_write_mongo(
          id STRING ,
          col_string STRING,
          col_int int,
          col_bigint bigint,
          col_decimal decimal,
          col_date DATETIME,
          col_boolean boolean,
          col_array string
      ) PARTITIONED BY (pt STRING) LIFECYCLE 10;
    2. 添加一个分区取值20230215

      insert into test_write_mongo partition (pt='20230215')
      values ('11','name11',1,111,1.22,cast('2023-02-15 15:01:01' as datetime),true,'1,2,3');
    3. 检查分区表是否正确创建。

      SELECT * FROM test_write_mongo
      WHERE pt='20230215';
  2. 准备MongoDB数据集合,后续将MaxCompute数据同步至此MongoDB数据集合。

    本实践使用阿里云云数据库MongoDB作为示例,创建一个名称为test_write_mongo的数据集合。

    db.createCollection('test_write_mongo')

离线任务配置

step1:添加MongoDB数据源

添加一个MongoDB数据源,保障数据源与独享数据集成资源组之间网络连通。操作详情请参见配置MongoDB数据源

step2:创建离线同步节点,并配置离线同步任务

在DataWorks的DataStudio中创建一个离线同步节点,并配置离线同步的来源与去向等任务配置参数,核心配置要点如下,其他参数可保持默认值即可。详细操作请参见通过向导模式配置离线同步任务

  1. 配置同步网络连接。

    选择上述步骤中创建的MongoDB、MaxCompute数据源和对应的独享数据集成资源组,测试完成连通性。

  2. 配置任务:选择数据源。

    选择上述准备数据步骤中准备的MaxCompute分区表和MongoDB数据集合。选择数据源任务关键参数配置详细介绍如下。

    参数

    配置说明

    写入模式(是否覆盖)

    指定了传输数据时是否覆盖的信息,包括写入模式业务主键

    • 写入模式

      • 当设置为时,每条写入数据执行插入。此选项为默认项。

      • 当设置为时,需指定业务主键,表示针对相同的业务主键做覆盖操作。

    • 业务主键:指定了每行记录的业务主键,用来做覆盖时使用(不支持配置为多个业务主键,通常指Mongo中的主键)。

    说明

    写入模式设置为,且将非 _id字段配置为业务主键,任务运行时可能会出现类似以下的报错:After applying the update, the (immutable) field '_id' was found to have been altered to _id: "2"原因是写入数据中,存在 _id与 replaceKey不匹配的数据,详情请参报错:After applying the update, the (immutable) field '_id' was found to have been altered to _id: "2"

    导入前准备语句

    即前置条件(PreSQL)的配置。配置格式为JSON格式,包含了typejson两个属性。

    • type:必填项,可取值为:removedrop(注意为小写字母)。

    • json

      • typeremove时,为必填项,配置语法为MongoDB的标准Query,详情请参见Query Documents

      • typedrop时,无需填写。

  3. 配置任务:字段映射。

    数据源为MongoDB时,默认使用同行映射。您也可以单击图标图标手动编辑源表字段,手动编辑的示例如下。

    {"name":"id","type":"string"}
    {"name":"col_string","type":"string"}
    {"name":"col_int","type":"long"}
    {"name":"col_bigint","type":"long"}
    {"name":"col_decimal","type":"double"}
    {"name":"col_date","type":"date"}
    {"name":"col_boolean","type":"bool"}
    {"name":"col_array","type":"array","splitter":","}

    手动后,界面可展示来源字段与目标字段的映射关系。字段映射2

step3:提交发布离线同步节点

如果您使用的是标准模式的DataWorks工作空间,并且希望后续在生产环境中周期性调度此离线同步任务的话,您可以将离线同步节点提交发布到生产环境。操作详情请参见发布任务

step4:运行离线同步节点,查看同步结果

完成上述配置后,您可以运行同步节点,待运行完成后,查看同步至MongoDB数据集合中的数据。结果数据2

附录:同步过程中的数据格式转换说明

关于type取值

支持的type包括:INTLONGDOUBLESTRINGBOOLDATEARRAY

关于数组类型

当配置类型为ARRAY时,需配置对应的splitter属性,可以输出到MongoDB的数组类型。如:

  • 源端数据为字符串:a,b,c

  • 同步任务配置type为ARRAY,splitter为,

  • 同步任务执行后,写入MongoDB的数据为:["a","b","c"]