Flink CDC内置函数

更新时间:
复制为 MD 格式

本文将向您介绍可在Flink CDC数据摄入作业的Transform模块表达式中使用的内置函数。

内置函数

Flink CDC数据摄入作业提供了丰富的内置函数,可以直接在transform模块中的projectionfilter表达式中使用。

算术函数

函数

说明

numeric1 + numeric2

返回numeric1加上numeric2的值。

numeric1 - numeric2

返回numeric1减去numeric2的值。

numeric1 * numeric2

返回numeric1乘以numeric2的值。

numeric1 / numeric2

返回numeric1除以numeric2的值。

numeric1 % numeric2

返回numeric1numeric2取模的值。

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

返回当前时区下的本地时间,返回类型为TIME(0)

LOCALTIMESTAMP

返回当前时区下的本地时间戳,返回类型为TIMESTAMP(3)

CURRENT_TIME

返回当前时区下的本地时间,与LOCALTIME相同。

CURRENT_DATE

返回当前时区下的本地日期。

CURRENT_TIMESTAMP

返回当前时区下的本地时间戳。返回类型为TIMESTAMP_LTZ(3)

NOW()

返回当前时区下的本地时间戳,与CURRENT_TIMESTAMP相同。

DATE_FORMAT(timestamp, string)

将传入的时间戳按指定的格式化字符串string进行格式化。

说明

格式化字符串与Java中的SimpleDateFormat格式兼容。

DATE_FORMAT_TZ(timestamp, string)

将传入的时间格式化为给定时区的字符串。

说明
  1. 格式化字符串与Java中的SimpleDateFormat格式兼容。

  2. 转换后的字符串格式为yyyy-MM-dd HH:mm:ss。

DATE_FORMAT_TZ(timestamp, string1[, string2])

将传入的时间转换为格式string1并且时区信息为string2的字符串。

说明

格式化字符串与Java中的SimpleDateFormat格式兼容。

TIMESTAMPADD(timeintervalunit, interval, timepoint)

计算timepoint加上interval(单位timeintervalunit)之后的时间点。

timeintervalunit可被指定为SECOND、MINUTE、HOUR、DAY、MONTHYEAR。

DATE_ADD(timestamp, integer, string)

将传入的第一个参数timestamp(如果是无时区的时间,转换为第三个参数string对应时区的本地时间)添加第二个参数integer对应的天数后,转换为yyyy-MM-dd格式的字符串。

TIMESTAMPDIFF(timepointunit, timepoint1, timepoint2)

计算timepoint1timepoint2之间差距多少timepointunit单位。

timepointunit可被指定为SECOND、MINUTE、HOUR、DAY、MONTHYEAR。

TO_DATE(string1[, string2])

将传入的日期字符串string1string2指定的格式转化为DATE类型。

说明

在不指定格式化字符串string2时,默认采用yyyy-MM-dd格式。如果上游数据格式与默认格式不一致(例如MySQLDATETIME类型,格式为yyyy-MM-dd HH:mm:ss),必须通过string2显式指定实际格式,否则将导致解析结果错误(例如返回1970-01-01)。

TO_TIMESTAMP(string1[, string2])

将传入的时间戳字符串string1string2指定的格式转化为不带时区信息的TIMESTAMP类型。

说明

在不指定格式化字符串string2时,默认采用yyyy-MM-ddHH:mm:ss格式。

TO_TIMESTAMP_LTZ(string1[, string2][, string3])

将传入的时间戳字符串string1string2指定的格式转化为时区为string3TIMESTAMP_LTZ类型。

说明
  1. 在不指定格式化字符串string2时,默认采用yyyy-MM-dd HH:mm:ss.SSS格式。

  2. 在不指定时区字符串string3时,默认采用UTC时区。

TO_TIMESTAMP_LTZ(bigint[, integer])

将传入的第一个参数(时间戳)转化为精度为第二个参数的TIMESTAMP_LTZ类型。

说明

第二个参数可以填写为0或者3。

FROM_UNIXTIME(numeric[, string])

将第一个参数作为UTC时区下1970-01-01 00:00:00后经过的秒数转换为时间戳,并根据第二个参数,返回一个指定格式的时间戳字符串。

说明

在不指定格式化字符串string时,默认采用yyyy-MM-ddHH:mm:ss格式。

UNIX_TIMESTAMP()

返回当前时间下的UNIX时间戳秒数。

UNIX_TIMESTAMP(string1[, string2])

将给定的日期时间字符串string1转换为另一个日期时间格式string2。

说明

在进行projectionfilter表达式求值时,可以保证其中每个子表达式所得到的时间点都一致。例如,NOW() AS t1, NOW() AS t2, NOW() AS t3得到的t1t2t3一定对应同一个时间戳,无论其求值时间和顺序如何。

字符串函数

函数

说明

string1 || string2

返回string1string2拼接而成的字符串。

说明

此运算符与逻辑或运算符不同。

CHAR_LENGTH(string)

返回string字符串中的字符数。

UPPER(string)

返回string的大写形式字符串。

LOWER(string)

返回string的小写形式字符串。

TRIM(string1)

删除string两侧的空白字符。

REGEXP_REPLACE(string1, string2, string3)

string1中所有满足string2模式的子串替换为string3。

例如,REGEXP_REPLACE('foobar', 'oo|ar', '__')求值的结果为 f__b__

SUBSTRING(string FROM integer1 [ FOR integer2 ])

返回string从第integer1到第integer2个字符的子串。

说明

在不提供FOR integer2语句时,默认提取到字符串尾部。

CONCAT(string1, string2,…)

返回将string1、string2、…拼接在一起形成的新字符串。

例如,CONCAT('AA', 'BB', 'CC')求值的结果为AABBCC

类型转换函数

您可以使用 CAST(<表达式> AS <类型>)语法进行显式强制类型转换。目前支持以下转换路径:

源类型

目标类型

说明

任何

VARCHAR

重要

目前不可使用 STRING 作为目的类型,请使用等价的 VARCHAR 类型。

任何类型的字段均可被转换为字符串。

NUMERIC

STRING

BOOLEAN

任何非数字0FALSE字符串的字面量均会被转换为TRUE。

NUMERIC

STRING

TINYINT

结果会被截断到-128127范围内。

NUMERIC

STRING

SMALLINT

结果会被截断到-3276832767范围内。

NUMERIC

STRING

INTEGER

结果会被截断到-21474836482147483647范围内。

NUMERIC

STRING

BIGINT

结果会被截断到-92233720368547758089223372036854775807范围内。

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

如果valueNULL,则返回TRUE;否则返回FALSE。

value IS NOT NULL

如果value不是NULL,则返回TRUE;否则返回FALSE。

value1 BETWEEN value2 AND value3

如果value1的值介于value2value3之间,则返回TRUE;否则返回FALSE。

value1 NOT BETWEEN value2 AND value3

如果value1的值并非介于value2value3之间,则返回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

如果boolean1boolean2至少有一个为TRUE,则返回TRUE。

boolean1 AND boolean2

如果boolean1boolean2均为TRUE,则返回TRUE。

NOT boolean

如果booleanTRUE,则返回FALSE;如果booleanFALSE,则返回TRUE。

boolean IS FALSE

如果booleanTRUE,则返回FALSE;如果booleanFALSE,则返回TRUE。

boolean IS NOT FALSE

如果booleanTRUE,则返回TRUE;如果booleanFALSE,则返回FALSE。

boolean IS TRUE

如果booleanTRUE,则返回TRUE;如果booleanFALSE,则返回FALSE。

boolean IS NOT TRUE

如果booleanTRUE,则返回FALSE;如果booleanFALSE,则返回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。

Variant 函数

自实时计算引擎 VVR 11.6 版本开始,您可以在数据摄入作业中使用Variant函数。

函数

说明

PARSE_JSON(json_string[, allow_duplicate_keys])

将 JSON 字符串解析为 Variant。如果 JSON 字符串无效,将抛出错误。如果希望返回 NULL 而不是抛出错误, 请使用 TRY_PARSE_JSON 函数。

如果输入的 JSON 字符串中存在重复的键,当 allowDuplicateKeys 为 true 时,解析器会保留最后一个出现的具有相 同键的字段,否则当 allowDuplicateKeys 为 false 时,它会抛出一个错误。默认情况下, allowDuplicateKeys 的值为 false。

TRY_PARSE_JSON(json_string[, allow_duplicate_keys])

尽可能将 JSON 字符串解析为 Variant。如果 JSON 字符串无效,则返回 NULL。如果希望抛出错误而不是返回 NULL, 请使用 PARSE_JSON 函数。

如果输入的 JSON 字符串中存在重复的键,当 allowDuplicateKeys 为 true 时,解析器会保留最后一个出现的具有相 同键的字段,否则当 allowDuplicateKeys 为 false 时,它会抛出一个错误。默认情况下, allowDuplicateKeys 的值为 false。

哈希函数

自实时计算引擎 VVR 11.6 版本开始,您可以在数据摄入作业中使用哈希函数。

函数

说明

MD5(string)

以 32 位十六进制数字的字符串形式返回 string 的 MD5 哈希值;如果字符串为 NULL,则返回 NULL

SHA1(string)

以 40 位十六进制数字的字符串形式返回 string 的 SHA-1 哈希值;如果字符串为 NULL,则返回 NULL

SHA224(string)

以 56 位十六进制数字的字符串形式返回 string 的 SHA-224 哈希值;如果字符串为 NULL,则返回 NULL

SHA256(string)

以 64 位十六进制数字的字符串形式返回 string 的 SHA-256 哈希值;如果字符串为 NULL,则返回 NULL

SHA384(string)

以 96 位十六进制数字的字符串形式返回 string 的 SHA-384 哈希值;如果字符串为 NULL,则返回 NULL

SHA512(string)

以 128 位十六进制数字的字符串形式返回 string 的 SHA-512 哈希值;如果字符串为 NULL,则返回 NULL

SHA2(string, hashLength)

使用 SHA-2 系列散列函数(SHA-224,SHA-256,SHA-384 或 SHA-512)返回散列值。第一个参数 string 是要散列的字符串, 第二个参数 hashLength 是结果的位数(224,256,384 或 512)。如果 string 或 hashLength 为 NULL,则返回 NULL

访问嵌套类型数据

自实时计算引擎 VVR 11.6 版本开始,对于 ARRAYMAPVARIANT 等嵌套类型的数据字段,您可以使用 [] 操作符访问其中的特定元素。

访问方式

假设存在一个名为 nest_col 的嵌套类型字段,根据其内部数据格式的不同,访问方式如下:

  1. 数组格式(ARRAY/VARIANT)
    说明:使用 nest_col[integer] 获取指定索引位置的元素(索引从 1 开始)。

    示例:若 nest_col 的值为 [{"id": 1, "name": "项目 A"}, {"id": 2, "name": "项目 B"}]

    操作:执行 nest_col[1],返回结果为 {"id": 1, "name": "项目 A"}

  2. 哈希表格式(MAP/VARIANT)

    说明:使用 nest_col[string] 获取指定键(Key)对应的值。

    示例:若 nest_col 的值为 {"id": 1, "name": "项目 A"}

    操作:执行 nest_col['id'],返回结果为 1

对于复杂的嵌套类型数据,您可以重复使用[] 操作符以访问内部深层次嵌套元素。

示例:若 nest_col 的值为 [{"id": 1, "name": "项目 A"}, {"id": 2, "name": "项目 B"}]

操作:执行 nest_col[1]['id'],返回结果为 1

返回类型

使用 [] 操作符获取其中的特定元素的返回类型取决于原始嵌套类型字段的内部类型:

  1. 原始字段的类型为ARRAY[T],内部类型为T
    使用 nest_col[integer] 获取指定索引位置元素的返回类型为T

  2. 原始字段的类型为MAP<K, V>,即键的类型为K,值的类型为T

    使用 nest_col[string] 获取指定键对应元素的返回类型为V

  3. 原始字段的类型为VARIANT

    使用 nest_col[integer]或者nest_col[string] 访问元素的返回类型始终为VARIANT