文档

支持的函数

更新时间:

本文为您介绍实时计算Flink版支持的所有内置函数。

支持的函数

Flink全托管VVR 3.0.0版本在Flink V1.12的基础上增加了部分内置函数,详情请参见标量函数表值函数聚合函数。下表展示的是Flink全托管在Flink V1.15版本的基础上支持的全部内置函数及简要说明。

不同Flink版本支持的函数可能会有差异,如果您需要查看函数详情及不同版本差异,请查看对应的文档链接,详情请参见Flink V1.12内置函数Flink V1.13内置函数Flink V1.14内置函数Flink V1.15内置函数Flink V1.16内置函数Flink V1.17内置函数

说明

如果内置函数中不存在您所需的函数,您可以通过自定义函数实现,自定义函数详情请参见自定义函数概述

标量函数

类别

函数

说明

比较函数

value1 = value2

如果value1等于value2返回true。

value1 <> value2

如果value1不等于value2返回true。

value1 > value2

如果value1大于value2返回true。

value1 >= value2

如果value1大于或等于value2返回true。

value1 < value2

如果value1小于value2返回true。

value1 <= value2

如果value1小于等于value2返回true。

value IS NULL

如果值为NULL返回true。

value IS NOT NULL

如果值不为NULL返回true。

value1 IS DISTINCT FROM value2

value1和value2的数据类型和值不相同,则返回true。所有NULL值视为彼此相等。

value1 IS NOT DISTINCT FROM value2

value1和value2的数据类型和值相同,则返回true。所有NULL值视为彼此相等。

value1 BETWEEN [ ASYMMETRIC | SYMMETRIC ] value2 AND value3

默认或使用ASYMMETRIC关键字的情况下,如果value1大于等于value2且小于等于value3返回true。

value1 NOT BETWEEN [ ASYMMETRIC | SYMMETRIC ] value2 AND value3

默认或使用ASYMMETRIC关键字的情况下,如果value1小于value2或大于 value3,则返回true。

string1 LIKE string2 [ ESCAPE char ]

如果string1匹配string2返回true。

string1 NOT LIKE string2 [ ESCAPE char ]

如果string1与string2不匹配返回true。

string1 SIMILAR TO string2 [ ESCAPE char ]

如果string1匹配SQL正则表达式string2返回true。

string1 NOT SIMILAR TO string2 [ ESCAPE char ]

如果string1与SQL正则表达式string2不匹配返回true。

value1 IN (value2 [, value3]* )

在给定列表 (value2, value3, …) 中存在 value1返回true。

value1 NOT IN (value2 [, value3]* )

在给定列表 (value2, value3, …) 中不存在value1返回true。

EXISTS (sub-query)

如果子查询至少返回一行则返回true。

value IN (sub-query)

如果value等于子查询结果集中的一行则返回true。

value NOT IN (sub-query)

如果value不包含于子查询返回的行则返回true。

逻辑函数

BITAND

使用BITAND函数进行按位与操作。

BITNOT

使用BITNOT函数进行按位取反。

BITOR

使用BITOR函数进行按位取或。

BITXOR

使用BITXOR函数进行按位取异或。

boolean1 OR boolean2

如果boolean1为true或boolean2为true返回true。

boolean1 AND boolean2

如果boolean1和boolean2都为true返回true。

NOT boolean

如果布尔值为FALSE返回true;如果布尔值为true返回FALSE;如果布尔值为UNKNOWN返回UNKNOWN。

boolean IS FALSE

如果布尔值为FALSE返回true;如果 boolean为true或UNKNOWN返回FALSE。

boolean IS NOT FALSE

如果boolean为true或UNKNOWN返回true;如果boolean为FALSE返回FALSE。

boolean IS TRUE

如果boolean为true返回true;如果 boolean为FALSE或UNKNOWN返回FALSE。

boolean IS NOT TRUE

如果boolean为FALSE或UNKNOWN返回true;如果布尔值为true返回FALSE。

boolean IS UNKNOWN

如果布尔值为UNKNOWN返回true;如果boolean为true或FALSE返回FALSE。

boolean IS NOT UNKNOWN

如果boolean为true或FALSE返回true;如果布尔值为UNKNOWN返回FALSE。

算术函数

+ numeric

返回numeric。

- numeric

返回numeric的相反数。

numeric1 + numeric2

返回numeric1加numeric2。

numeric1 - numeric2

返回numeric1减numeric2。

numeric1 * numberic2

返回numeric1乘以numeric2。

numeric1 / numeric2

返回numeric1除以numeric2。

numeric1 % numeric2

返回numeric1除以numeric2的余数。

POWER(numeric1, numeric2)

返回numeric1的numeric2次方。

ABS(numeric)

返回numeric的绝对值。

SQRT(numeric)

返回numeric的平方根。

LN(numeric)

返回numeric的自然对数(以e为底)。

LOG10(numeric)

返回以10为底的numeric的对数。

LOG2(numeric)

返回以2为底的numeric的对数。

LOG(numeric2) LOG(numeric1, numeric2)

当用一个参数调用时,返回 numeric2 的自然对数。当使用两个参数调用时,此函数返回 numeric2 以 numeric1 为底的对数。numeric2 必须大于 0,numeric1 必须大于 1。

EXP(numeric)

返回e的numeric次幂。

CEIL(numeric) CEILING(numeric)

向上取整,并返回大于或等于numeric的最小整数。

FLOOR(numeric)

向下取整,并返回小于或等于numeric的最大整数。

SIN(numeric)

返回numeric的正弦值。

SINH(numeric)

返回numeric的双曲正弦值。返回类型为 DOUBLE。

COS(numeric)

返回numeric的余弦值。

TAN(numeric)

返回numeric的正切值。

TANH(numeric)

返回numeric的双曲正切值。返回类型为 DOUBLE。

COT(numeric)

返回numeric的余切值。

ASIN(numeric)

返回numeric的反正弦值。

ACOS(numeric)

返回numeric的反余弦值。

ATAN(numeric)

返回numeric的反正切值。

ATAN2(numeric1, numeric2)

返回坐标 (numeric1, numeric2) 的反正切。

COSH(numeric)

返回numeric的双曲余弦值。返回值类型为DOUBLE。

DEGREES(numeric)

返回弧度numeric的度数表示。

RADIANS(numeric)

返回度数numeric的弧度表示。

SIGN(numeric)

返回numeric的符号。

ROUND(numeric, INT)

返回numeric四舍五入保留INT小数位的值。

PI()

返回无比接近pi的值。

E()

返回无比接近e的值。

RAND()

返回[0.0, 1.0) 范围内的伪随机双精度值。

RAND(INT)

返回范围为[0.0, 1.0) 的伪随机双精度值,初始种子为INT。

RAND_INTEGER(INT)

返回[0, INT) 范围内的伪随机整数。

RAND_INTEGER(INT1,INT2)

返回范围为[0, INT2) 的伪随机整数,初始种子为INT1。

UUID()

根据RFC 4122 类型 4(伪随机生成)UUID,返回UUID(通用唯一标识符)字符串。

BIN(INT)

以二进制格式返回INTEGER的字符串表示形式。

HEX(numeric) HEX(string)

以十六进制格式返回整数numeric值或 STRING的字符串表示形式。

TRUNCATE(numeric1,integer2)

返回截取integer2位小数的数字。

字符串函数

string1 || string2

返回STRING1和STRING2的连接。

CHAR_LENGTH(string) CHARACTER_LENGTH(string)

返回字符串中的字符数。

UPPER(string)

以大写形式返回字符串。

LOWER(string)

以小写形式返回字符串。

POSITION(string1 IN string2)

返回 STRING2 中第一次出现STRING1的位置(从 1 开始);如果在STRING2中找不到STRING1返回 0。

TRIM([ BOTH | LEADING | TRAILING ] string1 FROM string2)

返回从STRING2中删除以字符串STRING1开头、结尾或开头且结尾的字符串的结果。

处理TRAILING参数时,会移除字符串末尾的所有字符,直到遇到一个不在TRAILING参数中的字符为止。例如,TRIM(TRAILING 'fe' from 'abcdef')返回abcd。

LTRIM(string)

返回从STRING中删除左边空格的字符串。

RTRIM(string)

返回从STRING中删除右边空格的字符串。

REPEAT(string, int)

返回INT个string连接的字符串。

REGEXP_REPLACE

使用REGEXP_REPLACE函数,用目标字符串替换指定字符串,并返回新的字符串。

OVERLAY(string1 PLACING string2 FROM integer1 [ FOR integer2 ])

返回一个字符串,该字符串从位置INT1用 STRING2替换STRING1的INT2(默认为 STRING2的长度)字符。

SUBSTRING(string FROM integer1 [FOR integer2 ])

返回STRING从位置INT1开始,长度为INT2(默认到结尾)的子字符串。

REPLACE(string1,string2, string3)

返回一个新字符串,它用STRING1中的 STRING3(非重叠)替换所有出现的 STRING2。

REGEXP_EXTRACT(string1, string2[,integer])

将字符串STRING1按照STRING2正则表达式的规则拆分,返回指定INTEGER1处位置的字符串。

INITCAP(string)

返回新形式的 STRING,其中每个单词的第一个字符转换为大写,其余字符转换为小写。这里的单词表示字母数字的字符序列。

CONCAT(string1, string2, ...)

返回连接string1,string2, … 的字符串。如果有任一参数为NULL,则返回NULL。

CONCAT_WS(string1, string2, string3, ...)

返回将STRING2,STRING3, … 与分隔符 STRING1连接起来的字符串。

LPAD(string1, integer, string2)

返回从string1靠左填充string2到INT长度的新字符串。

RPAD(string1, integer, string2)

返回从string1靠右边填充string2到INT长度的新字符串。

FROM_BASE64(string)

返回字符串string1的base64解码的结果。

TO_BASE64(string)

返回字符串string的base64编码的结果。

ASCII(string)

返回字符串string第一个字符的数值。

CHR(integer)

返回二进制等于integer的ASCII字符。

DECODE(binary, string)

使用提供的字符集(US-ASCII、ISO-8859-1、UTF-8、UTF-16BE、UTF-16LE或UTF-16)解码。

ENCODE(string1, string2)

使用提供的字符集(US-ASCII、ISO-8859-1、UTF-8、UTF-16BE、UTF-16LE或UTF-16)编码。

INSTR(string1, string2)

返回string2在 string1中第一次出现的位置。

LEFT(string, integer)

返回字符串中最左边的长度为integer值的字符串。

RIGHT(string, integer)

返回字符串中最右边的长度为integer值的字符串。

LOCATE(string1, string2[, integer])

返回string2中string1在位置integer之后第一次出现的位置。

PARSE_URL

使用PARSE_URL函数,返回目标URL中指定部分解析后的值。

REGEXP

使用REGEXP函数,对指定的字符串执行一个正则表达式搜索,并返回一个Boolean值表示是否找到指定的匹配模式。

REVERSE(string)

返回反转的字符串。

SPLIT_INDEX

使用SPLIT_INDEX函数,将目标字符串按照指定分隔符分割成若干段,返回指定位置的字段信息。

STR_TO_MAP(string1[, string2, string3])

使用分隔符将string1拆分为键值对后返回一个 map。

SUBSTR(string[, integer1[, integer2]])

返回字符串的子字符串,从位置integer1开始,长度为integer2。

时间函数

DATE string

以yyyy-MM-dd的形式返回从字符串解析的 SQL日期。

DATEDIFF

使用DATEDIFF函数计算两个日期之间的天数差值。

DATE_ADD

使用DATE_ADD函数返回指定日期增加目标天数后的日期。

DATE_SUB

使用DATE_SUB函数返回指定日期减去目标天数后的日期。

TIME string

以HH:mm:ss的形式返回从字符串解析的SQL 时间。

TIMESTAMP string

以yyyy-MM-dd HH:mm:ss[.SSS]的形式返回从字符串解析的SQL时间戳。

INTERVAL string range

从dd hh:mm:ss.fff形式的字符串解析SQL 毫秒间隔或者从yyyy-mm形式的字符串解析 SQL月数间隔。

LOCALTIME

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

LOCALTIMESTAMP

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

CURRENT_TIME

返回本地时区的当前SQL时间,这是 LOCAL_TIME的同义词。

CURRENT_DATE

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

CURRENT_TIMESTAMP

返回本地时区的当前SQL时间戳。

NOW()

返回本地时区的当前SQL时间戳,这是 CURRENT_TIMESTAMP的同义词。

CURRENT_ROW_TIMESTAMP()

返回本地时区的当前SQL时间戳。

EXTRACT(timeinteravlunit FROM temporal)

返回从时间的时间间隔单位部分提取的long值。

YEAR(date)

从SQL日期date返回年份。

QUARTER(date)

从SQL日期date 返回一年中的季度。

MONTH(date)

从SQL日期date返回一年中的月份。

WEEK(date)

从SQL日期date返回一年中的第几周。

DAYOFYEAR(date)

从SQL日期date返回一年中的第几天。

DAYOFMONTH

从SQL日期date返回一个月中的第几天。

HOUR(timestamp)

从SQL时间戳timestamp返回小时单位部分的小时数。

MINUTE(timestamp)

从SQL时间戳timestamp返回分钟单位的分钟数。

SECOND(timestamp)

从SQL时间戳timestamp返回秒单位部分的秒数。

FLOOR(timepoint TO timeintervalunit)

返回将时间点timepoint向下取值到时间单位 timeintervalunit的值。

CEIL(timespoint TO timeintervaluntit)

返回将时间点timespoint向上取值到时间单位 TIMEINTERVALUNIT的值。

(timepoint1, temporal1) OVERLAPS (timepoint2, temporal2)

如果由 (timepoint1, temporal1) 和 (timepoint2, temporal2)定义的两个时间间隔重叠,则返回true。

DATE_FORMAT

使用DATE_FORMAT函数将字符串类型的日期从原格式转换至目标格式。

DATE_FORMAT_TZ

使用DATE_FORMAT_TZ函数将时间戳类型的数据根据指定的时区,转成指定格式的字符串。

TIMESTAMPADD(timeintervalunit, interval, timepoint)

将指定时间间隔单位的时间加上指定的间隔时间,返回一个新的时间点。

TIMESTAMPDIFF(timepointunit,timepoint1, timepoint2)

返回timepoint1和timepoint2之间时间间隔。

CONVERT_TZ(string1, string2, string3)

将日期时间string1(具有默认ISO时间戳格式yyyy-MM-dd HH:mm:ss)从时区string2转换为时区string3的值。

FROM_UNIXTIME

使用FROM_UNIXTIME函数返回VARCHAR类型的日期值。

UNIX_TIMESTAMP

使用UNIX_TIMESTAMP函数,将入参转换为长整型的时间戳。

TO_DATE

使用TO_DATE函数,将INT类型或者VARCHAR类型的日期转换成DATE类型。

TO_TIMESTAMP_LTZ(numeric, precision)

将纪元秒或纪元毫秒转换TIMESTAMP_LTZ。

TO_TIMESTAMP(string1[, string2])

将UTC+0时区下格式为string2(默认为yyyy-MM-dd HH:mm:ss)的字符串string1转换为时间戳。

TO_TIMESTAMP_TZ

使用TO_TIMESTAMP_TZ函数,将VARCHAR类型的日期根据指定时区转换成TIMESTAMP类型。

CURRENT_WATERMARK(rowtime)

返回给定时间列属性rowtime的当前水印。

条件函数

CASE value WHEN value1_1 [, value1_2]* THEN RESULT1 (WHEN value2_1 [, value2_2 ]* THEN result_2)* (ELSE result_z) END

当第一个时间值包含在 (valueX_1, valueX_2, …) 中时,返回resultX。

CASE WHEN condition1 THEN result1 (WHEN condition2 THEN result2)* (ELSE result_z) END

满足第一个条件X时返回resultX。

NULLIF(value1,value2)

如果value1等于value2返回NULL,否则返回 value1。

COALESCE(value1,value2 [, value3]*)

从value1, value2, … 返回第一个不为NULL的值。

IF(condition,true_value, false_value)

如果满足条件,则返回true_value,否则返回 false_value。

IFNULL(input,null_replacement)

如果输入为NULL,则返回 null_replacement,否则返回输入。

IS_ALPHA(string)

如果字符串中的所有字符都是字母,则返回true,否则返回false。

IS_DECIMAL(string)

如果string可以解析为有效数字,则返回true,否则返回false。

IS_DIGIT(string)

如果字符串中的所有字符都是数字,则返回true,否则返回false。

GREATEST(value1[,value2]*)

返回所有输入参数的最大值,如果输入参数中包含NULL,则返回NULL。

LEAST(value1[,value2]*)

返回所有输入参数的最小值,如果输入参数中包含NULL,则返回NULL。

类型转换函数

CONV

使用CONV函数对数字或字符类型的数值进行进制转换。

CAST(value AS type)

返回被强制转换为类型type的新值。

TYPEOF(input) | TYPEOF(input, force_serializable)

返回输入表达式的数据类型的字符串表示形式。

集合函数

CARDINALITY(array)

返回数组中元素的数量。

array '[' INT ']'

返回数组中INT位置的元素。

ELEMENT(array)

返回数组的唯一元素(其基数应为1)。

CARDINALITY(map)

返回map中的entries数量。

map‘[’ value ‘]’

返回map中指定key对应的值。

JSON函数

IS JSON [ { VALUE | SCALAR | ARRAY | OBJECT } ]

判断给定的字符串是否为有效的JSON。

JSON_EXISTS(jsonValue, path [ { TRUE | FALSE | UNKNOWN | ERROR } ON ERROR ])

确定一个JSON字符串是否符合给定的路径搜索条件。

JSON_STRING(value)

将一个值序列化为JSON。该函数返回一个包含序列化值的JSON字符串。

JSON_VALUE

使用JSON_VALUE函数,从JSON字符串中提取指定路径的表达式。

JSON_QUERY(jsonValue, path [ { WITHOUT | WITH CONDITIONAL | WITH UNCONDITIONAL } [ ARRAY ] WRAPPER ] [ { NULL | EMPTY ARRAY | EMPTY OBJECT | ERROR } ON EMPTY ] [ { NULL | EMPTY ARRAY | EMPTY OBJECT | ERROR } ON ERROR ])

从JSON字符串中提取JSON值。

JSON_OBJECT([[KEY] key VALUE value]* [ { NULL | ABSENT } ON NULL ])

从键值对列表中构建一个JSON对象字符串。

JSON_OBJECTAGG([KEY] key VALUE value [ { NULL | ABSENT } ON NULL ])

将键值表达式汇总为一个JSON对象字符串。

JSON_ARRAY([value]* [ { NULL | ABSENT } ON NULL ])

从值列表中构建一个JSON数组字符串。

JSON_ARRAYAGG(items [ { NULL | ABSENT } ON NULL ])

通过将项聚合成一个数组来构建一个JSON对象字符串。

值构建函数

-- implicit constructor with parenthesis (value1 [, value2]*)

返回从值列表 (value1, value2, …) 创建的行。

ARRAY ‘[’value1 [, value2 ]* ‘]’

返回从值列表 (value1, value2, …) 创建的数组。

MAP ‘[’value1, value2 [, value3, value4 ]* ‘]’

返回从键值对列表 ((value1, value2), (value3, value4), …) 创建的map。

值获取函数

tableName.compositeType.field

按名称从Flink复合类型(例如,Tuple,POJO)返回字段的值。

tableName.compositeType.*

返回Flink复合类型(例如,Tuple,POJO)的平面表示,将其每个直接子类型转换为单独的字段。

分组函数

GROUP_ID()

返回唯一标识分组键组合的整数。

GROUPING(expression1 [, expression2]* ) | GROUPING_ID(expression1 [, expression2]* )

返回给定分组表达式的位向量。

哈希函数

MD5(string)

以32个十六进制数字的字符串形式返回string的MD5哈希值。

SHA1(string)

以40个十六进制数字的字符串形式返回string 的SHA-1哈希值。

SHA224(string)

以56个十六进制数字的字符串形式返回string的SHA-224哈希值。

SHA256(string)

以64个十六进制数字的字符串形式返回string的SHA-256哈希值。

SHA384(string)

以96个十六进制数字的字符串形式返回string的SHA-384哈希值。

SHA512(string)

以128个十六进制数字的字符串形式返回string的SHA-512哈希值。

SHA2(string,hashLength)

使用SHA-2系列散列函数(SHA-224,SHA-256,SHA-384或SHA-512)返回散列值。

MURMUR_HASH

使用MURMUR_HASH函数,按Murmur 32哈希算法计算指定参数的32位哈希值。

MURMUR_HASH_64

使用MURMUR_HASH_64函数,按Murmur 128哈希算法计算指定参数的64位哈希值。

其他

ISNAN

使用ISNAN函数,判断指定的浮点数是否为NaN(Not a number),类似于Java中Double.isNaN()或Float.isNaN()函数。

KEYVALUE

使用KEYVALUE函数,将目标字符串按照split1分隔符拆分成Key-Value(KV)对,然后按照split2分隔符将Key-Value对分开,返回Key对应的Value。

表值函数

函数

说明

GENERATE_SERIES

按from、from+1、from+2 … to-1的规则,生成一系列填充数据。

JSON_TUPLE

从JSON字符串中取出各路径字符串所表示的值。

MULTI_KEYVALUE

将目标字符串中拆分为Key-Value(KV)对,匹配split1和split2的KV对,并返回key_name1和key_name2对应的Value值。

STRING_SPLIT

根据指定的分隔符将目标字符串拆分为子字符串,并返回子字符串列表。

聚合函数

函数

说明

COUNT([ ALL ] expression | DISTINCT expression1 [, expression2]*)

默认情况下或使用关键字ALL,返回不为NULL的表达式的输入行数。

COUNT(*) | COUNT(1)

返回输入行数。

AVG([ ALL | DISTINCT ] expression)

默认情况下或使用关键字ALL,返回所有输入行中表达式的平均值(算术平均值)。

SUM([ ALL | DISTINCT ] expression)

默认情况下或使用关键字ALL,返回所有输入行的表达式总和。

MAX([ ALL | DISTINCT ] expression)

默认情况下或使用关键字ALL,返回所有输入行中表达式的最大值。

MIN([ ALL | DISTINCT ] expression )

默认情况下或使用关键字ALL,返回所有输入行中表达式的最小值。

STDDEV_POP([ ALL | DISTINCT ] expression)

默认情况下或使用关键字ALL,返回所有输入行中表达式的总体标准偏差。

STDDEV_SAMP([ ALL | DISTINCT ] expression)

默认情况下或使用关键字ALL,返回所有输入行中表达式的样本标准偏差。

VAR_POP([ ALL | DISTINCT ] expression)

默认情况下或使用关键字ALL,返回所有输入行中表达式的总体方差(总体标准差的平方)。

VAR_SAMP([ ALL | DISTINCT ] expression)

默认情况下或使用关键字ALL,返回所有输入行中表达式的样本方差(样本标准差的平方)。

COLLECT([ ALL | DISTINCT ] expression)

默认情况下或使用关键字ALL,返回跨所有输入行的多组表达式。

VARIANCE([ ALL | DISTINCT ] expression)

VAR_SAMP() 的同义方法。

RANK()

返回值在一组值中的排名。

DENSE_RANK()

返回值在一组值中的排名。结果是一加先前分配的等级值。

ROW_NUMBER()

在窗口分区内根据rows的排序为每一行分配一个唯一的序列号,从一开始。

LEAD(expression [, offset] [, default])

返回窗口中当前行之后第offset行处的表达式值。

说明

流模式下暂不支持LEAD函数。

LAG(expression [, offset] [, default])

返回窗口中当前行之前第offset行处的表达式值。

LISTAGG(expression [, separator])

连接字符串表达式的值并在它们之间放置分隔符值。

APPROX_COUNT_DISTINCT

提升作业性能。

FIRST_VALUE

返回指定数据流的第1条非NULL数据。

LAST_VALUE

返回指定数据流的最后1条非NULL数据。