DolphinScheduler同步mongoDB数据到ck-增量数据时间处理

167 阅读1分钟

场景如题

遇到的问题

mongodb中createTime字段是int类型 自定义模板中运用mongo的时间处理函数总是出错

非init 类型,可以直接用时间处理函数一个节点去尝试

解决方案

同步任务节点 添加前置任务节点shell脚本中做时间处理,获取时间

image.png

前置节点 SHELL节点

stime=$(($(date -u -d "${start} 00:00:00" +%s)*1000))
etime=$(($(date -u -d "${end} 00:00:00" +%s)*1000))
suffix=$(date -u -d "${start} 00:00:00" +"%Y_%m")
echo $stime
echo $etime
echo $suffix
echo "#{setValue(startTime=${stime})}"
echo "#{setValue(endTime=${etime})}"
echo "#{setValue(tableSuffix=${suffix})}"

image.png

同步任务节点

自定义同步模板

{
  "job": {
    "setting": {
         ***
    },
    "content": [
      {
        "reader": {
          "name": "mongodbreader",
          "parameter": {
            "address": [
              "***"
            ],
            "userName": "***",
            "userPassword": "****",
            "dbName": "****",
            "collectionName": "table_${tableSuffix}",
            "column": [
              {
                "name": "startTime",
                "type": "int"
              },
              {
                "name": "createTime",
                "type": "int"
              }
            ],
            "query":"{
              'createTime':{
                '$gte': ${startTime},
                '$lt':${endTime}
              }
            }"
              
            
          }
        },
        "writer": {
          "name": "clickhousewriter",
          "parameter": {
            "username": "***",
            "password": "***",
            "column": [
              "startTime",
              "createTime"
            ],
            "connection": [
              {
                "jdbcUrl": "***"
                "table": ["***"]
              }
            ]
          }
        }
      }
    ]
  }
}


总结

不一定是正常方案,大家看个乐就行