最近更新时间:2024.03.20 19:41:21
首次发布时间:2022.09.16 09:57:28
DSL 是数据库传输服务 DTS 基于 LISP-1 标准为数据同步场景中数据处理需求设计的脚本语言。DTS 通过 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") |
类型 | 表达式 | 说明 |
---|---|---|
数组 |
| 数组以方括号包裹的一串元素。例如:
|
哈希 |
| 哈希是以花括号包裹的一串元素。奇数位元素为 key,紧随其后的偶数位元素为 value。例如:
表示 |
函数调用 |
| 函数调用是括号包括的一串元素。例如:
|
Quoting |
| 使用单引号
|
函数定义 |
| 使用
|
变量绑定 |
| 使用关键字
返回 |
火山引擎支持 DTS 基于 ETL 开发出以下 DSL 脚本语言。
表达式函数
数值运算
功能 | 语法 | 取值范围 | 返回值 |
---|---|---|---|
加法 |
| value1 和 value2 的取值范围包含整数或浮点数。 | 当参数都为整数时,则返回整数,否则返回浮点数。 |
减法 |
| value1 和 value2 的取值范围包含整数或浮点数。 | 当参数都为整数时,则返回整数,否则返回浮点数。 |
乘法 |
| value1 和 value2 的取值范围包含整数或浮点数。 | 当参数都为整数时,则返回整数,否则返回浮点数。 |
除法 |
| value1 和 value2 的取值范围包含整数或浮点数。 | 当参数都为整数时,则返回整数,否则返回浮点数。 |
取模 |
| value1 和 value2 的取值范围包含整数或浮点数。 | 当参数都为整数时,则返回整数,否则返回浮点数。 |
逻辑运算
比较运算
功能 | 语法 | 取值范围 | 返回值 |
---|---|---|---|
大于 |
| value1 和 value2 的取值范围包含整数、浮点数或字符串。 |
|
小于 |
| value1 和 value2 的取值范围包含整数、浮点数或字符串。 |
|
等于 |
| value1 和 value2 的取值范围包含整数、浮点数或字符串。 |
|
大于等于 |
| value1 和 value2 的取值范围包含整数、浮点数或字符串。 |
|
小于等于 |
| value1 和 value2 的取值范围包含整数、浮点数或字符串。 |
|
不等于 |
| value1 和 value2 的取值范围包含整数、浮点数或字符串。 |
|
布尔运算
功能 | 语法 | 取值范围 | 返回值 |
---|---|---|---|
OR运算 |
|
|
返回 |
AND 运算 |
|
|
返回 |
NOT 运算 |
|
|
|
字符串函数
功能 | 语法 | 返回值 |
---|---|---|
获取字符串中某个索引位置的字符 |
| 返回索引位置的字符。例如:
返回 |
向字符串追加字符。 |
| 返回添加后的字符串。例如:
返回 |
返回字符串的子串 |
| 返回一个包含从 from 到 to(不包含 to)的子字符串的字符串。例如:
返回 |
字符串间的格式转换 |
| 字符串转换成 int 或 float 格式。例如:
|
流程控制函数
功能 | 语法 | 说明 |
---|---|---|
cond 语句 |
|
当 |
if 或 when 语句 |
| if 和 when 的语法表达式具有相同含义,满足条件时则执行某些操作。例如:
返回 |
unless语句 |
| 和 if 相反,不满足条件的则执行操作。例如:
返回 |
数据操作函数
数组函数
功能 | 语法 | 返回值 |
---|---|---|
创建指定长度的数组,或创建指定长度的数组并以指定值初始化 |
| 返回指定长度的数组,或指定长度的数组并以指定值初始化。例如:
|
按数组索引访问数组 |
| 返回索引所在的数组。例如:
返回 |
设置数组元素值 |
| 替换索引位置的值。例如:
返回 |
判断数组内是否包含某个元素 |
| 返回值为 true 或 false。判断数组内是否包含某个元素。例如:
返回 |
获取数组的子数组 |
| 返回字符串的子数组,返回值为 [from to)。例如:
返回 |
哈希函数
功能 | 语法 | 返回值 |
---|---|---|
访问 hash 元素 |
| 返回访问 hash 元素。例如:
|
设置 hash 元素 |
| 返回成功设置后的 hash 元素。例如
返回 |
删除 hash 元素 |
| 返回删除后的 hash 元素。例如:
返回 |
探测 hash 是否包含 key |
| 返回值如下:
示例如下:
返回 |
通用容器函数
功能 | 语法 | 说明 |
---|---|---|
在字符串或数组后添加元素 |
| 返回一个新的数组或字符串。例如:
|
连接多个数组或字符串 |
| 返回一个新的数组或字符串。例如:
|
字节流函数
功能 | 语法 | 返回值 |
---|---|---|
将字节流转换为字符串 |
| 返回一个字符串。例如:
返回 |
将字符串转换为字节流 |
| 返回一个字节流。例如:
返回 |
高阶函数
功能 | 语法 | 返回值 |
---|---|---|
将函数应用到列表或数组内每一个元素 |
| 返回数组中每个元素被应用指定函数的数组或列表。例如:
返回一个新的数组
返回一个新的数组 |
使用指定的函数过滤数组 |
| 当过滤函数返回
返回结果为 |
对数组或列表进行聚合操作 |
| 返回数组或列表的聚合结果。例如:
返回结果为 |
类型自省
功能 | 语法 | 返回值 |
---|---|---|
零值判断 | zero? | 当目标参数为 0 、0.0 时,则返回 true ,否则返回 false 。 |
NULL 判断 | null? | 当目标参数为 () 时,则返回 true ,否则返回 false 。 |
空判断 | empty? | 当目标参数为 |
是否为 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 时,则返回 |
表达式扩展函数
运算扩展函数
功能 | 语法 | 返回值 |
---|---|---|
代数左移 |
| 返回代数左移后的结果。例如:
返回 |
代数右移 |
| 返回代数右移后的结果。例如:
返回 |
8bit 逻辑左移 |
| 返回 8bit 逻辑左移后的结果。例如:
返回
返回 |
16bit 逻辑左移 |
| 返回 16bit 逻辑左移后的结果。例如:
返回
返回 |
32bit 逻辑左移 |
| 返回 32bit 逻辑左移后的结果。例如:
|
64bit 逻辑左移 |
| 返回 64bit 逻辑左移的结果。例如:
返回
返回 |
8bit 逻辑右移 |
| 返回 8bit 逻辑右移的结果。例如:
|
16bit 逻辑右移 |
| 返回 16bit 逻辑右移的结果。
|
32bit 逻辑右移 |
| 返回 32bit 逻辑右移的结果。例如:
|
64bit 逻辑右移 |
| 返回 64bit 逻辑右移的结果。例如:
|
bit 与 |
| 返回 bit 与的结果。例如:
返回 |
bit 或 |
| 返回 bit 或的结果。例如:
返回 |
bit 异或 |
| 返回 bit 异或的结果。例如:
返回 |
bit 取非 |
| 返回 bit 取非的结果。例如:
返回 |
时间扩展函数
功能 | 语法 | 返回值 |
---|---|---|
返回当前时间 |
| 返回当前时间。例如:
返回结果为当前的时间点。 |
格式化时间 |
| 支持将时间转换为 unix 时间戳,单位为秒或毫秒,也支持将时间按指定格式转换为字符串。例如:
|
时间解析 |
| 返回时间解析结果。例如:
|
北京时间解析 |
|
|
时间计算 |
| 返回计算后的时间。例如:
返回在当前时间的基础上,年份加 1 年、月份加 2 个月、日加 3 天。 |
| 返回计算后的时间。例如:
| |
| 返回 time1 和 time2 的时间差值,单位为秒。 | |
返回年份 |
| 返回时间的年份。例如:
返回当前时间的年份。 |
返回月份 |
| 返回时间的月份。例如:
返回当前时间的月份。 |
返回日 |
| 返回时间的日。例如:
返回当前时间的日。 |
返回小时 |
| 返回时间的小时。例如:
返回当前时间的小时。 |
返回分钟 |
| 返回时间的分钟。例如:
返回当前时间的分钟。 |
返回秒数 |
| 返回时间的秒数。例如:
返回当前时间的秒数。 |
返回星期数 |
| 返回时间的星期数。例如:
返回当前时间的星期数。 |
字符串扩展函数
功能 | 语法 | 返回值 |
---|---|---|
验证是否包含字符串 |
| 返回值如下:
例如:
返回 |
查询子字符串的数量 |
| 返回在字符串内包含多少个子字符串。例如:
返回 |
验证字符串是否以某个子串为前缀 |
| 返回值如下:
例如:
返回 |
验证字符串是否以某个子串为后缀 |
| 返回值如下:
例如:
返回 |
返回某个目标字符在字符内第一次出现时的下标 |
| 返回该字符在字符串的下标。例如:
返回 |
验证字符串是否都是字母 |
| 返回值如下:
例如:
返回 |
验证字符串是否都是数字 |
| 返回值如下:
例如:
返回 |
拼接字符串 |
| 返回字符串的拼接结果,支持任意拼接符拼接字符串。例如:
返回 |
将字符串内的大写字母转换为小写字母 |
| 返回转换为小写字母的字符串。例如:
返回 |
将字符串内的小写字母转换为大写字母 |
| 返回转换为大写字母的字符串。例如:
返回 |
替换字符串内的子串 |
| 返回替换后的字符串。例如:
返回 |
分割字符串 |
| 返回分割后的数组,需指定字符串间的拼接符分割字符串,字符串支持任意拼接符拼接。例如:
返回 |
将字符串的首字母转换为大写字母 |
| 返回转换后的字符串。例如:
返回 |
验证字符串的首字母是否为大写字母 |
| 返回值如下:
例如:
返回 |
删除字符串前缀 |
| 返回删除了前缀的字符串。例如:
返回 |
删除字符串后缀 |
| 返回删除了后缀的字符串。例如:
返回 |
删除字符串的前后空格 |
| 返回删除了前后空格后的字符串。例如:
返回 |
计算字符串的 MD5 值 |
| 返回字符串的 MD5 值。例如;
返回 |
脱敏字符串的敏感信息 |
| 返回脱敏后的字符串,支持任意字符进行脱敏。例如;
|
数据操作扩展函数
内核扩展函数
功能 | 语法 | 返回值 |
---|---|---|
设置函数别名 |
| 为原函数设置别名。例如:
当使用加法运算时,您可以通过以下语法进行加法运算:
返回 |
打印函数 |
| 输出函数。例如:
|
JSON 扩展函数
功能 | 语法 | 返回值 |
---|---|---|
将 JSON 对象转换为字符串 |
| 返回成功转换后的字符串。例如:
返回 |
将字符串转换为 JSON 对象 |
| 返回成功转换后的 JSON 对象。例如:
返回 |
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 编码 |
| 返回转换成功的 Base64。例如:
返回 |
功能 | 语法 | 返回值 |
---|---|---|
删除当前记录 |
| 删除当前数据行,无返回结果。 |
查询当前记录是否已被丢弃 |
| 返回类型为 bool。 |
返回当前记录的数据库的名称 |
| 返回类型为 string。 |
返回当前记录的表格的名称 |
| 返回类型为 string。 |
返回当前记录的事件类型 |
| 返回类型为 string。支持以下事件类型:
|
返回当前记录的 DML 类型 |
| 返回类型为 string。支持以下 DML 类型:
|
设置 Tag |
| 无返回类型。 |
查询记录的某列是否为 null |
| 返回类型为 bool。 |
查询记录的某列是否存在 |
| 返回类型为 bool。 |
验证当前事件是否是 DDL 事件 |
| 返回类型为 bool。 |
验证当前事件是否是 DML 事件 |
| 返回类型为 bool。 |
验证当前事件是否是 DML UPDATE |
| 返回类型为 bool。 |
验证当前事件是否是 DML DELETE |
| 返回类型为 bool。 |
验证当前事件是否是 DML INSERT |
| 返回类型为 bool。 |
返回记录的某个字段值 |
| 返回的字段类型支持 string、int、bool 或 float 等。 说明 当该列不存在或为空时,则给定默认值 DEFAULT。 |
返回当前记录所有字段名 |
| 返回类型为字符串数组。 |
设置字段值 |
| 无返回类型。 |
使用指定函数对某列值做变换 |
| 无返回类型。 |
过滤某列 |
| 无返回类型。 |
(语法糖)对某个表执行某些操作 |
| 无返回类型。 |
(语法糖)如果是对表的 INSERT 操作则执行某些操作 |
| 无返回类型。 |
(语法糖)如果是对表的 UPDATE 操作则执行某些操作 |
| 无返回类型。 |
(语法糖)如果是对表的 DELETE 操作则执行某些操作 |
| 无返回类型。 |
(语法糖)如果是 DML 事件执行某些操作 |
| 无返回类型。 |
(语法糖)正则匹配某个表(不带库名匹配)并执行某些操作 |
| 无返回类型。 |
(语法糖)正则匹配某个表(带库名匹配)并执行某些操作 |
| 无返回类型。 |
MySQL 的字段类型在 DSL 语法中对应的类型如下表所示。
MySQL 字段类型 | 示例 | DSL 字段类型 | 示例 |
---|---|---|---|
bit |
| bytes |
|
tinyint |
| int |
|
bool |
| bool |
|
smallint |
| int |
|
mediumint |
| int |
|
int |
| int |
|
integer |
| int |
|
bigint |
| int |
|
bigint unsigned |
| int |
|
decimal |
| float |
|
dec |
| float |
|
float |
| float |
|
double |
| float |
|
date |
| string |
|
datetime |
| string |
|
timestamp |
| time |
|
time |
| string |
|
year |
| int |
|
char |
| string |
|
varchar |
| string |
|
binary |
| bytes |
|
varbinary |
| bytes |
|
tinyblob |
| bytes |
|
tinytext |
| string |
|
blob |
| bytes |
|
text |
| string |
|
mediumblob |
| bytes |
|
mediumtext |
| string |
|
longblob |
| bytes |
|
longtext |
| string |
|
enum |
| int |
|
set |
| int |
|
geometry |
| bytes |
|
point |
| bytes |
|
linestring |
| bytes |
|
polygon |
| bytes |
|
multipoint |
| bytes |
|
multilinestring |
| bytes |
|
multipolygon |
| bytes |
|
geometrycollection |
| bytes |
|
json |
| string |
|