通过脚本模式配置离线同步任务

当需要实现更精细化的离线任务配置时,可以使用脚本模式,通过编写数据同步的JSON脚本并结合DataWorks调度参数,将源端单表或分库分表的全量或增量数据周期性同步至目标数据表。本文为您介绍脚本模式配置离线同步任务的常见配置,各数据源配置存在一定差异,请以数据源列表中各数据源配置详情为准。

适用范围

以下场景可使用脚本模式配置同步任务:

  • 数据源本身不支持使用向导模式配置任务。

    说明

    数据源是否支持向导模式,以界面提示为准。

    image.png

  • 部分数据源的配置参数仅支持使用脚本模式配置任务。

  • 部分不支持在DataWorks创建的数据源可以通过脚本模式配置。

准备工作

步骤一:新建离线同步节点

新版数据开发

  1. 登录DataWorks控制台,切换至目标地域,单击左侧导航栏的数据开发与运维 > 数据开发,在下拉框中选择对应工作空间后单击进入Data Studio

  2. 创建工作流。详情请参见:工作流编排

  3. 创建离线同步节点。可以通过以下两种方式创建离线同步节点:

    • 方式一:单击工作流列表右上方的image,选择新建节点 > 数据集成 > 离线同步

    • 方式二:双击工作流名称,将数据集成目录下的离线同步节点直接拖拽至右侧业务流程编辑面板。

  4. 配置节点基本信息和数据来源去向后,单击确认,完成新建。

旧版数据开发

  1. 登录DataWorks控制台,切换至目标地域,单击左侧导航栏的数据开发与运维 > 数据开发,在下拉框中选择对应工作空间后单击进入数据开发

  2. 创建业务流程。详情请参见:创建业务流程

  3. 创建离线同步节点。可以通过以下两种方式创建离线同步节点:

    • 方式一:展开业务流程,右键单击数据集成 > 新建节点 > 离线同步

    • 方式二:双击业务流程名称,将数据集成目录下的离线同步节点直接拖拽至右侧业务流程编辑面板。

  4. 根据界面提示创建离线同步节点。

步骤二:配置数据源和资源组

向导模式可在任意步骤切换为脚本模式。为确保脚本配置完整,我们推荐:

  1. 先在向导中通过界面选择好数据源和资源组,并测试网络连通性

  2. 再切换到脚本模式。

系统会自动将这些信息填充到生成的JSON脚本中。

或者,您也可以直接切换,然后在脚本模式下手动配置:在JSON代码中指定数据源,并在右侧的高级配置面板中设置资源组和任务所需资源大小。

说明

步骤三:转脚本模式并导入模板

单击工具栏中的转换脚本image图标。

image

如果脚本还未配置,您可以通过单击工具栏中的导入模板图标,根据界面提示快速导入脚本模板。

步骤四:编辑脚本,配置同步任务

脚本模式通用配置如下:

说明
  • type、version字段为默认值,不可修改。

  • 您可忽略脚本中Processor相关配置(不需要配置)。

脚本

  1. 配置读端与写端的基础信息与字段映射关系。

    重要

    各插件配置存在一定差异,以下内容仅以常见配置为例进行说明,各插件是否支持相关配置以及配置的具体实现,请以具体插件配置文档为准。详情请参见数据源列表中各个数据源的Reader脚本DemoWriter脚本Demo

    通过配置参数您可以:

    • 读取端(Reader)

      操作

      说明

      where(配置同步范围)

      • 部分源端类型支持数据过滤。您可以指定一个条件(WHERE子句,但无需填写where关键字)来筛选源端数据,任务运行时将仅同步满足该条件的数据。详情参见:场景:配置增量数据离线同步任务

      • 为了实现增量同步,您可以将此过滤条件与调度参数结合使用,使其动态变化。例如,通过gmt_create >= '${bizdate}',任务每天运行时都将只同步当天的新增数据。同时,在配置调度属性时,需要为此处定义的变量赋值。详情参见:调度参数支持的格式

        不同数据源(插件)的增量同步配置方法有所不同。
      • 当不配置数据过滤条件时,默认同步该表全量数据。

      splitPk(关系型数据库配置切分键)

      定义将源端待同步数据基于源端哪一个字段进行切分,同步任务执行时将根据该字段切分为多个task,以便并发、分批读取数据。

      • 推荐splitPk用户使用表主键,因为表主键通常情况下比较均匀,因此切分出来的分片也不容易出现数据热点。

      • 目前splitPk仅支持整型数据切分,不支持字符串、浮点和日期等其他类型 。如果您指定其他非支持类型,将会忽略splitPk功能,使用单通道进行同步。

      • 如果不填写splitPk,包括不提供splitPk或者splitPk值为空,数据同步视作使用单通道同步该表数据 。

      • 并非所有插件均支持指定切分键配置任务切分逻辑,以上仅为示例,请以具体插件说明为准。详情请参见支持的数据源及同步方案

      column(定义源端字段)

      column的数组中定义源端需要同步的字段。支持将常量、变量及函数作为自定义字段写入目的端。例如,‘123’、'${变量名}'、'now()'等。

    • 写入端(Writer)

      操作

      说明

      preSql&postSql(配置同步前后执行语句)

      部分数据源支持在同步前(数据写入目标端数据源前)与同步完成后(数据写入目标端后),在目标端执行相关数据库SQL。

      示例:MySQL Writer支持配置preSqlpostSql,即在数据写入MySQL前或后,可以执行一些MySQL命令。例如在MySQL Writer导入前准备语句(preSql)配置项中配置MySQL清空表命令truncate table tablename,实现同步前(写入MySQL数据前)先清空表中的旧数据的操作。

      writeMode(定义冲突时的写入模式)

      定义路径或主键等场景冲突时以何种方式写入目标端。该配置根据数据源本身特性及writer插件支持情况,此处配置不同。您需要参考具体writer插件进行配置。

  2. 通道控制。

    您可以在setting域中进行效率配置,主要包括并发数设置、同步速率设置、同步脏数据设置等信息。

    参数

    描述

    executeMode(分布式处理能力)

    用于控制是否开启分布式模式来执行当前任务。

    • distribute:开启分布式处理能力。分布式执行模式可以将您的任务切片分散到多台执行节点上并发执行,进而做到同步速度随执行集群规模水平扩展,突破单机执行瓶颈。

    • null:不开启分布式处理能力。配置的并发数据仅仅是单机上的进程并发,无法利用多机联合计算。

    重要
    • 如果使用独享数据集成资源组,且只有1台机器,不建议使用分布式,因为无法利用多机资源能力。

    • 如果单机已经满足速度需要,建议优选单机模式,简化任务执行模式。

    • 并发数大于等于8个才能开启分布式处理能力。

    • 部分数据与支持分布式模式执行任务,详情请参见具体插件配置文档。

    • 开启分布式处理开关会占用更多资源,如运行时报错内存溢出(OOM),可尝试关闭此开关。

    concurrent(任务期望最大并发数)

    用于定义当前任务从源端并行读取或并行写入目标端的最大线程数。

    说明

    由于资源规格等原因,实际执行时并发数可能小于等于此处配置的并发数,调试资源组收费将按照实际执行的并发数收费。详情请参见:性能指标

    throttle(同步速率)

    用于控制同步速率。

    • true:限流。以保护读取端数据库,避免抽取速度过大,给源库造成太大的压力。限速最小配置为1MB/S。

      说明

      throttle设置为true时,您还需要设置mbps(同步速率)参数。

    • false:不限流。在不限流的情况下,任务将在所配置的并发数的限制基础上,提供现有硬件环境下最大的传输性能。

    说明

    流量度量值是数据集成本身的度量值,不代表实际网卡流量。通常,网卡流量是通道流量膨胀的12倍,实际流量膨胀取决于具体的数据存储系统传输序列化情况。

    errorLimit(错误记录数控制)

    用于定义脏数据阈值,及对任务的影响。

    重要

    当脏数据过多时,会影响同步任务的整体同步速度。

    • 不配置时默认允许脏数据,即任务产生脏数据时不影响任务执行。

    • 配置为0,表示不允许脏数据存在。如果同步过程中产生脏数据,任务将失败退出。

    • 允许脏数据并设置其阈值时:

      • 若产生的脏数据在阈值范围内,同步任务将忽略脏数据(即不会写入目标端),并正常执行。

      • 若产生的脏数据超出阈值范围,同步任务将失败退出。

    说明

    脏数据认定标准:脏数据是对业务没有意义,格式非法或者同步过程中出现问题的数据。单条数据写入目标数据源过程中发生了异常,则此条数据为脏数据。 因此只要是写入失败的数据均被归类于脏数据。

    例如,源端是VARCHAR类型的数据写入INT类型的目标列中,则会因为转换不合理导致脏数据无法成功写入目的端。您可以在同步任务配置时,控制同步过程中是否允许脏数据产生,并且支持控制脏数据条数,即当脏数据超过指定条数时,任务失败退出。

    说明

    任务整体同步速度除受到上述配置影响外,还受源端数据源性能,同步网络环境等多方面影响,关于同步速率说明与调优,详情请参见离线同步任务调优

步骤五:配置调度属性

周期性调度的离线同步任务需要配置任务自动调度时的相关属性,进入离线同步节点的编辑页面,单击右侧的调度配置,配置节点调度属性。

您需为同步任务配置调度参数、调度策略、调度时间和调度依赖,配置方式与其他数据开发节点一样。此处不再重复叙述。

调度参数使用说明请参见:调度参数在数据集成的典型应用场景

步骤六:提交并发布任务

  • 配置调试参数。

    在离线同步任务配置页面右侧单击调试配置,配置以下参数,用于测试运行同步任务使用。

    配置项

    配置说明

    资源组

    选择与数据源连通的资源组。

    脚本参数

    为数据同步中的占位符参数进行赋值。例如:若数据集成中配置了${bizdate}参数,则需配置格式为yyyymmdd格式的日期参数。

  • 运行任务。

    单击工具栏的image运行按钮,可以在数据开发中对任务进行运行调试。后续,您可以创建目标表类型对应的节点类型来查询目标表数据,确认同步后的数据是否符合预期。

  • 发布任务。

    任务测试运行成功后,若任务需要进行周期性调度运行,您需要单击节点编辑页面上方的image按钮,将任务发布至生产环境。关于任务发布,详情请参见:发布任务

后续步骤

任务发布至生产环境后,您可进入生产环境运维中心查看该调度任务,关于离线同步任务的运行与管理、状态监控、资源组运维等操作详情请参见:离线同步任务运维

相关文档