文档

配置循环SQL节点

更新时间:

循环SQL节点可循环生成SQL语句,再将其分批提交给DMS管理的任意关系型数据库执行,同时,还可以搭配变量,控制SQL循环次数,达到简化SQL循环逻辑、平衡SQL语句对源库产生压力的目的。本文介绍配置循环SQL节点的操作步骤。

背景信息

任务编排的单实例SQL节点,仅可在数据库中单次执行SQL语句,不适用需要循环执行重复逻辑的场景,如:删除冗余的数据库表、SaaS用户更新大量表等场景。循环SQL节点适用于循环执行重复逻辑的场景。

例如:删除数据库表中冗余的数据。

在循环SQL节点配置页中编写简单的SQL语句,并且使用节点的循环下标${loop.index}、循环次数来控制SQL循环次数。不需要编写复杂的while、loop等循环语句就可以控制循环次数,实现循环执行删除数据库表数据的操作。

DELETE FROM test WHERE id=${loop.index};

操作步骤

  1. 登录数据管理DMS 5.0
  2. 在顶部菜单栏中,选择集成与开发(DTS) > 数据开发 > 任务编排

    说明

    若您使用的是极简模式的控制台,请单击控制台左上角的2023-01-28_15-57-17.png图标,选择全部功能 > 集成与开发(DTS) > 数据开发 > 任务编排

  3. 任务流区域,单击目标任务流名称,进入任务流详情页。

  4. 任务类型列表中,选择循环SQL节点并将其拖曳至画布空白区域。

  5. 双击循环SQL节点。

  6. 单击节点配置页右侧的变量设置页签,配置变量。

    说明

    您可以单击变量设置区域右上角的shuoming,查看配置变量的提示信息。

    • 单击节点变量页签,配置节点变量。配置方法,请参见配置时间变量

    • 单击任务流常量页签,配置任务流常量。任务流常量为固定值,在所有节点中都可使用,在SQL中的使用格式为${name}

    • 单击任务流变量页签,配置任务流变量。配置方法,请参见配置时间变量

    • 单击输入变量页签,查看输入变量。

  7. 循环SQL节点配置页,配置如下信息。

    类别

    配置项

    说明

    数据库

    搜索并选择目标数据库。

    说明
    • 您需要具有该数据库的查询、导出权限。申请权限的具体操作,请参见管理访问控制权限

    • 您可以单击界面右侧的元数据页签,查看该数据库中表的结构。

    循环配置

    循环类型

    • 列表:可配置循环的列表、元素名、分隔符。具体的配置操作,请参见配置示例

      说明
      • 循环列表支持上游变量、任务流常量和赋值,同时支持组合使用,例如:cat,dog,duck,${listStr}

      • 分隔符用于分隔循环列表,支持正则表达式,默认为半角逗号(,)

      • 第一个循环列表的元素名默认为loop.item,第二个循环列表未配置元素名时,默认为loop.item1,以此类推。SQL语句中可使用${loop.item1}格式来获取当次循环对应的列表元素。

      • 循环下标的变量名为loop.index,SQL中可使用${loop.index}格式来获取当前循环下标。

    • 迭代:可配置SQL循环次数。具体的配置操作,请参见配置示例

    循环列表

    配置循环列表元素名(可自定义)等信息。

    您可单击循环列表区域上方的添加,添加多个循环列表。若存在多个循环列表,必须保障多个列表项元素分割后的长度一致,否则试运行会报错。

    说明

    循环类型选择列表,则会出现此配置项。

    循环次数

    SQL循环次数。循环次数范围1~100。

    说明

    循环类型选择迭代,则会出现此配置项。

    执行配置

    批次大小

    将SQL语句循环次数尽可能等分,批次大小范围1~200。系统将每批次循环生成的SQL语句一次性提交给DMS执行。

    例:批次大小为2,循环次数为7,SQL循环两次为一个批次,提交给DMS执行,分别提交4次,最后一次仅有一次循环。

    批次执行间隔

    每批次SQL任务执行的时间间隔(单位:秒),间隔取值范围0~180秒。

    例:批次时间间隔为3秒,批次大小为2,循环次数为7,共有4个批次,有3个批次执行间隔,每段间隔时间为3秒。

    说明
    • 批次执行间隔作用于上一批次任务执行成功后。

    • SQL任务按照批次顺序执行,若上一批次任务执行失败,则后续批次的任务不会被执行。

  8. 在编写SQL区域,使用当前节点所选择的数据库的语法,编写SQL语句。系统将自动保存已编写的SQL语句。

    • SQL预览:您可以在编写SQL代码的过程中,随时单击SQL预览,预览SQL代码。

    • 有效性检查:编写完SQL代码后,单击有效性检查,检查SQL代码的有效性。

  9. 单击试运行

    • 如果执行日志的最后一行出现status SUCCEEDED,表明任务试运行成功。

    • 如果执行日志的最后一行出现status FAILED,表明任务试运行失败。

      说明

      如果试运行失败,在执行日志中查看执行失败的节点和原因,修改配置后重新尝试。

配置示例

说明

以下操作步骤中出现的数字均为示例值,仅供参考。

迭代

  1. 循环类型选择迭代

  2. 循环次数填入7。

  3. 批次大小填入2。

  4. 批次执行间隔填入3。

  5. 在编写SQL区域写入SQL语句。

    该SQL语句将实现删除test表中id为0、1、2、3、4、5、6的表数据,批次大小为2,该条SQL语句循环7次,分为4个批次提交给DMS执行,有3个批次执行间隔,间隔时间为3秒。

    DELETE FROM test WHERE id=${loop.index};
  6. 单击试运行

    diedai

列表

  1. 循环类型选择列表

  2. 添加循环列表,配置列表元素名等信息。

    1. 单击界面右侧的变量设置页签,配置任务流常量上游变量

      任务流常量配置

      • 键名:looplist0

      • 键值:task1

      本示例中上游变量名为looplist1,值为“小白”。上游变量的配置,请参见配置时间变量

    2. 在循环列表中填入列表名${looplist0}、元素名key,列表名为${looplist1}、元素名为key1

      说明
      • 若未设置元素名称,则默认为系统配置的元素名称。

      • 若该循环SQL节点有上游节点,且配置了输出变量,也可将已有的上游变量添加至循环列表。

      • 必须保障多个列表项元素分割后,列表的长度一致,否则试运行会报错。

      peizhiliebiao

  3. 批次大小填入2。

  4. 批次执行间隔填入3。

  5. 在编写SQL区域写入SQL语句。

    该SQL语句可实现将设置的任务流常量值与上游变量值进行连接,作为name的值,获取的${loop.index}下标作为id,插入test表中。

    INSERT INTO test(id,name) VALUE(${loop.index}, concat('${key}','${key1}'));
  6. 单击试运行

    yunxingliebiaopeizhi

  • 本页导读 (1)
文档反馈