DataWorks(大数据开发治理平台)是阿里云重要的PaaS(Platform-as-a-Service)平台产品,支持多种计算和存储引擎服务。本文介绍通过DataWorks将MongoDB的离线数据迁移至Lindorm宽表。

背景信息

有关大数据开发治理平台DataWorks,具体请参见什么是DataWorks

注意事项

将MongoDB的离线数据迁移至Lindorm宽表时,需要将MongoDB嵌套的JSON数据展开成水平结构,并且不涉及数据的变换。
说明 如果迁移过程中需要对某些数据进行处理,例如对MongoDB数据中主键进行MD5散列,需要按照如下步骤操作:
  1. 通过DataWorks将MongoDB数据迁移至MaxCompute(ODPS)。
  2. 在MaxCompute(ODPS)上执行SQL处理数据。
  3. 通过DataWorks将MaxCompute数据迁移至Lindorm宽表。

准备工作

将MongoDB的离线数据迁移至Lindorm宽表需要完成以下准备工作。
  • MongoDB的数据准备如下:
    {
       "id" : ObjectId("624573dd7c0e2eea4cc8****"),
       "title" : "MongoDB教程",
       "description" : "MongoDB是一个NoSQL数据库",
       "by" : "菜鸟教程",
       "url" : "http://www.runoob.com",
       "map" : {
            "a" : "mapa",
            "b" : "mapb"
        },
       "likes" : 100
    }
  • Lindorm宽表的Schema数据准备如下:
    CREATE TABLE t1 (
      title varchar not null primary key,
      desc varchar,
      by varchar,
      url varchar,
      a varchar,
      b varchar,
      likes int);
  • 使用大数据开发治理平台DataWorks的数据集成服务配置DataX任务,具体操作请参见使用DataWorks配置DataX

操作步骤

  1. 在DataWorks控制台配置MongoDB数据源,具体操作请参见配置MongoDB数据源
  2. 通过脚本模式配置离线数据同步任务,具体请参见通过脚本模式配置离线同步任务
    1. 创建业务流程。
      1. 登录DataWorks控制台
      2. 在左侧导航栏,单击工作空间列表
      3. 选择工作空间所在地域后,单击相应工作空间后的进入数据开发
      4. 数据开发页面,鼠标悬停至新建图标,单击业务流程
      5. 新建业务流程对话框中,输入业务名称描述
        注意 业务名称是由大小写字母、中文、数字、下划线(_)以及小数点(.)中的一种或多种组成,且不能超过128个字符。
      6. 单击新建
    2. 创建离线同步节点。
      1. 展开业务流程,右键单击数据集成
      2. 单击新建 > 离线同步
      3. 新建节点对话框中,输入节点名称,并选择目标文件夹
        注意 节点名称是由大小写字母、中文、数字、下划线(_)以及小数点(.)中的一种或多种组成,且不能超过128个字符。
      4. 单击提交
    3. 配置离线同步任务的读写端。
      1. 成功创建离线同步节点后,单击工具栏中的转换脚本转换脚本
      2. 提示对话框中,单击确认,进入脚本模式进行开发。
      3. 脚本模式中已生成了基本的读取端配置,此时您可以继续手动配置离线同步任务的读取和写入端数据源,以及需要同步的表信息等。示例如下:
        说明
        {
            "type": "job",
            "version": "2.0",
            "steps": [
                {
                    "stepType": "mongodb",
                    "parameter": {
                        "datasource": "test_mongo",   //MongoDB数据源名称。
                        "column": [
                            {
                                "name": "title",
                                "type": "string"
                            },
                            {
                                "name": "description",
                                "type": "string"
                            },
                            {
                                "name": "by",
                                "type": "string"
                            },
                            {
                                "name": "url",
                                "type": "string"
                            },
                            {
                                "name": "map.a",
                                "type": "document.string"
                            },
                            {
                                "name": "map.b",
                                "type": "document.string"
                            },
                            {
                                "name": "likes",
                                "type": "int"
                            }
                        ],
                        "collectionName": "testdatax"
                    },
                    "name": "Reader",
                    "category": "reader"
                },
                {
                    "stepType": "lindorm",
                    "parameter": {
                        "configuration":  {
                            "lindorm.client.seedserver": "ld-xxxx-proxy-lindorm.lindorm.rds.aliyuncs.com:30020",
                            "lindorm.client.username": "root",
                            "lindorm.client.namespace": "test",
                            "lindorm.client.password": "root"
                        },
                        "nullMode": "skip",
                        "datasource": "",
                        "writeMode": "api",
                        "envType": 1,
                        "columns": [
                            "title",
                            "desc",
                            "by",
                            "url",
                            "a",
                            "b",
                            "likes"
                        ],
                        "dynamicColumn": "false",
                        "table": "t1",
                        "encoding": "utf8"
                    },
                    "name": "Writer",
                    "category": "writer"
                }
            ],
            "setting": {
                "executeMode": null,
                "errorLimit": {
                    "record": ""
                },
                "speed": {
                    "concurrent": 2,
                    "throttle": false
                }
            },
            "order": {
                "hops": [
                    {
                        "from": "Reader",
                        "to": "Writer"
                    }
                ]
            }
        }
      4. 完成离线同步节点的配置后,请保存并单击脚本模式左上角的运行按钮图标,在运行日志页签中显示数据迁移过程。迁移任务信息