阿里Dataworks使用循环节点和赋值节点完成对mongodb分表数据同步

背景

需求将MongoDB数据入仓MaxCompute

环境说明

MongoDB

100+个Collections:orders_1、orders_2、...、orders_100

前期准备

1、MongoDB数据源配置

需要先保证DW和MongoDB网络是能够联通的,需要现在集成任务中配置MongoDB的数据源信息。

具体可以查看我的另外一篇:https://blog.csdn.net/qq_16018407/article/details/142991582

2、赋值节点

选择赋值节点,赋值节点新增后打开,可以看到有Python、shell、ODPS SQL

Python 读取最后一次Print字符串,Shell读取最后一次echo输出的字符串,如"orders_1,order_2" 就按照","逗号被拆分成2个元素用于后续循环

ODPS SQL 则是每一行是遍历的一个元素

每一次循环都会传入遍历的元素,如python :

python2 复制代码
print "orders_1,orders_2";

则会当做["orders_1","orders_2"]数组进行遍历,每次一个元素会传入到遍历的循环中执行

实操界面:

python 复制代码
print "orders_1,orders_2";

赋值节点会自动出现一个outputs给后面的节点读取

3、循环任务

新增完毕后进入到循环内部,会看到一个start 和end节点,这个时候我们再选择一个离线同步任务,将流程串起来

点开离线集成任务,切换到离线集成任务的脚本模式,赋值节点的collectionName会以"${dag.foreach.current}" 参数传入到循环内部的流程中。

在集成任务脚本中,将对应的collectionName替换为 ${dag.foreach.current} 即可

json 复制代码
{
    "transform": false,
    "type": "job",
    "version": "2.0",
    "steps": [
        {
            "stepType": "mongodb",
            "parameter": {
                "objectIdOutputType": "json",
                "useSplitVector": false,
                "datasource": "你的mongodb数据源名称",
                "envType": 1,
                "cursorTimeoutInMs": "3600000",
                "column": [
                    {
                        "name": "col_combine",
                        "type": "combine"
                    }
                ],
                "tableComment": "This kind of datasource dosen't support get table comment. This is a comment produced by di.",
                "batchSize": "1000",
                "collectionName": "${dag.foreach.current}"
            },
            "name": "Reader",
            "category": "reader"
        },
        {
            "stepType": "odps",
            "parameter": {
                "partition": "col=${dag.foreach.current}",
                "truncate": true,
                "datasource": "你输出数据表的MaxCompute空间名称",
                "envType": 1,
                "isSupportThreeModel": false,
                "tunnelQuota": "default",
                "column": [
                    "你的ODPS表的字段,因为我这里是想要将所有数据放在一个字段,所以这里就只预留了一个字段"
                ],
                "emptyAsNull": false,
                "tableComment": "",
                "table": "你的ODPS表",
                "consistencyCommit": false
            },
            "name": "Writer",
            "category": "writer"
        },
        {
            "copies": 1,
            "parameter": {
                "nodes": [],
                "edges": [],
                "groups": [],
                "version": "2.0"
            },
            "name": "Processor",
            "category": "processor"
        }
    ],
    "setting": {
        "errorLimit": {
            "record": "0"
        },
        "locale": "zh_CN",
        "speed": {
            "throttle": false,
            "concurrent": 1
        }
    },
    "order": {
        "hops": [
            {
                "from": "Reader",
                "to": "Writer"
            }
        ]
    }
}

整个循环流程,点击右侧打开配置进行相关调度配置,最下方需要配置节点上下文 loopDataArray这个参数是读取外部的赋值节点,是必须配置的参数

日志

循环节点无法在dataworks的开发界面直接运营进行测试,只能发布以后在运维中心进行查看

最终效果

后期拓展

这里因为业务需求所以没有循环的参数是通过python print写死输出的

优雅一些的方式就是通过数据表维护,就可以动态读取数据表的内容,然后作为循环参数传入了

相关文档

for-each节点由哪些组成,应用逻辑是什么_大数据开发治理平台 DataWorks(DataWorks)-阿里云帮助中心. (2021, August 18). Aliyun.com. https://help.aliyun.com/zh/dataworks/user-guide/logic-of-for-each-nodes?spm=a2c4g.11186623.4.5.20a4d43aNd6b0E\&scm=20140722.H_299261._.ID_299261-OR_rec-V_1#section-50c-r2v-mhd

赋值节点的操作步骤_大数据开发治理平台 DataWorks(DataWorks)-阿里云帮助中心. (2019, September 10). Aliyun.com. https://help.aliyun.com/zh/dataworks/user-guide/configure-an-assignment-node?spm=a2c4g.11186623.0.0.2947b24b0wmXD7#task-2485378

for-each节点由哪些组成,应用逻辑是什么_大数据开发治理平台 DataWorks(DataWorks)-阿里云帮助中心. (2021, August 18). Aliyun.com. https://help.aliyun.com/zh/dataworks/user-guide/logic-of-for-each-nodes?spm=a2c4g.11186623.0.0.45634a14sGs7jS

相关推荐
a_安徒生2 分钟前
linux安装TDengine
linux·数据库·tdengine
程序员学习随笔5 分钟前
PostgreSQL技术内幕19:逻辑备份工具pg_dump、pg_dumpall
数据库·postgresql
尘浮生37 分钟前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
偶尔。53538 分钟前
什么是事务?事务有哪些特性?
数据库·oracle
安迁岚40 分钟前
【SQL Server】华中农业大学空间数据库实验报告 实验六 视图
数据库·sql·mysql·oracle·实验报告
xoxo-Rachel1 小时前
(超级详细!!!)解决“com.mysql.jdbc.Driver is deprecated”警告:详解与优化
java·数据库·mysql
JH30731 小时前
Oracle与MySQL中CONCAT()函数的使用差异
数据库·mysql·oracle
蓝染-惣右介1 小时前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
冷心笑看丽美人1 小时前
Spring框架特性及包下载(Java EE 学习笔记04)
数据库
武子康2 小时前
Java-07 深入浅出 MyBatis - 一对多模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据库·sql·mybatis·springboot