本文将向您介绍可在Flink CDC数据摄入作业的Transform模块表达式中使用的内置函数。
内置函数
Flink CDC数据摄入作业提供了丰富的内置函数,可以直接在transform模块中的projection和filter表达式中使用。
算术函数
函数 | 说明 |
numeric1 + numeric2 | 返回numeric1加上numeric2的值。 |
numeric1 - numeric2 | 返回numeric1减去numeric2的值。 |
numeric1 * numeric2 | 返回numeric1乘以numeric2的值。 |
numeric1 / numeric2 | 返回numeric1除以numeric2的值。 |
numeric1 % numeric2 | 返回numeric1对numeric2取模的值。 |
ABS(numeric) | 返回numeric的绝对值。 |
CEIL(numeric) | 返回numeric向上取整的值。 |
FLOOR(numeric) | 返回numeric向下取整的值。 |
ROUND(numeric, int) | 返回numeric四舍五入到小数点后n位的值。 |
UUID() | 生成一个全局唯一ID(UUID)字符串(例如“3d3c68f7-f608-473f-b60c-b0c44ad4cc4e”)。 使用RFC 4122 type 4方法伪随机生成。 |
时间函数
函数 | 说明 |
LOCALTIME | 返回当前时区下的本地时间,返回类型为 |
LOCALTIMESTAMP | 返回当前时区下的本地时间戳,返回类型为 |
CURRENT_TIME | 返回当前时区下的本地时间,与LOCAL_TIME相同。 |
CURRENT_DATE | 返回当前时区下的本地日期。 |
CURRENT_TIMESTAMP | 返回当前时区下的本地时间戳。返回类型为 |
NOW() | 返回当前时区下的本地时间戳,与CURRENT_TIMESTAMP相同。 |
DATE_FORMAT(timestamp, string) | 将传入的时间戳按指定的格式化字符串string进行格式化。 说明 格式化字符串与Java中的SimpleDateFormat格式兼容。 |
TIMESTAMP_ADD(timeintervalunit, interval, timepoint) | 计算timepoint加上interval(单位timeintervalunit)之后的时间点。 timeintervalunit可被指定为SECOND、MINUTE、HOUR、DAY、MONTH或YEAR。 |
TIMESTAMP_DIFF(timepointunit, timepoint1, timepoint2) | 计算timepoint1和timepoint2之间差距多少timepointunit单位。 timepointunit可被指定为SECOND、MINUTE、HOUR、DAY、MONTH或YEAR。 |
TO_DATE(string1[, string2]) | 将传入的日期字符串string1按string2指定的格式转化为DATE类型。 说明 在不指定格式化字符串string2时,默认采用 |
TO_TIMESTAMP(string1[, string2]) | 将传入的时间戳字符串string1按string2指定的格式转化为不带时区信息的TIMESTAMP类型。 说明 在不指定格式化字符串string2时,默认采用 |
FROM_UNIXTIME(numeric[, string]) | 将第一个参数作为UTC时区下1970-01-01 00:00:00后经过的秒数转换为时间戳,并根据第二个参数,返回一个指定格式的时间戳字符串。 说明 在不指定格式化字符串string时,默认采用 |
UNIX_TIMESTAMP() | 返回当前时间下的UNIX时间戳秒数。 |
UNIX_TIMESTAMP(string1[, string2]) | 将给定的日期时间字符串string1转换为另一个日期时间格式string2。 |
在进行projection和filter表达式求值时,可以保证其中每个子表达式所得到的时间点都一致。例如,NOW() AS t1, NOW() AS t2, NOW() AS t3
得到的t1
、t2
、t3
一定对应同一个时间戳,无论其求值时间和顺序如何。
字符串函数
函数 | 说明 |
string1 || string2 | 返回string1和string2拼接而成的字符串。 说明 此运算符与逻辑或运算符不同。 |
CHAR_LENGTH(string) | 返回string字符串中的字符数。 |
UPPER(string) | 返回string的大写形式字符串。 |
LOWER(string) | 返回string的小写形式字符串。 |
TRIM(string1) | 删除string两侧的空白字符。 |
REGEXP_REPLACE(string1, string2, string3) | 将string1中所有满足string2模式的子串替换为string3。 例如, |
SUBSTRING(string FROM integer1 [ FOR integer2 ]) | 返回string从第integer1到第integer2个字符的子串。 说明 在不提供 |
CONCAT(string1, string2,…) | 返回将string1、string2、…拼接在一起形成的新字符串。 例如, |
类型转换函数
您可以使用 CAST(<表达式> AS <类型>)
语法进行显式强制类型转换。目前支持以下转换路径:
源类型 | 目标类型 | 说明 |
任何 | VARCHAR 重要 目前不可使用 | 任何类型的字段均可被转换为字符串。 |
NUMERIC STRING | BOOLEAN | 任何非数字0或FALSE字符串的字面量均会被转换为TRUE。 |
NUMERIC STRING | TINYINT | 结果会被截断到-128到127范围内。 |
NUMERIC STRING | SMALLINT | 结果会被截断到-32768到32767范围内。 |
NUMERIC STRING | INTEGER | 结果会被截断到-2147483648到2147483647范围内。 |
NUMERIC STRING | BIGINT | 结果会被截断到-9223372036854775808到9223372036854775807范围内。 |
NUMERIC STRING | FLOAT | |
NUMERIC | DOUBLE | |
NUMERIC | DECIMAL | |
STRING TIMESTAMP_TZ TIMESTAMP_LTZ | TIMESTAMP | 字符串必须为合法的ISO_LOCAL_DATE_TIME格式。 |
比较函数
除非特别说明,否则以下内置函数在输入参数包含NULL时均返回NULL。
函数 | 说明 |
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。 |
value IS NULL | 如果value是NULL,则返回TRUE;否则返回FALSE。 |
value IS NOT NULL | 如果value不是NULL,则返回TRUE;否则返回FALSE。 |
value1 BETWEEN value2 AND value3 | 如果value1的值介于value2和value3之间,则返回TRUE;否则返回FALSE。 |
value1 NOT BETWEEN value2 AND value3 | 如果value1的值并非介于value2和value3之间,则返回TRUE;否则返回FALSE。 |
string1 LIKE string2 | 如果string1的值与string2定义的模式匹配,则返回TRUE;否则返回FALSE。 |
string1 NOT LIKE string2 | 如果string1的值与string2定义的模式不匹配,则返回TRUE;否则返回FALSE。 |
value1 IN (value2 [, value3]* ) | 如果value1的值存在于[value2, value3, ...]列表中,则返回TRUE;否则返回FALSE。 |
value1 NOT IN (value2 [, value3]* ) | 如果value1的值不存在于[value2, value3, ...]列表中,则返回TRUE;否则返回FALSE。 |
逻辑函数
函数 | 说明 |
boolean1 OR boolean2 | 如果boolean1和boolean2至少有一个为TRUE,则返回TRUE。 |
boolean1 AND boolean2 | 如果boolean1和boolean2均为TRUE,则返回TRUE。 |
NOT boolean | 如果boolean为TRUE,则返回FALSE;如果boolean是FALSE,则返回TRUE。 |
boolean IS FALSE | 如果boolean为TRUE,则返回FALSE;如果boolean是FALSE,则返回TRUE。 |
boolean IS NOT FALSE | 如果boolean为TRUE,则返回TRUE;如果boolean是FALSE,则返回FALSE。 |
boolean IS TRUE | 如果boolean为TRUE,则返回TRUE;如果boolean是FALSE,则返回FALSE。 |
boolean IS NOT TRUE | 如果boolean为TRUE,则返回FALSE;如果boolean是FALSE,则返回TRUE。 |
条件函数
函数 | 说明 |
CASE value WHEN value1_1 [, value1_2]* THEN RESULT1 (WHEN value2_1 [, value2_2 ]* THEN result_2)* (ELSE result_z) END | 依次检查value值是否等于WHEN子句给出的值,并返回第一个相等子句的RESULT值。 如果没有任何子句满足条件,则返回ELSE子句指定的值。如果没有指定ELSE子句,则返回NULL。 |
CASE WHEN condition1 THEN result1 (WHEN condition2 THEN result2)* (ELSE result_z) END | 依次检查value值是否满足每个WHEN子句给出的条件,并返回第一个满足条件子句的RESULT值。 如果没有任何子句满足条件,则返回ELSE子句指定的值。如果没有指定ELSE子句,则返回NULL。 |
COALESCE(value1 [, value2]*) | 返回[value1、value2、……]列表中第一个不为NULL的元素。如果列表中所有元素均为NULL,则返回NULL。 |
IF(condition, true_value, false_value) | 如果condition子句对应的条件为真,则返回true_value;否则返回false_value。 |