diff --git a/doc/profiles.md b/doc/profiles.md index 7a33257a..480cb47b 100644 --- a/doc/profiles.md +++ b/doc/profiles.md @@ -34,23 +34,23 @@ - 日志生成目录 ``` - spring-boot配置参数,默认logging.file=${app.home}/logs/data-porter.log。 - 其中${app.home}是在启动脚本中指定的,指的是datas-porter的根目录 + spring-boot配置参数,默认logging.file=${app.home}/logs/data-node.log。 + 其中${app.home}是在启动脚本中指定的,指的是datas-node的根目录 ``` ## 节点编号 -- porter.id +- node.id ``` 用于指定任务节点编号,在所属分布式环境中唯一。用于自描述并在zookeeper上报心跳、实现分布式锁。 eg. - porter.id=100 + node.id=100 ``` ## 统计 -- porter.statistic.upload +- node.statistic.upload ``` 是否上传统计信息,包括日志、TPS指标. @@ -59,7 +59,7 @@ ## 集群 -### porter.cluster +### node.cluster ``` 分布式集群实现,当前仅支持zookeeper @@ -67,72 +67,72 @@ -- porter.cluster.strategy +- node.cluster.strategy ``` 指定分布式集群的实现策略 eg. - porter.cluster.strategy=ZOOKEEPER + node.cluster.strategy=ZOOKEEPER ``` -- porter.cluster.client.url +- node.cluster.client.url ``` 集群连接参数 eg. - porter.cluster.client.url=127.0.0.1:2181 + node.cluster.client.url=127.0.0.1:2181 ``` -- porter.cluster.client.sessionTimeout +- node.cluster.client.sessionTimeout ``` 集群连接超时时间 eg. - porter.cluster.client.sessionTimeout=超时时间,单位为毫秒。 + node.cluster.client.sessionTimeout=超时时间,单位为毫秒。 ``` ## 告警 -### porter.alert +### node.alert ``` 告警策略驱动,当前仅支持邮件 ``` -- porter.alert.strategy +- node.alert.strategy ``` 指定告警方式 eg. - porter.alert.strategy=EMAIL + node.alert.strategy=EMAIL ``` -- porter.alert.frequencyOfSeconds +- node.alert.frequencyOfSeconds ``` 相同内容通知接收频率 eg. - porter.alert.frequencyOfSeconds=60 + node.alert.frequencyOfSeconds=60 ``` -- porter.alert.client +- node.alert.client ``` - porter.alert.client.host=smtp服务器 - porter.alert.client.username=邮箱 - porter.alert.client.password=密码 - porter.alert.client.smtpAuth=true - porter.alert.client.smtpStarttlsEnable=true - porter.alert.client.smtpStarttlsRequired=false + node.alert.client.host=smtp服务器 + node.alert.client.username=邮箱 + node.alert.client.password=密码 + node.alert.client.smtpAuth=true + node.alert.client.smtpStarttlsEnable=true + node.alert.client.smtpStarttlsRequired=false ``` -- porter.alert.receiver +- node.alert.receiver ``` 全局告警通知人 类型:ArrayList - porter.alert.receiver[index].realName=姓名 - porter.alert.receiver[index].email=邮箱 - porter.alert.receiver[index].phone=手机号 + node.alert.receiver[index].realName=姓名 + node.alert.receiver[index].email=邮箱 + node.alert.receiver[index].phone=手机号 ``` ## 公用连接池 @@ -144,8 +144,8 @@ ``` -### porter.source.命名名字 -- porter.source.命名名字.sourceType +### node.source.命名名字 +- node.source.命名名字.sourceType ``` 源类型 @@ -154,49 +154,49 @@ ``` -- porter.source.命名名字.url +- node.source.命名名字.url ``` 多个用逗号隔开 eg. - porter.source.命名名字.url=jdbc连接 + node.source.命名名字.url=jdbc连接 ``` -- porter.source.命名名字.userName +- node.source.命名名字.userName ``` 账户名 eg. - porter.source.命名名字.userName=账户 + node.source.命名名字.userName=账户 ``` -- porter.source.命名名字.password +- node.source.命名名字.password ``` 密码 eg. - porter.source.命名名字.password=密码 + node.source.命名名字.password=密码 ``` -- porter.source.命名名字.maxWait -- porter.source.命名名字.minPoolSize -- porter.source.命名名字.maxPoolSize -- porter.source.命名名字.initialPoolSize -- porter.source.命名名字.connectionErrorRetryAttempts +- node.source.命名名字.maxWait +- node.source.命名名字.minPoolSize +- node.source.命名名字.maxPoolSize +- node.source.命名名字.initialPoolSize +- node.source.命名名字.connectionErrorRetryAttempts ``` 连接错误重试次数 类型:Int ``` [//]: # (todo) -- porter.source.命名名字.dbType +- node.source.命名名字.dbType ``` 类型:Enum 可选参数:MYSQL、 ORACLE ``` -- porter.source.命名名字.makePrimaryKeyWhenNo(2.0.1新增) +- node.source.命名名字.makePrimaryKeyWhenNo(2.0.1新增) ``` 类型:Boolean @@ -207,40 +207,40 @@ ## 任务配置 -### porter.task +### node.task ``` 节点任务 类型:ArrayList ``` -- porter.task[index].taskId +- node.task[index].taskId ``` 任务编号 类型:String eg. - porter.task[index].taskId=1 + node.task[index].taskId=1 ``` -- porter.task[index].receiver +- node.task[index].receiver ``` 当前任务告警通知人 - 任务告警会通知到porter.task[index].receiver + porter.alert.receiver + 任务告警会通知到node.task[index].receiver + node.alert.receiver 类型:ArrayList - porter.task[index].receiver[index].realName=姓名 - porter.task[index].receiver[index].email=邮箱 - porter.task[index].receiver[index].phone=手机号 + node.task[index].receiver[index].realName=姓名 + node.task[index].receiver[index].email=邮箱 + node.task[index].receiver[index].phone=手机号 ``` -- porter.task[index].consumer +- node.task[index].consumer ``` 任务消费源配置 类型:DataConsumerConfig ``` -- porter.task[index].consumer.consumerNameme +- node.task[index].consumer.consumerNameme ``` 消费器插件 @@ -248,7 +248,7 @@ 可选择参数:CanalFetch、KafkaFetch ``` -- porter.task[index].consumer.converter +- node.task[index].consumer.converter ``` 消息转换器 @@ -256,31 +256,31 @@ 可选择参数:canalRow(1.0新增)、oggJson ``` -- porter.task[index].consumer.source +- node.task[index].consumer.source ``` 消费器数据来源 类型:Map CanalFetch:(1.0新增) - porter.task[index].consumer.source.sourceType=CANAL - porter.task[index].consumer.source.slaveId=mysql slaveId - porter.task[index].consumer.source.address=ip:port - porter.task[index].consumer.source.database=数据库名 - porter.task[index].consumer.source.username=账户 - porter.task[index].consumer.source.password=密码 - porter.task[index].consumer.source.filter=订阅表正则 + node.task[index].consumer.source.sourceType=CANAL + node.task[index].consumer.source.slaveId=mysql slaveId + node.task[index].consumer.source.address=ip:port + node.task[index].consumer.source.database=数据库名 + node.task[index].consumer.source.username=账户 + node.task[index].consumer.source.password=密码 + node.task[index].consumer.source.filter=订阅表正则 KafkaFetch: - porter.task[0].consumer.source.sourceType=KAFKA - porter.task[0].consumer.source.servers=ip:port,ip:port - porter.task[0].consumer.source.topics=主题 - porter.task[0].consumer.source.group=消费分组 - porter.task[0].consumer.source.autoCommit=true|false + node.task[0].consumer.source.sourceType=KAFKA + node.task[0].consumer.source.servers=ip:port,ip:port + node.task[0].consumer.source.topics=主题 + node.task[0].consumer.source.group=消费分组 + node.task[0].consumer.source.autoCommit=true|false ``` -- porter.task[index].consumer.metaSource +- node.task[index].consumer.metaSource ``` @@ -288,40 +288,40 @@ 类型:Map 不做配置时,将不会做源端与目标端数据一致对比。(1.1新增规则) 形式1: - porter.task[index].consumer.metaSource.sourceName=公共数据源名字 + node.task[index].consumer.metaSource.sourceName=公共数据源名字 形式2: - porter.task[index].consumer.metaSource.dbType - porter.task[index].consumer.metaSource.url - porter.task[index].consumer.metaSource.userName - porter.task[index].consumer.metaSource.password - porter.task[index].consumer.metaSource.maxWait - porter.task[index].consumer.metaSource.minPoolSize - porter.task[index].consumer.metaSource.maxPoolSize - porter.task[index].consumer.metaSource.initialPoolSize - porter.task[index].consumer.metaSource.connectionErrorRetryAttempts + node.task[index].consumer.metaSource.dbType + node.task[index].consumer.metaSource.url + node.task[index].consumer.metaSource.userName + node.task[index].consumer.metaSource.password + node.task[index].consumer.metaSource.maxWait + node.task[index].consumer.metaSource.minPoolSize + node.task[index].consumer.metaSource.maxPoolSize + node.task[index].consumer.metaSource.initialPoolSize + node.task[index].consumer.metaSource.connectionErrorRetryAttempts ``` -- porter.task[index].consumer.eventProcessor.className(1.1新增) +- node.task[index].consumer.eventProcessor.className(1.1新增) ``` 自定义同步数据数据抽取器 格式:package.className ``` -- porter.task[index].consumer.eventProcessor.content(1.1新增) +- node.task[index].consumer.eventProcessor.content(1.1新增) ``` class路径、jar路径、源码内容 ``` -- porter.task[index].consumer.eventProcessor.emptyFetchNoticeSpan(2.0.1新增) +- node.task[index].consumer.eventProcessor.emptyFetchNoticeSpan(2.0.1新增) ``` 空查询通知间隔,单位秒 默认3600 ``` -- porter.task[index].consumer.eventProcessor.emptyFetchThreshold(2.0.1新增) +- node.task[index].consumer.eventProcessor.emptyFetchThreshold(2.0.1新增) ``` 空查询通知时间阀值,单位秒 @@ -329,14 +329,14 @@ ``` -- porter.task[index].loader +- node.task[index].loader ``` 任务载入器配置 类型:DataLoaderConfig ``` -- porter.task[index].loader.loaderName +- node.task[index].loader.loaderName ``` 目标端载入器插件 @@ -344,7 +344,7 @@ 可选参数:JdbcBatch、JdbcSingle ``` -- porter.task[index].loader.source +- node.task[index].loader.source ``` @@ -352,58 +352,57 @@ 类型:Map 形式1: - porter.task[index].loader.source.sourceName=公共数据源名字 + node.task[index].loader.source.sourceName=公共数据源名字 形式2: - porter.task[index].loader.source.dbType - porter.task[index].loader.source.url - porter.task[index].loader.sourceuserName - porter.task[index].loader.source.password - porter.task[index].loader.source.maxWait - porter.task[index].loader.source.minPoolSize - porter.task[index].loader.source.maxPoolSize - porter.task[index].loader.source.initialPoolSize - porter.task[index].loader.source.connectionErrorRetryAttempts + node.task[index].loader.source.dbType + node.task[index].loader.source.url + node.task[index].loader.sourceuserName + node.task[index].loader.source.password + node.task[index].loader.source.maxWait + node.task[index].loader.source.minPoolSize + node.task[index].loader.source.maxPoolSize + node.task[index].loader.source.initialPoolSize + node.task[index].loader.source.connectionErrorRetryAttempts ``` -- porter.task[index].loader.insertOnUpdateError(2.0新增) +- node.task[index].loader.insertOnUpdateError(2.0新增) ``` 目标端更新失败转插入开关参数,默认开启 类型:Boolean ``` -- porter.task[index].mapper +- node.task[index].mapper ``` 源端与目标端schema映射,用于处理源端和目标端命名不一致的情况 类型:List ``` -- porter.task[index].mapper[下标].schema +- node.task[index].mapper[下标].schema ``` - porter.task[index].mapper[index].schema=源端schema,目标端schema + node.task[index].mapper[index].schema=源端schema,目标端schema ``` -- porter.task[index].mapper[下标].table +- node.task[index].mapper[下标].table ``` - porter.task[index].mapper[index].table=源端表名,目标端表名 + node.task[index].mapper[index].table=源端表名,目标端表名 ``` -- porter.task[index].mapper[下标].updateDate +- node.task[index].mapper[下标].updateDate ``` 如果不配置或配置错误,数据同步结果检查功能不启用 - porter.task[index].mapper[下标].updateDate=源端表自动更新时间字段,目标端表自动更新时间字段 + node.task[index].mapper[下标].updateDate=源端表自动更新时间字段,目标端表自动更新时间字段 ``` -- porter.task[index].mapper[下标].column +- node.task[index].mapper[下标].column ``` 字段映射,可不配置。 - porter.task[index].mapper[下标].column.源端字段名=目标端字段名 -``` - \ No newline at end of file + node.task[index].mapper[下标].column.源端字段名=目标端字段名 +``` \ No newline at end of file diff --git a/doc/profiles_EN.md b/doc/profiles_EN.md index 6380f190..758e493a 100644 --- a/doc/profiles_EN.md +++ b/doc/profiles_EN.md @@ -31,23 +31,23 @@ - Log generation directory ``` - spring-boot configuration parameters,default : logging.file=${app.home}/logs/data-porter.log. - ${app.home} is specified in the startup script and refers to the root directory of datas-porter. + spring-boot configuration parameters,default : logging.file=${app.home}/logs/data-node.log. + ${app.home} is specified in the startup script and refers to the root directory of datas-node. ``` ## Node number -- porter.id +- node.id ``` Used to specify the task node number, which is unique in the distributed environment. Used to self-describe and report heartbeats on zookeeper to implement distributed locks. eg. - porter.id=100 + node.id=100 ``` ## Statistic -- porter.statistic.upload +- node.statistic.upload ``` Whether to upload statistics, including logs, TPS indicators. @@ -56,7 +56,7 @@ ## Cluster -### porter.cluster +### node.cluster ``` Distributed cluster implementation, currently only supports zookeeper @@ -64,72 +64,72 @@ -- porter.cluster.strategy +- node.cluster.strategy ``` Specify the implementation strategy of the distributed cluster. eg. - porter.cluster.strategy=ZOOKEEPER + node.cluster.strategy=ZOOKEEPER ``` -- porter.cluster.client.url +- node.cluster.client.url ``` Cluster connection parameters. eg. - porter.cluster.client.url=127.0.0.1:2181 + node.cluster.client.url=127.0.0.1:2181 ``` -- porter.cluster.client.sessionTimeout +- node.cluster.client.sessionTimeout ``` Cluster connection timeout eg. - porter.cluster.client.sessionTimeout=overtime time, in milliseconds. + node.cluster.client.sessionTimeout=overtime time, in milliseconds. ``` ## Alert -### porter.alert +### node.alert ``` Alarm policy driver, currently only supports mail. ``` -- porter.alert.strategy +- node.alert.strategy ``` Specify the alarm mode eg. - porter.alert.strategy=EMAIL + node.alert.strategy=EMAIL ``` -- porter.alert.frequencyOfSeconds +- node.alert.frequencyOfSeconds ``` Same content notification receiving frequency. eg. - porter.alert.frequencyOfSeconds=60 + node.alert.frequencyOfSeconds=60 ``` -- porter.alert.client +- node.alert.client ``` - porter.alert.client.host=smtp server - porter.alert.client.username=mail address - porter.alert.client.password=password - porter.alert.client.smtpAuth=true - porter.alert.client.smtpStarttlsEnable=true - porter.alert.client.smtpStarttlsRequired=false + node.alert.client.host=smtp server + node.alert.client.username=mail address + node.alert.client.password=password + node.alert.client.smtpAuth=true + node.alert.client.smtpStarttlsEnable=true + node.alert.client.smtpStarttlsRequired=false ``` -- porter.alert.receiver +- node.alert.receiver ``` Global alarm informer Type :ArrayList - porter.alert.receiver[index].realName=name - porter.alert.receiver[index].email=mail address - porter.alert.receiver[index].phone=phone number + node.alert.receiver[index].realName=name + node.alert.receiver[index].email=mail address + node.alert.receiver[index].phone=phone number ``` ## Public connection pool @@ -141,8 +141,8 @@ ``` -### porter.source.Named name -- porter.source.Named name.sourceType +### node.source.Named name +- node.source.Named name.sourceType ``` Source type @@ -151,49 +151,49 @@ ``` -- porter.source.Name name.url +- node.source.Name name.url ``` Multiple separated by "," eg. - porter.source.Named name.url=jdbc link + node.source.Named name.url=jdbc link ``` -- porter.source.Named name.userName +- node.source.Named name.userName ``` account name eg. - porter.source.命名名字.userName=account name + node.source.命名名字.userName=account name ``` -- porter.source.Named name.password +- node.source.Named name.password ``` password eg. - porter.source.Named name.password=password + node.source.Named name.password=password ``` -- porter.source.Named name.maxWait -- porter.source.Named name.minPoolSize -- porter.source.Named name.maxPoolSize -- porter.source.Named name.initialPoolSize -- porter.source.Named name.connectionErrorRetryAttempts +- node.source.Named name.maxWait +- node.source.Named name.minPoolSize +- node.source.Named name.maxPoolSize +- node.source.Named name.initialPoolSize +- node.source.Named name.connectionErrorRetryAttempts ``` Connection error retries Type : Int ``` [//]: # (todo) -- porter.source.Named name.dbType +- node.source.Named name.dbType ``` Type : Enum Optional parameters : MYSQL、 ORACLE ``` -- porter.source.Connection error retries.makePrimaryKeyWhenNo(2.0.1 add) +- node.source.Connection error retries.makePrimaryKeyWhenNo(2.0.1 add) ``` Type : Boolean @@ -204,40 +204,40 @@ ## Task configuration -### porter.task +### node.task ``` Node task Type : ArrayList ``` -- porter.task[index].taskId +- node.task[index].taskId ``` Task number Type : String eg. - porter.task[index].taskId=1 + node.task[index].taskId=1 ``` -- porter.task[index].receiver +- node.task[index].receiver ``` Current task alarm informer - Task alert will be notified : porter.task[index].receiver + porter.alert.receiver + Task alert will be notified : node.task[index].receiver + node.alert.receiver Type :ArrayList - porter.task[index].receiver[index].realName=name - porter.task[index].receiver[index].email=mail address - porter.task[index].receiver[index].phone=phone number + node.task[index].receiver[index].realName=name + node.task[index].receiver[index].email=mail address + node.task[index].receiver[index].phone=phone number ``` -- porter.task[index].consumer +- node.task[index].consumer ``` Task consumption source configuration Type : DataConsumerConfig ``` -- porter.task[index].consumer.consumerNameme +- node.task[index].consumer.consumerNameme ``` Consumer plugin @@ -245,7 +245,7 @@ Optional parameter : CanalFetch、KafkaFetch ``` -- porter.task[index].consumer.converter +- node.task[index].consumer.converter ``` Message converter @@ -253,31 +253,31 @@ Optional parameter : canalRow(1.0 add)、oggJson ``` -- porter.task[index].consumer.source +- node.task[index].consumer.source ``` Consumer data source Type : Map CanalFetch:(1.0 add) - porter.task[index].consumer.source.sourceType=CANAL - porter.task[index].consumer.source.slaveId=mysql slaveId - porter.task[index].consumer.source.address=ip:port - porter.task[index].consumer.source.database=database - porter.task[index].consumer.source.username=account - porter.task[index].consumer.source.password=password - porter.task[index].consumer.source.filter=Subscription form regular + node.task[index].consumer.source.sourceType=CANAL + node.task[index].consumer.source.slaveId=mysql slaveId + node.task[index].consumer.source.address=ip:port + node.task[index].consumer.source.database=database + node.task[index].consumer.source.username=account + node.task[index].consumer.source.password=password + node.task[index].consumer.source.filter=Subscription form regular KafkaFetch: - porter.task[0].consumer.source.sourceType=KAFKA - porter.task[0].consumer.source.servers=ip:port,ip:port - porter.task[0].consumer.source.topics=topic - porter.task[0].consumer.source.group=Consumer group - porter.task[0].consumer.source.autoCommit=true|false + node.task[0].consumer.source.sourceType=KAFKA + node.task[0].consumer.source.servers=ip:port,ip:port + node.task[0].consumer.source.topics=topic + node.task[0].consumer.source.group=Consumer group + node.task[0].consumer.source.autoCommit=true|false ``` -- porter.task[index].consumer.metaSource +- node.task[index].consumer.metaSource ``` @@ -285,40 +285,40 @@ Type : Map When the configuration is not done, the data between the source and the target will not be compared.(1.1 new rule) Form 1: - porter.task[index].consumer.metaSource.sourceName=public data source name + node.task[index].consumer.metaSource.sourceName=public data source name Form 2: - porter.task[index].consumer.metaSource.dbType - porter.task[index].consumer.metaSource.url - porter.task[index].consumer.metaSource.userName - porter.task[index].consumer.metaSource.password - porter.task[index].consumer.metaSource.maxWait - porter.task[index].consumer.metaSource.minPoolSize - porter.task[index].consumer.metaSource.maxPoolSize - porter.task[index].consumer.metaSource.initialPoolSize - porter.task[index].consumer.metaSource.connectionErrorRetryAttempts + node.task[index].consumer.metaSource.dbType + node.task[index].consumer.metaSource.url + node.task[index].consumer.metaSource.userName + node.task[index].consumer.metaSource.password + node.task[index].consumer.metaSource.maxWait + node.task[index].consumer.metaSource.minPoolSize + node.task[index].consumer.metaSource.maxPoolSize + node.task[index].consumer.metaSource.initialPoolSize + node.task[index].consumer.metaSource.connectionErrorRetryAttempts ``` -- porter.task[index].consumer.eventProcessor.className(1.1 add) +- node.task[index].consumer.eventProcessor.className(1.1 add) ``` Custom sync data data extractor Format : package.className ``` -- porter.task[index].consumer.eventProcessor.content(1.1 add) +- node.task[index].consumer.eventProcessor.content(1.1 add) ``` class path、jar path、Source content ``` -- porter.task[index].consumer.eventProcessor.emptyFetchNoticeSpan(2.0.1 add) +- node.task[index].consumer.eventProcessor.emptyFetchNoticeSpan(2.0.1 add) ``` Empty query notification interval, in seconds. default : 3600 ``` -- porter.task[index].consumer.eventProcessor.emptyFetchThreshold(2.0.1 add) +- node.task[index].consumer.eventProcessor.emptyFetchThreshold(2.0.1 add) ``` Empty query notification time threshold, in seconds @@ -326,14 +326,14 @@ ``` -- porter.task[index].loader +- node.task[index].loader ``` Task loader configuration Type : DataLoaderConfig ``` -- porter.task[index].loader.loaderName +- node.task[index].loader.loaderName ``` Target loader plugin @@ -341,7 +341,7 @@ Optional parameter : JdbcBatch、JdbcSingle ``` -- porter.task[index].loader.source +- node.task[index].loader.source ``` @@ -349,58 +349,57 @@ Type : Map Form 1: - porter.task[index].loader.source.sourceName=public data source name + node.task[index].loader.source.sourceName=public data source name Form 2: - porter.task[index].loader.source.dbType - porter.task[index].loader.source.url - porter.task[index].loader.sourceuserName - porter.task[index].loader.source.password - porter.task[index].loader.source.maxWait - porter.task[index].loader.source.minPoolSize - porter.task[index].loader.source.maxPoolSize - porter.task[index].loader.source.initialPoolSize - porter.task[index].loader.source.connectionErrorRetryAttempts + node.task[index].loader.source.dbType + node.task[index].loader.source.url + node.task[index].loader.sourceuserName + node.task[index].loader.source.password + node.task[index].loader.source.maxWait + node.task[index].loader.source.minPoolSize + node.task[index].loader.source.maxPoolSize + node.task[index].loader.source.initialPoolSize + node.task[index].loader.source.connectionErrorRetryAttempts ``` -- porter.task[index].loader.insertOnUpdateError(2.0 add) +- node.task[index].loader.insertOnUpdateError(2.0 add) ``` The target end update fails to insert the switch parameter, default enabled. Type : Boolean ``` -- porter.task[index].mapper +- node.task[index].mapper ``` Source and destination schema mapping, used to handle the inconsistency between source and destination naming. Type : List ``` -- porter.task[index].mapper[subscript].schema +- node.task[index].mapper[subscript].schema ``` - porter.task[index].mapper[index].schema=source schema,target schema + node.task[index].mapper[index].schema=source schema,target schema ``` -- porter.task[index].mapper[subscript].table +- node.task[index].mapper[subscript].table ``` - porter.task[index].mapper[index].table=source table name, target table name + node.task[index].mapper[index].table=source table name, target table name ``` -- porter.task[index].mapper[subscript].updateDate +- node.task[index].mapper[subscript].updateDate ``` Data synchronization result check function is not enabled if it is not configured or configured incorrectly. - porter.task[index].mapper[subscript].updateDate=The source table automatically updates the time field, and the target table automatically updates the time field. + node.task[index].mapper[subscript].updateDate=The source table automatically updates the time field, and the target table automatically updates the time field. ``` -- porter.task[index].mapper[subscript].column +- node.task[index].mapper[subscript].column ``` Field mapping, no need to configure. - porter.task[index].mapper[subscript].column.Source field name = target field name -``` - \ No newline at end of file + node.task[index].mapper[subscript].column.Source field name = target field name +``` \ No newline at end of file