You need to enable JavaScript to run this app.
文档中心
数据库传输服务

数据库传输服务

复制全文
下载 pdf
ETL 任务管理
DSL 语法
复制全文
下载 pdf
DSL 语法
DSL 是数据库传输服务 DTS 基于 LISP-1 标准为数据同步场景中数据处理需求设计的脚本语言。DTS 通过 DSL 脚本语言可以对数据中的字符串、日期和数值等进行抽取、转换、加工和加载。​
DSL 语法特性​
DSL 语法拥有以下特性:​
  • 功能强大:支持大量函数组合。​
  • 操作高效:DSL 的执行无额外的运行时开销,对同步过程的性能损耗较小。​
  • 语法简单:提供了例如数据过滤、数据转换、数据脱敏等典型场景,您可以参考此类场景设置您的专属脚本语言。详细信息,请参见应用场景。​
数据类型​
​
类型​
描述​
示例值​
int​
整型,表示没有小数部分的数值,可以是正数、负数或零。​
123​
float​
浮点型,表示有小数部分的数值。​
3.14​
string​
字符串。​
"abc"​
char​
字符型,表示单个字符。​
#a​
bool​
布尔型,表示真或假的值。​
true 或 false​
bytes​
表示以 0B 开头的 16 进制串。​
0B37​
symbol​
表示无引号包含的字符串。​
abc​
time​
表示时间类型。​
(time/parse-beijing "2015-02-23 23:54:55")​
​
表达式类型​
​
类型​
表达式​
说明​
数组​
​
[参数1 参数2 参数3 ...]​
​
数组以方括号包裹的一串元素。例如:​
  • [1 2 3]:表示整型数组。​
  • ["a" "b" "c"]:表示字符串数组。​
哈希​
​
{key1 value1 key2 value2}​
​
哈希是以花括号包裹的一串元素。奇数位元素为 key,紧随其后的偶数位元素为 value。例如:​
​
{"a" 1 "b" 2 }​
​
表示 key1 为 a,value1 为 1;key2 为 b,value2 为 2。​
函数调用​
​
(function-name 参数1 参数2 参数3 ...)​
​
函数调用是括号包括的一串元素。例如:​
​
(+ 1 2)​
​
Quoting​
​
'(参数1 参数2 参数3 ...)​
​
使用单引号 ' 将列表标记为数据,表示一串数据列表,而不是函数调用。例如:​
​
'(1 2 3)​
​
函数定义​
​
(defn 函数名 [参数1 参数2 ...]​
函数体)​
​
使用 defn 定义一个函数。例如定义一个计算平方的函数:​
​
(defn square [x]​
(* x x))​
​
变量绑定​
​
(let [变量1 值1 变量2 值2 ...]​
使用变量的表达式)​
​
使用关键字 let 做变量绑定。例如打印变量 a、b 的值:​
​
(let [a 100 b 200]​
(println a b))​
​
返回 100 200。​
​
函数类型​
数据库传输服务 DTS 支持基于 ETL 开发 DSL 脚本语言,具体如下所示。​
内置函数​
  • 表达式函数​
  • 数值运算​
  • ​
    功能​
    语法​
    取值范围​
    返回值​
    加法​
    ​
    (+ value1 value2 )​
    ​
    value1 和 value2 的取值范围包含整数或浮点数。​
    当参数都为整数时,则返回整数,否则返回浮点数。​
    减法​
    ​
    (- value1 value2)​
    ​
    value1 和 value2 的取值范围包含整数或浮点数。​
    当参数都为整数时,则返回整数,否则返回浮点数。​
    乘法​
    ​
    (* value1 value2)​
    ​
    value1 和 value2 的取值范围包含整数或浮点数。​
    当参数都为整数时,则返回整数,否则返回浮点数。​
    除法​
    ​
    (/ value1 value2)​
    ​
    value1 和 value2 的取值范围包含整数或浮点数。​
    当参数都为整数时,则返回整数,否则返回浮点数。​
    取模​
    ​
    (mod value1 value2)​
    ​
    value1 和 value2 的取值范围包含整数或浮点数。​
    当参数都为整数时,则返回整数,否则返回浮点数。​
    ​
  • 逻辑运算​
  • 比较运算​
  • ​
    功能​
    语法​
    取值范围​
    返回值​
    大于​
    ​
    (> value1 value2)​
    ​
    value1 和 value2 的取值范围包含整数、浮点数或字符串。​
    true 或 false​
    小于​
    ​
    (< value1 value2)​
    ​
    value1 和 value2 的取值范围包含整数、浮点数或字符串。​
    true 或 false​
    等于​
    ​
    (= value1 value2)​
    ​
    value1 和 value2 的取值范围包含整数、浮点数或字符串。​
    true 或 false​
    大于等于​
    ​
    (>= value1 value2)​
    ​
    value1 和 value2 的取值范围包含整数、浮点数或字符串。​
    true 或 false​
    小于等于​
    ​
    (<= value1 value2)​
    ​
    value1 和 value2 的取值范围包含整数、浮点数或字符串。​
    true 或 false​
    不等于​
    ​
    (!= value1 value2)​
    ​
    value1 和 value2 的取值范围包含整数、浮点数或字符串。​
    true 或 false​
    ​
  • 布尔运算​
  • ​
    功能​
    语法​
    取值范围​
    返回值​
    OR运算​
    ​
    (or true false true)​
    ​
    • true​
    • false​
    true 或 false。例如:​
    ​
    (or (> 1 2) (> 3 2))​
    ​
    返回 true。​
    AND 运算​
    ​
    (and true false true)​
    ​
    • true​
    • false​
    true 或 false。例如:​
    ​
    (and (> 2 1) (> 3 2))​
    ​
    返回 true。​
    NOT 运算​
    ​
    (not true)​
    ​
    • true​
    • false​
    true 或 false。例如:​
    • 示例一:​
    • ​
      (not (= 1 2))​
      ​
    • 返会 true。​
    • 示例二:​
    • ​
      (not (= 1 1))​
      ​
    • 返回 false。​
    ​
  • 字符串函数​
  • ​
    功能​
    语法​
    返回值​
    获取字符串中某个索引位置的字符​
    ​
    (sget "字符串" 索引位置)​
    ​
    返回索引位置的字符。例如:​
    ​
    (sget "abcd" 2)​
    ​
    返回 #c。​
    向字符串追加字符。​
    ​
    (append "字符串" #追加字符)​
    ​
    返回添加后的字符串。例如:​
    ​
    (append "ab" #c)​
    ​
    返回 abc。​
    返回字符串的子串​
    ​
    (slice 字符串 from to)​
    ​
    返回一个包含从 from 到 to(不包含 to)的子字符串的字符串。例如:​
    ​
    (slice "abcd" 1 3)​
    ​
    返回 bc。​
    字符串间的格式转换​
    • 将字符串转换为 int 格式​
    • ​
      (int "字符串")​
      ​
    • 将字符串转换为 float 格式​
    • ​
      (float "字符串")​
      ​
    字符串转换成 int 或 float 格式。例如:​
    • 返回结果为 123。​
    • ​
      (int "123")​
      ​
    • 返回结果为 3.14。​
    • ​
      (float "3.14")​
      ​
    ​
  • 流程控制函数​
  • ​
    功能​
    语法​
    说明​
    cond 语句​
    ​
    (cond​
    first-condition first-expression​
    second-condition second-expression​
    ...​
    default-expression)​
    ​
    cond 类似于通用语言中的 Switch 语句,但 cond 必须包含 default 分支。例如:​
    ​
    (cond (> age 50) (println "五十而知天命")​
    (> age 40) (println "四十不惑")​
    (> age 30) (println "三十而立")​
    (println "年轻人"))​
    ​
    当 age 是 20 时,则返回年轻人。​
    if 或 when 语句​
    • if 语法表达式:​
    ​
    (if condition expression)​
    ​
    • when 语法表达式:​
    ​
    (when condition expression)​
    ​
    if 和 when 的语法表达式具有相同含义,满足条件时则执行某些操作。例如:​
    ​
    (if (> 2 1) (println "OK"))​
    ​
    返回 ok。​
    unless语句​
    ​
    (unless condition expression)​
    ​
    和 if 相反,不满足条件的则执行操作。例如:​
    ​
    (unless false (println "OK"))​
    ​
    返回 ok。​
    ​
  • 数据操作函数​
  • 数组函数 true 或 false​
  • ​
    功能​
    语法​
    返回值​
    创建指定长度的数组,或创建指定长度的数组并以指定值初始化​
    • 创建指定长度的数组语法表达式:​
    • ​
      (make-array 长度)​
      ​
    • 创建指定长度的数组并以指定值初始化语法表达式:​
    • ​
      (make-array 长度 默认值)​
      ​
    返回指定长度的数组,或指定长度的数组并以指定值初始化。例如:​
    • 返回指定长度的数组示例:​
    • ​
      (make-array 3)​
      ​
    • 返回的数组为 [() () ()]。​
    • 指定长度的数组并以指定值初始化示例:​
    • ​
      (make-array 3 0)​
      ​
    • 返回的数组为 [0 0 0]。​
    按数组索引访问数组​
    ​
    (aget 数组 索引)​
    ​
    返回索引所在的数组。例如:​
    ​
    (aget [1 2 3] 1)​
    ​
    返回 2。​
    设置数组元素值​
    ​
    (aset! 数组 索引 值)​
    ​
    替换索引位置的值。例如:​
    ​
    (aset! [0 1 2] 1 3)​
    ​
    返回 [0 3 2]。​
    判断数组内是否包含某个元素​
    ​
    (exist? 数组 元素)​
    ​
    返回值为 true 或 false。判断数组内是否包含某个元素。例如:​
    ​
    (exist? ["a" "b"] "a")​
    ​
    返回 true。​
    获取数组的子数组​
    ​
    (slice 数组 from to)​
    ​
    返回字符串的子数组,返回值为 [from to)。例如:​
    ​
    (slice [1 2 3 4] 1 3)​
    ​
    返回 [2 3]。​
    ​
  • 哈希函数​
  • ​
    功能​
    语法​
    返回值​
    访问 hash 元素​
    • 语法一:​
    • ​
      (hget hash key)​
      ​
    • 语法二:​
    • ​
      (hget hash key defalut)​
      ​
    返回访问 hash 元素。例如:​
    • 示例一:​
    • ​
      (hget {"a" 2 "b" 3} "a")​
      ​
    • 返回 2。​
    • 示例二:​
    • ​
      (hget {"a" 2 "b" 3} "c" 0)​
      ​
    • 由于访问的元素 key 不存在,则返回自定义的默认值 0。​
    说明​
    默认值 defalut 支持自定义。​
    设置 hash 元素​
    ​
    (def h {"key1" value1})​
    (hset! h "key1" 参数1)​
    ​
    返回成功设置后的 hash 元素。例如​
    ​
    (def h {"a" 3})​
    (hset! h "a" 2)​
    ​
    返回 {"a" 2}。​
    删除 hash 元素​
    ​
    (def h {"key1" value1 "key2" value2})​
    (hdel! h "key")​
    ​
    返回删除后的 hash 元素。例如:​
    ​
    (def h {"a" 3 "b" 2})​
    (hdel! h "a")​
    ​
    返回 {"b" 2}。​
    探测 hash 是否包含 key​
    ​
    (exist? {"参数1" "参数2"} "参数1")​
    ​
    返回值如下:​
    • true:存在。​
    • false:不存在。​
    示例如下:​
    ​
    (exist? {"a" "b"} "a")​
    ​
    返回 true。​
    ​
  • 通用容器函数​
  • ​
    功能​
    语法​
    说明​
    在字符串或数组后添加元素​
    • 在数组后添加元素​
    • ​
      (append [参数1 参数2] 元素)​
      ​
    • 在字符串后添加元素​
    • ​
      (append "字符串" #元素)​
      ​
    返回一个新的数组或字符串。例如:​
    • 在数组后添加元素。​
    • ​
      (append [1 2] 3)​
      ​
    • 返回一个新的数组 [1 2 3]。​
    • 在字符串后添加元素。​
    • ​
      (append "ab" #c)​
      ​
    • 返回一个新的字符串 "abc"。​
    连接多个数组或字符串​
    • 连接多个数组​
    • ​
      (concat [参数1 参数2] [参数3 参数4])​
      ​
    • 连接多个字符串​
    • ​
      (concat "字符串 1" "字符串 2")​
      ​
    返回一个新的数组或字符串。例如:​
    • 连接多个数组。​
    • ​
      (concat [1 2] [3 4])​
      ​
    • 返回一个新的数组 [1 2 3 4]。​
    • 连接多个字符串。​
    • ​
      (concat "ab" "cd")​
      ​
    • 返回一个新的字符串 "abcd"。​
    ​
  • 字节流函数​
  • ​
    功能​
    语法​
    返回值​
    将字节流转换为字符串​
    ​
    (string 字节流)​
    ​
    返回一个字符串。例如:​
    ​
    (string 0B68656c6c6f)​
    ​
    返回 hello。​
    将字符串转换为字节流​
    ​
    (bytes "字符串")​
    ​
    返回一个字节流。例如:​
    ​
    (bytes "abc")​
    ​
    返回 0B616263。​
    ​
  • 高阶函数​
  • ​
    功能​
    语法​
    返回值​
    将函数应用到列表或数组内每一个元素​
    ​
    (map 函数 数组)​
    ​
    返回数组中每个元素被应用指定函数的数组或列表。例如:​
    • 将函数应用到列表内的每一个元素。​
    • ​
      (map add3 [1 2 3])​
      ​
    返回一个新的数组 [4 5 6]。​
    • 将函数应用到数组内的每一元素​
    • ​
      (map int ["1" "2" "3"]​
      ​
    返回一个新的数组 [1 2 3]。​
    使用指定的函数过滤数组​
    ​
    (filter 函数 数组)​
    ​
    当过滤函数返回 true 时则保留元素,否则将丢弃。例如:​
    ​
    (defn even? [a] (= 0 (mod a 2)))​
    (filter even? [1 2 3 4])​
    ​
    返回结果为 [2 4]。​
    对数组或列表进行聚合操作​
    ​
    (foldl 函数 初始值 数组)​
    ​
    返回数组或列表的聚合结果。例如:​
    • 对数组进行聚合。​
    • ​
      (foldl + 0 [1 2 3 4])​
      ​
    • 返回结果为 10。​
    • 对列表进行聚合。​
    • ​
      (foldl * 1 [1 2 3 4])​
      ​
    返回结果为 24。​
    ​
  • 类型自省​
  • ​
    功能​
    语法​
    返回值​
    零值判断​
    zero?​
    当目标参数为 0、0.0 时,则返回 true,否则返回 false。​
    NULL 判断​
    null?​
    当目标参数为 () 时,则返回 true,否则返回 false。​
    空判断​
    empty?​
    当目标参数为 ()、[]、"" 或 {} 时,则返回 true,否则返回 false。​
    是否为 List​
    list?​
    当目标参数是列表时,则返回 true,否则返回 false。​
    是否为数组​
    array?​
    当目标参数的数据类型是 array 时,则返回 true,否则返回 false。​
    是否为数字​
    number?​
    当目标参数的数据类型是 int、char 或 float 时,则返回 true,否则返回 false。​
    是否为整数​
    int?​
    当目标参数的数据类型是 integer 时,则返回 true,否则返回 false。​
    是否为浮点数​
    float?​
    当目标参数的数据类型是 float 时,则返回 true,否则返回 false。​
    是否为字符​
    char?​
    当目标参数的数据类型是 char 时,则返回 true,否则返回 false。​
    是否为字符串​
    string?​
    当目标参数的数据类型是 string 时,则返回 true,否则返回 false。​
    是否为符号​
    symbol?​
    当目标参数的数据类型是 symbol 时,则返回 true,否则返回 false。​
    是否为哈希值​
    hash?​
    当目标参数的数据类型是 hash 时,则返回 true,否则返回 false。​
    是否为字节流​
    bytes?​
    当目标参数的数据类型是 bytes 时,则返回 true,否则返回 false。​
    是否返回指定数据类型​
    type​
    当返回的目标参数的数据类型是 symbol、string、array、bool、char、float、function、hash、int、list 或 bytes 时,则返回 true,否则返回 false。​
    ​
扩展函数​
  • 表达式扩展函数​
  • 运算扩展函数​
  • ​
    功能​
    语法​
    返回值​
    代数左移​
    ​
    (sla 操作的数据 移动位数)​
    ​
    返回代数左移后的结果。例如:​
    ​
    (sla 1 3)​
    ​
    返回 8。​
    代数右移​
    ​
    (sra 操作的数据 移动位数)​
    ​
    返回代数右移后的结果。例如:​
    ​
    (sra 1 1)​
    ​
    返回 0。​
    8bit 逻辑左移​
    ​
    (sll8 操作的数据 移动位数)​
    ​
    返回 8bit 逻辑左移后的结果。例如:​
    • 示例一​
    • ​
      (sll8 1 1)​
      ​
    返回 2。​
    • 示例二​
    • ​
      (sll8 -1 1)​
      ​
    返回 254。​
    16bit 逻辑左移​
    ​
    (sll16 操作的数据 移动位数)​
    ​
    返回 16bit 逻辑左移后的结果。例如:​
    • 示例一:​
    • ​
      (sll16 1 1)​
      ​
    返回 2。​
    • 示例二:​
    • ​
      (sll16 -1 1)​
      ​
    返回 65534。​
    32bit 逻辑左移​
    ​
    (sll32 操作的数据 移动位数)​
    ​
    返回 32bit 逻辑左移后的结果。例如:​
    • 示例一:​
    • ​
      (sll32 1 1)​
      ​
    • 返回 2。​
    • 示例二:​
    • ​
      (sll32 -1 1)​
      ​
    • 返回 4294967294。​
    64bit 逻辑左移​
    ​
    (sll64 操作的数据 移动位数)​
    ​
    返回 64bit 逻辑左移的结果。例如:​
    • 示例一​
    • ​
      (sll64 1 1)​
      ​
    返回 2。​
    • 示例二:​
    • ​
      (sll64 -1 1)​
      ​
    返回 18446744073709551614。​
    8bit 逻辑右移​
    ​
    (srl8 操作的数据 移动位数)​
    ​
    返回 8bit 逻辑右移的结果。例如:​
    • 示例一:​
    • ​
      (srl8 2 1)​
      ​
    • 返回 1。​
    • 示例二:​
    • ​
      (srl8 -2 1)​
      ​
    • 返回 127。​
    16bit 逻辑右移​
    ​
    (srl16 操作的数据 移动位数)​
    ​
    返回 16bit 逻辑右移的结果。​
    • 示例一​
    • ​
      (srl16 2 1)​
      ​
    • 返回 1。​
    • 示例二:​
    • ​
      (srl16 -2 1)​
      ​
    • 返回 32767。​
    32bit 逻辑右移​
    ​
    (srl32 操作的数据 移动位数)​
    ​
    返回 32bit 逻辑右移的结果。例如:​
    • 示例一:​
    • ​
      (srl32 2 1)​
      ​
    • 返回 1。​
    • 示例二:​
    • ​
      (srl32 -2 1)​
      ​
    • 返回 2147483647。​
    64bit 逻辑右移​
    ​
    (srl64 操作的数据 移动位数)​
    ​
    返回 64bit 逻辑右移的结果。例如:​
    • 示例一:​
    • ​
      (srl64 2 1)​
      ​
    • 返回 1。​
    • 示例二:​
    • ​
      (srl64 -2 1)​
      ​
    • 返回 9223372036854775807。​
    bit 与​
    ​
    (bit-and 操作的数据 移动位数)​
    ​
    返回 bit 与的结果。例如:​
    ​
    (bit-and 3 2)​
    ​
    返回 2。​
    bit 或​
    ​
    (bit-or 操作的数据 移动位数)​
    ​
    返回 bit 或的结果。例如:​
    ​
    (bit-or 3 1)​
    ​
    返回 3。​
    bit 异或​
    ​
    (bit-xor 操作的数据 移动位数)​
    ​
    返回 bit 异或的结果。例如:​
    ​
    (bit-xor 3 1)​
    ​
    返回 2。​
    bit 取非​
    ​
    (bit-not 操作的数据 移动位数)​
    ​
    返回 bit 取非的结果。例如:​
    ​
    (bit-not 2)​
    ​
    返回 -3。​
    ​
  • 时间扩展函数​
  • ​
    功能​
    语法​
    返回值​
    返回当前时间​
    ​
    (time/now)​
    ​
    返回当前时间。例如:​
    ​
    (time/now)​
    ​
    返回结果为当前的时间点。​
    格式化时间​
    ​
    (time/format 时间 转换目标)​
    ​
    支持将时间转换为 unix 时间戳,单位为秒或毫秒,也支持将时间按指定格式转换为字符串。例如:​
    • 将时间转换为 unix 时间戳,单位为秒。​
    • ​
      (time/format (time/now) 'timestamp)​
      ​
    • 将时间转换为 unix 时间戳,单位为毫秒。​
    • ​
      (time/format (time/now) 'timestamp-ms)​
      ​
    • 将时间按指定格式转换为字符串。​
    • ​
      (time/format (time/now) "2006-01-02 15:04:05")​
      ​
    时间解析​
    ​
    (time/parse 解析目标)​
    ​
    返回时间解析结果。例如:​
    • 从 unix 时间戳中解析时间。​
    • ​
      (time/parse 1656988237)​
      ​
    • 使用默认的 layout(2006-01-02 15:04:05),从字符串中解析时间。​
    • ​
      (time/parse "2015-02-23 23:54:55")​
      ​
    • 指定 layout 和时间字符串,从字符串中解析时间。​
    • ​
      (time/parse "2014-Feb-04" "2006-Jan-02")​
      ​
    • 指定 layout、时间字符串和时区,从字符串解析时间。​
    • ​
      (time/parse "2014-Feb-04" "2006-Jan-02" "Asia/Shanghai")​
      ​
    北京时间解析​
    ​
    time/parse-beijing​
    ​
    ​
    (time/parse-beijing "2015-02-23 23:54:55")​
    ​
    时间计算​
    ​
    (time/add-date 时间 n年 n月 n日)​
    ​
    返回计算后的时间。例如:​
    ​
    (time/add-date (time/now) 1 2 3)​
    ​
    返回在当前时间的基础上,年份加 1 年、月份加 2 个月、日加 3 天。​
    ​
    ​
    (time/add 时间 n 年或 n 月或 n 日或 n 小时或 n 分钟或 n 秒)​
    ​
    返回计算后的时间。例如:​
    • 在当前时间的基础上,年份加 1 年。​
    • ​
      (time/add (time/now) 1 'year)​
      ​
    • 在当前时间的基础上,月份加 1 个月。​
    • ​
      (time/add (time/now) 1 'month)​
      ​
    • 在当前时间的基础上,日加 1 天。​
    • ​
      (time/add (time/now) 1 'day)​
      ​
    • 在当前时间的基础上,小时加 1 小时。​
    • ​
      (time/add (time/now) 1 'hour)​
      ​
    • 在当前时间的基础上,分钟增加 1 分钟。​
    • ​
      (time/add (time/now) 1 'minute)​
      ​
    • 在当前时间的基础上,秒增加 1 秒。​
    • ​
      (time/add (time/now) 1 'second)​
      ​
    ​
    ​
    (time/sub time1 time2)​
    ​
    返回 time1 和 time2 的时间差值,单位为秒。​
    返回年份​
    ​
    (time/year 时间)​
    ​
    返回时间的年份。例如:​
    ​
    (time/year (time/now))​
    ​
    返回当前时间的年份。​
    返回月份​
    ​
    (time/month 时间)​
    ​
    返回时间的月份。例如:​
    ​
    (time/month (time/now))​
    ​
    返回当前时间的月份。​
    返回日​
    ​
    (time/day 时间)​
    ​
    返回时间的日。例如:​
    ​
    (time/day (time/now))​
    ​
    返回当前时间的日。​
    返回小时​
    ​
    (time/hour 时间)​
    ​
    返回时间的小时。例如:​
    ​
    (time/hour (time/now))​
    ​
    返回当前时间的小时。​
    返回分钟​
    ​
    (time/minute 时间)​
    ​
    返回时间的分钟。例如:​
    ​
    (time/minute (time/now))​
    ​
    返回当前时间的分钟。​
    返回秒数​
    ​
    (time/second 时间)​
    ​
    返回时间的秒数。例如:​
    ​
    (time/second (time/now))​
    ​
    返回当前时间的秒数。​
    返回星期数​
    ​
    (time/weekday 时间)​
    ​
    返回时间的星期数。例如:​
    ​
    (time/weekday (time/now))​
    ​
    返回当前时间的星期数。​
    ​
  • 字符串扩展函数​
  • ​
    功能​
    语法​
    返回值​
    验证是否包含字符串​
    ​
    (str/contains? "字符串" "字符")​
    ​
    返回值如下:​
    • true:表示该字符存在于字符串内。​
    • false:表示该字符不存在于字符串内。​
    例如:​
    ​
    (str/contains? "abc" "b")​
    ​
    返回 true。​
    查询子字符串的数量​
    ​
    (str/count "字符串" "子字符串")​
    ​
    返回在字符串内包含多少个子字符串。例如:​
    ​
    (str/count "abcc" "c")​
    ​
    返回 2。​
    验证字符串是否以某个子串为前缀​
    ​
    (str/start-with? "字符串" "字符")​
    ​
    返回值如下:​
    • true:表示以该字符为前缀。​
    • false:表示不以该字符为前缀。​
    例如:​
    ​
    (str/start-with? "abc" "a")​
    ​
    返回 true。​
    验证字符串是否以某个子串为后缀​
    ​
    (str/end-with? "字符串" "字符")​
    ​
    返回值如下:​
    • true:表示以该字符为后缀。​
    • false:表示不以该字符为后缀。​
    例如:​
    ​
    (str/end-with? "abc" "c")​
    ​
    返回 true。​
    返回某个目标字符在字符内第一次出现时的下标​
    ​
    (str/index "字符串" "目标字符")​
    ​
    返回该字符在字符串的下标。例如:​
    ​
    (str/index "abc" "b")​
    ​
    返回 1。​
    验证字符串是否都是字母​
    ​
    (str/alpha? "字符串")​
    ​
    返回值如下:​
    • true:表示字符串内都是字母。​
    • false:表示字符串内不全是字母。​
    例如:​
    ​
    (str/alpha? "ab1")​
    ​
    返回 false。​
    验证字符串是否都是数字​
    ​
    (str/digit? "字符串")​
    ​
    返回值如下:​
    • true:表示字符串内都是数字。​
    • false:表示字符串内不全是数字。​
    例如:​
    ​
    (str/digit? "ab1")​
    ​
    返回 false。​
    拼接字符串​
    ​
    (str/join ["字符串1" "字符串2"] "拼接符")​
    ​
    返回字符串的拼接结果,支持任意拼接符拼接字符串。例如:​
    ​
    (str/join ["a" "b"] "_")​
    ​
    返回 "a_b"。​
    将字符串内的大写字母转换为小写字母​
    ​
    (str/lower "字符串")​
    ​
    返回转换为小写字母的字符串。例如:​
    ​
    (str/lower "ABC")​
    ​
    返回 "abc"。​
    将字符串内的小写字母转换为大写字母​
    ​
    (str/upper "字符串")​
    ​
    返回转换为大写字母的字符串。例如:​
    ​
    (str/upper "abc")​
    ​
    返回 "ABC"。​
    替换字符串内的子串​
    ​
    (str/replace "字符串" "字符串的子串" "目标子串")​
    ​
    返回替换后的字符串。例如:​
    ​
    (str/replace "abc" "b" "B")​
    ​
    返回 "aBc"。​
    分割字符串​
    ​
    (str/split "字符串1 拼接符 字符串2" "拼接符")​
    ​
    返回分割后的数组,需指定字符串间的拼接符分割字符串,字符串支持任意拼接符拼接。例如:​
    ​
    (str/split "a_b" "_")​
    ​
    返回 ["a" "b"]。​
    将字符串的首字母转换为大写字母​
    ​
    (str/title "字符串")​
    ​
    返回转换后的字符串。例如:​
    ​
    (str/title "abc")​
    ​
    返回 "Abc"。​
    验证字符串的首字母是否为大写字母​
    ​
    (str/title? "字符串")​
    ​
    返回值如下:​
    • true:表示字符串的首字母是大写字母。​
    • false:表示字符串的首字母不是大写字母。​
    例如:​
    ​
    (str/title? "abc")​
    ​
    返回 false。​
    删除字符串前缀​
    ​
    (str/trim-prefix "字符串" "前缀")​
    ​
    返回删除了前缀的字符串。例如:​
    ​
    (str/trim-prefix "_abc" "_")​
    ​
    返回 "abc"。​
    删除字符串后缀​
    ​
    (str/trim-suffix "字符串" "后缀")​
    ​
    返回删除了后缀的字符串。例如:​
    ​
    (str/trim-suffix "abc_" "_")​
    ​
    返回 "abc"。​
    删除字符串的前后空格​
    ​
    (str/trim-space " 字符串 ")​
    ​
    返回删除了前后空格后的字符串。例如:​
    ​
    (str/trim-space " abc ")​
    ​
    返回 "abc"。​
    计算字符串的 MD5 值​
    ​
    (str/md5 "字符串")​
    ​
    返回字符串的 MD5 值。例如;​
    ​
    (str/md5 "abc")​
    ​
    返回 "900150983cd24fb0d6963f7d28e17f72"。​
    脱敏字符串的敏感信息​
    ​
    (str/mask "字符串" 开始索引 结束索引 "*")​
    ​
    返回脱敏后的字符串,支持任意字符进行脱敏。例如;​
    • 示例一​
    • ​
      (str/mask "hello" 1 2 "*")​
      ​
    • 返回 "h**lo"。​
    • 示例二​
    • ​
      (str/mask "hello" 1 -1 "*")​
      ​
    • 1 -1 表示从开始索引到结束索引将全部遮盖。则本示例返回 "h****"。​
    ​
  • 数据操作扩展函数​
  • 内核扩展函数​
  • ​
    功能​
    语法​
    返回值​
    设置函数别名​
    ​
    (alias 别名 原名)​
    ​
    为原函数设置别名。例如:​
    本示例表示为加法运算设置别名 plus。​
    ​
    (alias plus +)​
    ​
    当使用加法运算时,您可以通过以下语法进行加法运算:​
    ​
    (plus 1 2)​
    ​
    返回 3。​
    打印函数​
    • 语法一:​
    • ​
      (println 参数)​
      ​
    • 语法二:​
    • ​
      (printf "格式化串" 参数1 参数2...)​
      ​
    • 语法三:​
    • ​
      (print 参数)​
      ​
    输出函数。例如:​
    • 语法一示例:​
    • ​
      (println "hello world")​
      ​
    • 输出"hello world"。​
    • 语法二示例:​
    • ​
      (printf "Hi, %v" "Jack")​
      ​
    说明​
    默认使用 %v 当作占位符​
    • 输出 "Hi, Jack"。​
    ​
  • JSON 扩展函数​
  • ​
    功能​
    语法​
    返回值​
    将 JSON 对象转换为字符串​
    ​
    (json/stringify {"key1" value1 "key2" value2 "key3" value3})​
    ​
    返回成功转换后的字符串。例如:​
    ​
    (json/stringify {"a" 1 "b" '() "c" true})​
    ​
    返回 {"a":1,"b":null,"c":true}。​
    将字符串转换为 JSON 对象​
    ​
    (json/parse "{"key1" : value1, "key2" : value2, "key3" : value3}")​
    ​
    返回成功转换后的 JSON 对象。例如:​
    ​
    (json/parse "{"a":1,"b":null,"c":true}")​
    ​
    返回 {"a" 1 "b" () "c" true}。​
    ​
  • DTS ETL 和 JSON 之间的映射规则如下表所示:​
  • ​
    DTS ETL 语法构件​
    JSON​
    integer​
    integer​
    float​
    float​
    string​
    string​
    symbol​
    string​
    ()​
    null​
    array​
    array​
    bytes​
    base64 encoded string​
    list​
    array​
    hash​
    object​
    bool​
    bool​
    char​
    Integer value of char​
    ​
  • Base64 扩展​
  • ​
    功能​
    语法​
    返回值​
    将 Base64 编码的字符串转换为字节流​
    ​
    (base64/decode "Base64")​
    ​
    返回转换成功的字节流。例如:​
    ​
    (base64/decode "aGVsbG8=")​
    ​
    返回 "0B68656c6c6f"。​
    将字节流转换为 Base64 编码​
    ​
    (base64/encode 字节流)​
    ​
    返回转换成功的 Base64。例如:​
    ​
    (base64/encode 0B68656c6c6f)​
    ​
    返回 "aGVsbG8="。​
    ​
领域函数​
​
功能​
语法​
返回值​
删除当前记录​
​
(dts/drop)​
​
删除当前数据行,无返回结果。​
查询当前记录是否已被丢弃​
​
(dts/dropped?)​
​
返回类型为 bool。​
返回当前记录的数据库的名称​
​
(dts/db)​
​
返回类型为 string。​
返回当前记录的表格的名称​
​
(dts/table)​
​
返回类型为 string。​
返回当前记录的事件类型​
​
(dts/event)​
​
返回类型为 string。支持以下事件类型:​
  • BEGIN​
  • COMMIT​
  • DDL​
  • DML​
返回当前记录的 DML 类型​
​
(dts/dml)​
​
返回类型为 string。支持以下 DML 类型:​
  • INSERT:增加。​
  • UPDATE:更新。​
  • DELETE:删除。​
设置 Tag​
​
(dts/set-tag)​
​
无返回类型。​
查询记录的某列是否为 null​
​
(dts/column-null? COLUMN)​
​
返回类型为 bool。​
查询记录的某列是否存在​
​
(dts/column-exist? COLUMN)​
​
返回类型为 bool。​
验证当前事件是否是 DDL 事件​
​
(dts/ddl?)​
​
返回类型为 bool。​
验证当前事件是否是 DML 事件​
​
(dts/dml?)​
​
返回类型为 bool。​
验证当前事件是否是 DML UPDATE​
​
(dts/update?)​
​
返回类型为 bool。​
验证当前事件是否是 DML DELETE​
​
(dts/delete?)​
​
返回类型为 bool。​
验证当前事件是否是 DML INSERT​
​
(dts/insert?)​
​
返回类型为 bool。​
返回记录的某个字段值​
​
(dts/column COLUMN DEFAULT)​
​
返回的字段类型支持 string、int、bool 或 float 等。​
说明​
当该列不存在或为空时,则给定默认值 DEFAULT。​
返回当前记录所有字段名​
​
(dts/columns)​
​
返回类型为字符串数组。​
设置字段值​
​
(dts/set-column COLUMN VALUE)​
​
无返回类型。​
使用指定函数对某列值做变换​
​
(dts/map-column COLUMN FUNCTION)​
​
无返回类型。​
重命名字段​
  • 将列 oldCol 重命名为 newCol,且不保留原字段:​
  • ​
    (dts/rename-column "oldCol" "newCol")​
    ​
  • 将列 oldCol 重命名为 newCol,保留原字段:​
  • ​
    (dts/rename-column "oldCol" "newCol" true)​
    ​
无返回类型。​
过滤某列​
​
(dts/drop-column COLUMN)​
​
无返回类型。​
设置指定列为主键,尤其在异构表同步场景下修改主键列​
​
(dts/use-index "column1" "column2")​
​
无返回类型。​
(语法糖)对某个表执行某些操作​
​
(dts/match-table TABLE EXPRESSIONS)​
​
无返回类型。​
(语法糖)如果是对表的 INSERT 操作则执行某些操作​
​
(dts/match-insert-on-table TABLE EXPRESSIONS)​
​
无返回类型。​
(语法糖)如果是对表的 UPDATE 操作则执行某些操作​
​
(dts/match-update-on-table TABLE EXPRESSIONS)​
​
无返回类型。​
(语法糖)如果是对表的 DELETE 操作则执行某些操作​
​
(dts/match-delete-on-table TABLE EXPRESSIONS)​
​
无返回类型。​
(语法糖)如果是 DML 事件执行某些操作​
​
(dts/match-dml-on-table TABLE EXPRESSIONS)​
​
无返回类型。​
(语法糖)正则匹配某个表(不带库名匹配)并执行某些操作​
​
(dts/match-table-regexp TABLE EXPRESSIONS)​
​
无返回类型。​
(语法糖)正则匹配某个表(带库名匹配)并执行某些操作​
​
(dts/match-db-table-regexp DBTABLE EXPRESIONS)​
​
无返回类型。​
​
MySQL 字段类型​
MySQL 的字段类型在 DSL 语法中对应的类型如下表所示。​
​
MySQL 字段类型​
示例​
DSL 字段类型​
示例​
bit​
​
b'111'​
​
bytes​
​
0B07​
​
tinyint​
​
3​
​
int​
​
3​
​
bool​
​
true​
​
bool​
​
true​
​
smallint​
​
3​
​
int​
​
3​
​
mediumint​
​
3​
​
int​
​
3​
​
int​
​
3​
​
int​
​
3​
​
integer​
​
3​
​
int​
​
3​
​
bigint​
​
3​
​
int​
​
3​
​
bigint unsigned​
​
18446744073709551615​
​
int​
​
18446744073709551615​
​
decimal​
​
333.333​
​
float​
​
333.333​
​
dec​
​
333.333​
​
float​
​
333.333​
​
float​
​
1.1​
​
float​
​
1.1​
​
double​
​
1.1​
​
float​
​
1.1​
​
date​
​
'2001-01-01'​
​
string​
​
"2001-01-01"​
​
datetime​
​
'2001-01-01 01:01:01'​
​
string​
​
"2001-01-01 01:01:01"​
​
timestamp​
​
'2001-01-01 01:01:01'​
​
time​
​
(time/parse "2001-01-01 01:01:01")​
​
time​
​
'01:01:01'​
​
string​
​
"01:01:01"​
​
year​
​
2001​
​
int​
​
2001​
​
char​
​
'abc'​
​
string​
​
"abc"​
​
varchar​
​
'abc'​
​
string​
​
"abc"​
​
binary​
​
'abc'​
​
bytes​
​
0B616263​
​
varbinary​
​
'abc'​
​
bytes​
​
0B616263​
​
tinyblob​
​
'abc'​
​
bytes​
​
0B616263​
​
tinytext​
​
'abc'​
​
string​
​
"abc"​
​
blob​
​
'abc'​
​
bytes​
​
0B616263​
​
text​
​
'abc'​
​
string​
​
"abc"​
​
mediumblob​
​
'abc'​
​
bytes​
​
0B616263​
​
mediumtext​
​
'abc'​
​
string​
​
"abc"​
​
longblob​
​
'abc'​
​
bytes​
​
0B616263​
​
longtext​
​
'abc'​
​
string​
​
"abc"​
​
enum​
​
'a'​
​
int​
​
1​
​
set​
​
'a,b'​
​
int​
​
3​
​
geometry​
​
GeomFromText('POINT(1 1)')​
​
bytes​
​
0B000000000101000000000000000000f03f000000000000f03f​
​
point​
​
GeomFromText('POINT(1 1)')​
​
bytes​
​
0B000000000101000000000000000000f03f000000000000f03f​
​
linestring​
​
GeomFromText('LINESTRING(0 0,1 1,2 2)')​
​
bytes​
​
0B000000000101000000000000000000f03f000000000000f03f​
​
polygon​
​
GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))')​
​
bytes​
​
0B000000000101000000000000000000f03f000000000000f03f​
​
multipoint​
​
GeomFromText('MULTIPOINT(1 1,2 2)')​
​
bytes​
​
0B000000000101000000000000000000f03f000000000000f03f​
​
multilinestring​
​
GeomFromText('MULTILINESTRING((0 0,1 1,2 2),(0 0,2 2,4 4))')​
​
bytes​
​
0B000000000101000000000000000000f03f000000000000f03f​
​
multipolygon​
​
GeomFromText(‘MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5)))’)​
​
bytes​
​
0B000000000101000000000000000000f03f000000000000f03f​
​
geometrycollection​
​
GeomFromText('GEOMETRYCOLLECTION(POINT(2 1),LINESTRING(0 0,1 1,2 2,3 3,4 5))')​
​
bytes​
​
0B000000000101000000000000000000f03f000000000000f03f​
​
json​
​
'{"key":"value"}'​
​
string​
​
"{\"key\": \"value\"}"​
​
​
相关文档​
​
最近更新时间:2026.03.16 16:04:09
这个页面对您有帮助吗?
有用
有用
无用
无用