Skip to main content

systemFunctions

title: "系统(内置)函数"

Flink 1.12 Table API & SQL 为用户提供了一组用于数据转换的内置函数。本页简要概述了这些函数。如果您需要的函数尚未支持,您可以实现用户定义的函数。如果您认为该函数足够通用,请为其打开 Jira 问题并附上详细描述。

标量函数

标量函数以零个、一个或多个值作为输入,并返回单个值作为结果。

比较函数

比较函数说明
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。

逻辑函数

逻辑函数说明
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 * numeric2

返回numeric1乘以numeric2。

numeric1 / numeric2

返回numeric1除以numeric2。

numeric1 % numeric2

返回numeric1除以numeric2的余数。

POWER(numeric1, numeric2)

返回numeric1的numeric2次方。

ABS(numeric)

返回numeric的绝对值。

MOD(numeric1, numeric2)

返回 numeric1 除以 numeric2 的余数(模数)。仅当 numeric1 为负时,结果才为负。

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, integer)

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

PI

返回无比接近pi的值。

E()

返回无比接近e的值。

RAND()

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

RAND(integer)

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

RAND_INTEGER(integer)

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

RAND_INTEGER(integer1, integer2)

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

UUID()

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

BIN(integer)

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

HEX(numeric) HEX(string)

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

TRUNCATE(numeric1, integer2)

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

PI()

返回expr的percentage百分位值。

字符串函数

字符串函数说明
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, integer)

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

REGEXP_REPLACE(string1, string2, string3)

使用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(string1, string2[, string3])

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

REGEXP(string1, string2)

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

REVERSE(string)

返回反转的字符串。

SPLIT_INDEX(string1, string2, integer1)

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

STR_TO_MAP(string1[, string2, string3]])

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

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

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

时间函数

时间函数说明
DATE string

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

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月数间隔。

CURRENT_DATE

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

CURRENT_TIME

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

CURRENT_TIMESTAMP

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

LOCALTIME

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

LOCALTIMESTAMP

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

EXTRACT(timeintervalunit FROM temporal)

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

YEAR(date)

从SQL日期date返回年份。

QUARTER(date)

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

MONTH(date)

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

WEEK(date)

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

DAYOFYEAR(date)

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

DAYOFMONTH(date)

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

DAYOFWEEK(date)

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

HOUR(timestamp)

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

MINUTE(timestamp)

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

SECOND(timestamp)

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

FLOOR(timepoint TO timeintervalunit)

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

CEIL(timepoint TO timeintervalunit)

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

(timepoint1, temporal1) OVERLAPS (timepoint2, temporal2)

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

DATE_FORMAT(timestamp, string)

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

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(numeric[, string])

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

UNIX_TIMESTAMP()

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

UNIX_TIMESTAMP(string1[, string2])

使用表配置中指定的时区将格式为 string2 的日期时间字符串 string1(如果未指定默认情况下:yyyy-MM-dd HH:mm:ss)

TO_DATE(string1[, string2])

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

TO_TIMESTAMP(string1[, string2])

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

NOW()

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

条件函数

条件函数说明
CASE value WHEN value1_1 [, value1_2 ]* THEN result1 [ WHEN value2_1 [, value2_2 ]* THEN result2 ]* [ ELSE resultZ ] END

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

CASE WHEN condition1 THEN result1 [ WHEN condition2 THEN result2 ]* [ ELSE resultZ ] 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。

IS_ALPHA(string)

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

IS_DECIMAL(string)

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

IS_DIGIT(string)

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

类型转换函数

类型转换函数说明
CAST(value AS type)

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

集合函数

集合函数说明
CARDINALITY(array)

返回数组中元素的数量。

array ‘[’ integer ‘]’

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

ELEMENT(array)

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

CARDINALITY(map)

返回map中的entries数量。

map ‘[’ value ‘]’

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

值构建函数

值构建函数说明
-- implicit constructor with parenthesis (value1 [, value2]*)

-- explicit ROW constructor ROW(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)返回散列值。

聚合函数

聚合函数将所有行的表达式作为输入,并返回一个聚合值作为结果。

聚合函数说明
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行处的表达式值。

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

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

FIRST_VALUE(expression)

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

LAST_VALUE(expression)

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

LISTAGG(expression [, separator])

连接字符串表达式的值并在它们之间放置分隔符值。字符串末尾不添加分隔符时则分隔符的默认值为“,”。

时间间隔单位和时间点单位标识符

下表列出了时间间隔单位和时间点单位标识符。

对于 Table API,请使用 _ 代替空格(例如 DAY_TO_HOUR)。

时间间隔单位时间点单位
MILLENIUM (SQL-only)
CENTURY (SQL-only)
YEARYEAR
YEAR TO MONTH
QUARTERQUARTER
MONTHMONTH
WEEKWEEK
DAYDAY
DAY TO HOUR
DAY TO MINUTE
DAY TO SECOND
HOURHOUR
HOUR TO MINUTE
HOUR TO SECOND
MINUTEMINUTE
MINUTE TO SECOND
SECONDSECOND
MILLISECOND
MICROSECOND
DOY (仅适用SQL)
DOW (仅适用SQL)
SQL_TSI_YEAR (仅适用SQL)
SQL_TSI_QUARTER (仅适用SQL)
SQL_TSI_MONTH (仅适用SQL)
SQL_TSI_WEEK (仅适用SQL)
SQL_TSI_DAY (仅适用SQL)
SQL_TSI_HOUR (仅适用SQL)
SQL_TSI_MINUTE (仅适用SQL)
SQL_TSI_SECOND (仅适用SQL)

列函数

列函数用于选择或取消选择表列。

语法说明
withColumns(...)选择指定的列
withoutColumns(...)取消选择指定的列

详细语法如下:

columnFunction:
withColumns(columnExprs)
withoutColumns(columnExprs)

columnExprs:
columnExpr [, columnExpr]*

columnExpr:
columnRef | columnIndex to columnIndex | columnName to columnName

columnRef:
columnName(The field name that exists in the table) | columnIndex(a positive integer starting from 1)

列函数的用法如下表所示。(假设我们有一个有5列的表:(a:Int,b:Long,c:String,d:String,e:String)):

API使用说明
withColumns(*)|*select("withColumns(*)") | select("*") = select("a, b, c, d, e")所有列
withColumns(m to n)select("withColumns(2 to 4)") = select("b, c, d")从m到n的列
withColumns(m, n, k)select("withColumns(1, 3, e)") = select("a, c, e")m、n、k列
withColumns(m, n to k)select("withColumns(1, 3 to 5)") = select("a, c, d ,e")上述两种表示法的混合
withoutColumns(m to n)select("withoutColumns(2 to 4)") = select("a, e")取消选择从m到n的列
withoutColumns(m, n, k)select("withoutColumns(1, 3, 5)") = select("b, d")取消选择列m、n、k
withoutColumns(m, n to k)select("withoutColumns(1, 3 to 5)") = select("b")上述两种表示法的混合

列函数可用于所有需要列字段的地方,例如“select、groupBy、orderBy、UDF等”,例如:

table
.groupBy("withColumns(1 to 3)")
.select("withColumns(a to b), myUDAgg(myUDF(withColumns(5 to 20)))")

列函数仅在表API中使用。