Flink System (Built-in) Functions内置函数
文章目录
- Flink System (Built-in) Functions内置函数
- 标量函数
- 比较函数
- 逻辑函数
- 算术函数
- 字符串函数
- 时间函数
- 条件函数
- 类型转换函数
- 集合函数
- JSON 函数
- Value Construction Functions
- Value Access Functions
- 哈希函数
- Auxiliary Functions
- 聚合函数
- 时间间隔和时间点单位规范
- 列函数
Flink Table API & SQL提供了一套用于数据转换的内置函数。本页面对它们进行了简要概述。如果您需要的函数尚未支持,可以实现一个自定义函数。如果您认为该函数足够通用,请使用详细描述打开一个Jira问题。
标量函数
标量函数以零个、一个或多个值作为输入,并返回单个值作为结果。
比较函数
SQL函数 | 表函数 | 描述 |
---|---|---|
value1 = value2 | value1 === value2 | 如果value1等于value2,则返回TRUE;如果value1或value2为空,则返回UNKNOWN。 |
value1 <> value2 | value1 !== value2 | 如果value1不等于value2,则返回TRUE;如果value1或value2为空,则返回UNKNOWN。 |
value1 > value2 | value1 > value2 | 如果value1大于value2,则返回TRUE;如果value1或value2为空,则返回UNKNOWN。 |
value1 >= value2 | value1 >= value2 | 如果value1大于或等于value2,则返回TRUE;如果value1或value2为空,则返回UNKNOWN。 |
value1 < value2 | value1 < value2 | 如果value1小于value2,则返回TRUE;如果value1或value2为空,则返回UNKNOWN。 |
value1 <= value2 | value1 <= value2 | 如果value1小于或等于value2,则返回TRUE;如果value1或value2为空,则返回UNKNOWN。 |
value IS NULL | value.isNull | 如果value为空,则返回TRUE。 |
value IS NOT NULL | value.isNotNull | 如果value不为空,则返回TRUE。 |
value1 IS DISTINCT FROM value2 | N/A | 如果两个值不同,则返回TRUE。此处将NULL值视为相同。例如,1 IS DISTINCT FROM NULL返回TRUE;NULL IS DISTINCT FROM NULL返回FALSE。 |
value1 IS NOT DISTINCT FROM value2 | N/A | 如果两个值相等,则返回TRUE。此处将NULL值视为相同。例如,1 IS NOT DISTINCT FROM NULL返回FALSE;NULL IS NOT DISTINCT FROM NULL返回TRUE。 |
value1 BETWEEN [ASYMMETRIC|SYMMETRIC] value2 AND value3 | N/A | 默认情况下(或使用ASYMMETRIC关键字),如果value1大于或等于value2且小于或等于value3,则返回TRUE。使用SYMMETRIC关键字时,如果value1在value2和value3之间(包括边界值),则返回TRUE。当value2或value3为空时,返回FALSE或UNKNOWN。例如,12 BETWEEN 15 AND 12返回FALSE;12 BETWEEN SYMMETRIC 15 AND 12返回TRUE;12 BETWEEN 10 AND NULL返回UNKNOWN;12 BETWEEN NULL AND 10返回FALSE;12 BETWEEN SYMMETRIC NULL AND 12返回UNKNOWN。 |
value1 NOT BETWEEN [ASYMMETRIC|SYMMETRIC] value2 AND value3 | N/A | 默认情况下(或使用ASYMMETRIC关键字),如果value1小于value2或大于value3,则返回TRUE。使用SYMMETRIC关键字时,如果value1不在value2和value3之间(包括边界值),则返回TRUE。当value2或value3为空时,返回TRUE或UNKNOWN。例如,12 NOT BETWEEN 15 AND 12返回TRUE;12 NOT BETWEEN SYMMETRIC 15 AND 12返回FALSE;12 NOT BETWEEN NULL AND 15返回UNKNOWN;12 NOT BETWEEN 15 AND NULL返回TRUE;12 NOT BETWEEN SYMMETRIC 12 AND NULL返回UNKNOWN。 |
string1 LIKE string2 [ESCAPE char] | string1.like(string2) | 如果string1与模式string2匹配,则返回TRUE;如果string1或string2为空,则返回UNKNOWN。如果需要,可以定义转义字符。目前还不支持转义字符。 |
string1 NOT LIKE string2 [ESCAPE char] | N/A | 如果string1不与模式string2匹配,则返回TRUE;如果string1或string2为空,则返回UNKNOWN。如果需要,可以定义转义字符。目前还不支持转义字符。 |
string1 SIMILAR TO string2 [ESCAPE char] | string1.similar(string2) | 如果string1与SQL正则表达式string2匹配,则返回TRUE;如果string1或string2为空,则返回UNKNOWN。如果需要,可以定义转义字符。目前还不支持转义字符。 |
string1 NOT SIMILAR TO string2 [ESCAPE char] | N/A | 如果string1不与SQL正则表达式string2匹配,则返回TRUE;如果string1或string2为空,则返回UNKNOWN。如果需要,可以定义转义字符。目前还不支持转义字符。 |
value1 IN (value2 [, value3]*) | value1.in(value2) | 如果value1存在于给定列表(value2、value3等)中,则返回TRUE。当列表(value2、value3等)包含NULL时,如果可以找到元素,则返回TRUE,否则返回UNKNOWN。如果value1为空,则始终返回UNKNOWN。例如,4 IN (1, 2, 3)返回FALSE;1 IN (1, 2, NULL)返回TRUE;4 IN (1, 2, NULL)返回UNKNOWN。 |
value1 NOT IN (value2 [, value3]*) | N/A | 如果value1不存在于给定列表(value2、value3等)中,则返回TRUE。当列表(value2、value3等)包含NULL时,如果可以找到value1,则返回FALSE,否则返回UNKNOWN。如果value1为空,则始终返回UNKNOWN。例如,4 NOT IN (1, 2, 3)返回TRUE;1 NOT IN (1, 2, NULL)返回FALSE;4 NOT IN (1, 2, NULL)返回UNKNOWN。 |
EXISTS (sub-query) | N/A | 如果子查询返回至少一行,则返回TRUE。仅在操作可以重写为连接和分组操作时支持。对于流式查询,该操作将被重写为连接和分组操作。根据输入行的不同数量,计算查询结果所需的状态可能会无限增长。请提供一个具有有效保留间隔的查询配置,以防止过多的状态大小。 |
value IN (sub-query) | value1.in(TABLE) | 如果value等于子查询返回的某一行,则返回TRUE。 |
value NOT IN (sub-query) | N/A | 如果value不等于子查询返回的任何一行,则返回TRUE。 |
逻辑函数
SQL函数 | 表函数 | 描述 |
---|---|---|
boolean1 OR boolean2 | BOOLEAN1 || BOOLEAN2 | 如果BOOLEAN1为TRUE或BOOLEAN2为TRUE,则返回TRUE。支持三值逻辑。例如,true || Null(BOOLEAN)返回TRUE。 |
boolean1 AND boolean2 | BOOLEAN1 && BOOLEAN2 | 如果BOOLEAN1和BOOLEAN2都为TRUE,则返回TRUE。支持三值逻辑。例如,true && Null(BOOLEAN)返回UNKNOWN。 |
NOT boolean | BOOLEAN.not(), not(BOOLEAN), or ‘!BOOLEAN’ (Scala only) | 如果boolean为FALSE,则返回TRUE;如果boolean为TRUE,则返回FALSE;如果boolean为UNKNOWN,则返回UNKNOWN。 |
boolean IS FALSE | BOOLEAN.isFalse | 如果boolean为FALSE,则返回TRUE;如果boolean为TRUE或UNKNOWN,则返回FALSE。 |
boolean IS NOT FALSE | BOOLEAN.isNotFalse | 如果BOOLEAN为TRUE或UNKNOWN,则返回TRUE;如果BOOLEAN为FALSE,则返回FALSE。 |
boolean IS TRUE | BOOLEAN.isTrue | 如果BOOLEAN为TRUE,则返回TRUE;如果BOOLEAN为FALSE或UNKNOWN,则返回FALSE。 |
boolean IS NOT TRUE | BOOLEAN.isNotTrue | 如果boolean为FALSE或UNKNOWN,则返回TRUE;如果boolean为TRUE,则返回FALSE。 |
boolean IS UNKNOWN | N/A | 如果boolean为UNKNOWN,则返回TRUE;如果boolean为TRUE或FALSE,则返回FALSE。 |
boolean IS NOT UNKNOWN | N/A | 如果boolean为TRUE或FALSE,则返回TRUE;如果boolean为UNKNOWN,则返回FALSE。 |
算术函数
SQL函数 | 表函数 | 描述 |
---|---|---|
numeric + NUMERIC | numeric | 返回NUMERIC。 |
numeric - numeric | 返回负数NUMERIC | |
numeric1 + numeric2 | NUMERIC1 + NUMERIC2 | 返回NUMERIC1加上NUMERIC2。 |
numeric1 - numeric2 | NUMERIC1 - NUMERIC2 | 返回NUMERIC1减去NUMERIC2。 |
numeric1 * numberic2 | NUMERIC1 * NUMERIC2 | 返回NUMERIC1乘以NUMERIC2。 |
numeric1 / numeric2 | NUMERIC1 / NUMERIC2 | 返回NUMERIC1除以NUMERIC2。 |
numeric1 % numeric2 | MOD(numeric1, numeric2) | 返回numeric1除以numeric2的余数(模)。仅当numeric1为负数时结果为负数。 |
POWER(numeric1, numeric2) | NUMERIC1.power(NUMERIC2) | 返回NUMERIC1的NUMERIC2次幂。 |
ABS(numeric) | numeric.abs() | 返回numeric的绝对值。 |
SQRT(numeric) | NUMERIC.sqrt() | 返回NUMERIC的平方根。 |
LN(numeric) | NUMERIC.ln() | 返回NUMERIC的自然对数(以e为底)。 |
LOG10(numeric) | numeric.log10() | 返回numeric的以10为底的对数。 |
LOG2(numeric) | numeric.log2() | 返回numeric的以2为底的对数。 |
LOG(numeric2) LOG(numeric1, numeric2) | NUMERIC1.log() NUMERIC1.log(NUMERIC2) | 如果使用一个参数调用,则返回numeric2的自然对数。如果使用两个参数调用,则该函数返回numeric2以numeric1为底的对数。目前,numeric2必须大于0,numeric1必须大于1。 |
EXP(numeric) | NUMERIC.exp() | 返回e的numeric次幂。 |
CEIL(numeric) CEILING(numeric) | NUMERIC.ceil() NUMERIC.ceiling() | 向上舍入numeric,并返回不小于numeric的最小值。 |
FLOOR(numeric) | NUMERIC.floor() | 向下舍入numeric,并返回不大于numeric的最大值。 |
SIN(numeric) | NUMERIC.sin() | 返回numeric的正弦值。 |
SINH(numeric) | NUMERIC.sinh() | 返回numeric的双曲正弦值。返回值类型为DOUBLE。 |
COS(numeric) | NUMERIC.cos() | 返回numeric的余弦值。 |
TAN(numeric) | NUMERIC.tan() | 返回numeric的正切值。 |
TANH(numeric) | NUMERIC.tanh() | 返回numeric的双曲正切值。返回值类型为DOUBLE。 |
COT(numeric) | NUMERIC.cot() | 返回numeric的余切值。 |
ASIN(numeric) | NUMERIC.asin() | 返回numeric的反正弦值。 |
ACOS(numeric) | NUMERIC.acos() | 返回numeric的反余弦值。 |
ATAN(numeric) | NUMERIC.atan() | 返回numeric的反正切值。 |
ATAN2(numeric1, numeric2) | atan2(NUMERIC1, NUMERIC2) | 返回坐标(NUMERIC1,NUMERIC2)的反正切值。 |
COSH(numeric) | NUMERIC.cosh() | 返回numeric的双曲余弦值。返回值类型为DOUBLE。 |
DEGREES(numeric) | NUMERIC.degrees() | 返回以弧度表示的numeric的度数表示。 |
RADIANS(numeric) | NUMERIC.radians() | 返回以度数表示的numeric的弧度表示。 |
SIGN(numeric) | NUMERIC.sign() | 返回NUMERIC的符号。 |
ROUND(NUMERIC, INT) | NUMERIC.round(INT) | 将数字四舍五入为INT位小数。如果numeric1或integer2为空,则返回NULL。如果integer2为0,则结果没有小数点或小数部分。integer2可以为负数,以使值的小数点左侧的integer2位成为零。此函数还可以只传入一个numeric1参数,并且不设置integer2来使用。如果未设置Integer2,函数将像integer2为0一样截断。例如,42.324.truncate(2)为42.32,42.324.truncate()为42.0。 |
字符串函数
SQL函数 | 表函数 | 描述 |
---|---|---|
string1 || string2 | STRING1 + STRING2 | 返回STRING1和STRING2的连接字符串。 |
CHAR_LENGTH(string) CHARACTER_LENGTH(string) | STRING.charLength() | 返回字符串中的字符数。 |
UPPER(string) | STRING.upperCase() | 返回大写的STRING。 |
LOWER(string) | STRING.lowerCase() | 返回小写的string。 |
POSITION(string1 IN string2) | STRING1.position(STRING2) | 返回STRING1在STRING2中第一次出现的位置(从1开始);如果在STRING2中找不到STRING1,则返回0。 |
TRIM([BOTH|LEADING|TRAILING] string1 FROM string2) | STRING1.trim(LEADING, STRING2) STRING1.trim(TRAILING, STRING2) STRING1.trim(BOTH, STRING2) STRING1.trim(BOTH) STRING1.trim() | 返回从STRING1中删除前导和/或尾随字符STRING2的字符串。默认情况下,两侧的空格将被删除。 |
LTRIM(string) | STRING.ltrim() | 返回从STRING中删除左侧空格的字符串。例如,’ This is a test String.’.ltrim()返回“This is a test String.”。 |
RTRIM(string) | STRING.rtrim() | 返回从STRING中删除右侧空格的字符串。例如,‘This is a test String. ‘.rtrim()返回“This is a test String.”。 |
REPEAT(string, int) | STRING.repeat(INT) | 返回重复基本字符串integer次的字符串。例如,REPEAT(‘This is a test String.’, 2)返回“This is a test String.This is a test String.”。 |
REGEXP_REPLACE(string1, string2, string3) | STRING1.regexpReplace(STRING2, STRING3) | 返回从STRING1中用STRING3替换所有与正则表达式STRING2匹配的子字符串的字符串。例如,‘foobar’.regexpReplace(‘oo |
OVERLAY(string1 PLACING string2 FROM integer1 [FOR integer2]) | STRING1.overlay(STRING2, INT1) STRING1.overlay(STRING2, INT1, INT2) | 返回从位置INT1开始用STRING2替换STRING1的INT2个字符(默认为STRING2的长度)的字符串。例如,‘xxxxxtest’.overlay(‘xxxx’, 6)返回“xxxxxxxxx”;‘xxxxxtest’.overlay(‘xxxx’, 6, 2)返回“xxxxxxxxxst”。 |
SUBSTRING(string FROM integer1 [FOR integer2]) | STRING.substring(INT1) STRING.substring(INT1, INT2) | 返回从位置INT1开始,长度为INT2(默认到末尾)的字符串的子字符串。 |
REPLACE(string1, string2, string3) | STRING1.replace(STRING2, STRING3) | 返回一个新字符串,该字符串将STRING1中所有与STRING2匹配的子字符串(不重叠)替换为STRING3。例如,‘hello world’.replace(‘world’, ‘flink’)返回‘hello flink’;‘ababab’.replace(‘abab’, ‘z’)返回‘zab’。 |
REGEXP_EXTRACT(string1, string2[, integer]) | STRING1.regexpExtract(STRING2[, INTEGER1]) | 从string1中提取使用指定的正则表达式string2和正则匹配组索引integer的字符串。正则匹配组索引从1开始,0表示整个正则表达式的匹配。此外,正则匹配组索引不能超过定义的组数。例如,REGEXP_EXTRACT(‘foothebar’, ‘foo(.*?)(bar)’, 2)返回“bar”。 |
INITCAP(string) | STRING.initCap() | 返回每个单词的首字母大写,其余字母小写的字符串。这里的单词指的是一个由字母数字字符组成的序列。 |
CONCAT(string1, string2, …) | concat(STRING1, STRING2, …) | 返回连接字符串string1、string2等的字符串。如果任何参数为NULL,则返回NULL。例如,CONCAT(‘AA’, ‘BB’, ‘CC’)返回“AABBCC”。 |
CONCAT_WS(string1, string2, string3, …) | concat_ws(STRING1, STRING2, STRING3, …) | 返回使用分隔符STRING1连接的STRING2、STRING3等的字符串。分隔符将添加在要连接的字符串之间。如果STRING1为NULL,则返回NULL。与concat()函数相比,concat_ws()会自动跳过NULL参数。例如,concat_ws(’~’, ‘AA’, Null(STRING), ‘BB’, ‘’, ‘CC’)返回“AABB~CC”。 |
LPAD(string1, integer, string2) | STRING1.lpad(INT, STRING2) | 返回从左侧用STRING2填充到长度为integer的字符串的新字符串。如果string1的长度小于integer,则返回缩短为integer个字符的string1。例如,LPAD(‘hi’, 4, ‘??’)返回“??hi”;LPAD(‘hi’, 1, ‘??’)返回“h”。 |
RPAD(string1, integer, string2) | STRING1.rpad(INT, STRING2) | 返回从右侧用STRING2填充到长度为integer的字符串的新字符串。如果string1的长度小于integer,则返回缩短为integer个字符的string1。例如,RPAD(‘hi’, 4, ‘??’)返回“hi??”,RPAD(‘hi’, 1, ‘??’)返回“h”。 |
FROM_BASE64(string) | STRING.fromBase64() | 返回从string解码的base64结果;如果string为NULL,则返回NULL。例如,FROM_BASE64(‘aGVsbG8gd29ybGQ=’)返回“hello world”。 |
TO_BASE64(string) | STRING.toBase64() | 返回对string进行base64编码的结果;如果string为NULL,则返回NULL。例如,TO_BASE64(‘hello world’)返回“aGVsbG8gd29ybGQ=”。 |
ASCII(string) | STRING.ascii() | 返回string的第一个字符的数值。如果string为NULL,则返回NULL。例如,ascii(‘abc’)返回97,ascii(CAST(NULL AS VARCHAR))返回NULL。 |
CHR(integer) | INT.chr() | 返回具有与整数二进制等效的ASCII字符。如果整数大于255,则首先对整数除以255取模,并返回模数的CHR。如果整数为NULL,则返回NULL。例如,chr(97)返回a,chr(353)返回a,ascii(CAST(NULL AS VARCHAR))返回NULL。 |
DECODE(binary, string) | BINARY.decode(STRING) | 使用提供的字符集(‘US-ASCII’、‘ISO-8859-1’、‘UTF-8’、‘UTF-16BE’、‘UTF-16LE’、‘UTF-16’)将第一个参数解码为字符串。如果任一参数为空,则结果也将为空。 |
ENCODE(string1, string2) | STRING1.encode(STRING2) | 使用提供的字符集(‘US-ASCII’、‘ISO-8859-1’、‘UTF-8’、‘UTF-16BE’、‘UTF-16LE’、‘UTF-16’)将string1编码为BINARY。如果任一参数为空,则结果也将为空。 |
INSTR(string1, string2) | STRING1.instr(STRING2) | 返回string2在string1中第一次出现的位置。如果任一参数为空,则返回NULL。 |
LEFT(string, integer) | STRING.LEFT(INT) | 返回字符串的左边integer个字符。如果integer为负数,则返回空字符串。如果任一参数为空,则返回NULL。 |
RIGHT(string, integer) | STRING.RIGHT(INT) | 返回字符串的右边integer个字符。如果integer为负数,则返回空字符串。如果任一参数为空,则返回NULL。 |
LOCATE(string1, string2[, integer]) | STRING1.locate(STRING2[, INTEGER]) | 返回string2在string1中从位置integer之后第一次出现的位置。如果未找到,则返回0。如果任一参数为空,则返回NULL。 |
PARSE_URL(string1, string2[, string3]) | STRING1.parseUrl(STRING2[, STRING3]) | 返回URL中指定部分。string2的有效值包括“HOST”、“PATH”、“QUERY”、“REF”、“PROTOCOL”、“AUTHORITY”、“FILE”和“USERINFO”。如果任一参数为空,则返回NULL。例如,parse_url(‘http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1’, ‘HOST’),返回‘facebook.com’。在QUERY中也可以提取特定键的值,方法是将键作为第三个参数string3。例如,parse_url(‘http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1’, ‘QUERY’, ‘k1’)返回‘v1’。 |
REGEXP(string1, string2) | STRING1.regexp(STRING2) | 如果string1的任何(可能为空)子字符串与Java正则表达式string2匹配,则返回TRUE;否则返回FALSE。如果任一参数为空,则返回NULL。 |
REVERSE(string) | STRING.reverse() | 返回翻转后的字符串。如果string为空,则返回NULL。 |
SPLIT_INDEX(string1, string2, integer1) | STRING1.splitIndex(STRING2, INTEGER1) | 使用分隔符string2拆分string1,返回拆分后的第integer1(从0开始计数)个字符串。如果integer1为负数,则返回NULL。如果任一参数为空,则返回NULL。 |
STR_TO_MAP(string1[, string2, string3]) | STRING1.strToMap([STRING2, STRING3]) | 将string1按照指定的分隔符拆分为键/值对,并返回一个map。string2是键值对的分隔符,默认为“,”。string3是键和值之间的分隔符,默认为“=”。键值对分隔符和键值分隔符都被视为正则表达式。因此,在实际使用时,需要正确转义特殊字符(例如<([{^-=$! |
SUBSTR(string, integer1[, integer2]) | STRING.substr(INTEGER1[, INTEGER2]) | 返回从位置integer1开始,长度为integer2(默认到末尾)的字符串的子字符串。如果任一参数为空,则返回NULL。 |
时间函数
时间函数用于处理日期、时间和时间间隔。
SQL 函数 | Table 函数 | 描述 |
---|---|---|
DATE string | STRING.toDate() | 从形如“yyyy-MM-dd”的字符串中解析并返回 SQL 日期。 |
TIME string | STRING.toTime() | 从形如“HH:mm:ss”的字符串中解析并返回 SQL 时间。 |
TIMESTAMP string | STRING.toTimestamp() | 从形如“yyyy-MM-dd HH:mm:ss[.SSS]”的字符串中解析并返回 SQL 时间戳。 |
INTERVAL string range | N/A | 解析形如“dd hh:mm:ss.fff”的字符串以获取毫秒级 SQL 时间间隔,或者解析形如“yyyy-mm”的字符串以获取月份级 SQL 时间间隔。一个时间间隔范围可以是 DAY、MINUTE、DAY TO HOUR 或 DAY TO SECOND(用于毫秒级时间间隔);YEAR 或 YEAR TO MONTH(用于月份级时间间隔)。例如,INTERVAL ‘10 00:00:00.004’ DAY TO SECOND、INTERVAL ‘10’ DAY 或 INTERVAL ‘2-10’ YEAR TO MONTH 都可以返回时间间隔。 |
N/A | NUMERIC.year NUMERIC.years | 创建 NUMERIC 年份对应的月份级时间间隔。 |
N/A | NUMERIC.quarter NUMERIC.quarters | 创建 NUMERIC 季度对应的月份级时间间隔。例如,2.quarters 返回 6。 |
N/A | NUMERIC.month NUMERIC.months | 创建 NUMERIC 月份对应的时间间隔。 |
N/A | NUMERIC.week NUMERIC.weeks | 创建 NUMERIC 周数对应的毫秒级时间间隔。例如,2.weeks 返回 1209600000。 |
N/A | NUMERIC.day NUMERIC.days | 创建 NUMERIC 天数对应的毫秒级时间间隔。 |
N/A | NUMERIC.hour NUMERIC.hours | 创建 NUMERIC 小时数对应的毫秒级时间间隔。 |
N/A | NUMERIC.minute NUMERIC.minutes | 创建 NUMERIC 分钟数对应的毫秒级时间间隔。 |
N/A | NUMERIC.second NUMERIC.seconds | 创建 NUMERIC 秒数对应的毫秒级时间间隔。 |
N/A | NUMERIC.milli NUMERIC.millis | 创建 NUMERIC 毫秒数对应的时间间隔。 |
LOCALTIME | localTime() | 返回本地时区的当前 SQL 时间,返回类型为 TIME(0)。在流式计算模式下,对每条记录进行计算。但在批处理模式下,在查询开始时计算一次,并将相同的结果用于每行数据。 |
LOCALTIMESTAMP | localTimestamp() | 返回本地时区的当前 SQL 时间戳,返回类型为 TIMESTAMP(3)。在流式计算模式下,对每条记录进行计算。但在批处理模式下,在查询开始时计算一次,并将相同的结果用于每行数据。 |
CURRENT_TIME | currentTime() | 返回本地时区的当前 SQL 时间,与 LOCAL_TIME 是同义词。 |
CURRENT_DATE | currentDate() | 返回本地时区的当前 SQL 日期。在流式计算模式下,对每条记录进行计算。但在批处理模式下,在查询开始时计算一次,并将相同的结果用于每行数据。 |
CURRENT_TIMESTAMP | currentTimestamp() | 返回本地时区的当前 SQL 时间戳,返回类型为 TIMESTAMP_LTZ(3)。在流式计算模式下,对每条记录进行计算。但在批处理模式下,在查询开始时计算一次,并将相同的结果用于每行数据。 |
NOW() | N/A | 返回本地时区的当前 SQL 时间戳,与 CURRENT_TIMESTAMP 是同义词。 |
CURRENT_ROW_TIMESTAMP() | N/A | 返回本地时区的当前 SQL 时间戳,返回类型为 TIMESTAMP_LTZ(3)。无论是批处理还是流处理模式,都对每条记录进行计算。 |
EXTRACT(timeinteravlunit FROM temporal) | TEMPORAL.extract(TIMEINTERVALUNIT) | 从 temporal 中提取 timeintervalunit 部分的长整型值。例如,EXTRACT(DAY FROM DATE ‘2006-06-05’) 返回 5。 |
YEAR(date) | N/A | 返回 SQL 日期中的年份。等价于 EXTRACT(YEAR FROM date)。例如,YEAR(DATE ‘1994-09-27’) 返回 1994。 |
QUARTER(date) | N/A | 返回 SQL 日期中的季度(介于 1 和 4 之间的整数)。等价于 EXTRACT(QUARTER FROM date)。例如,QUARTER(DATE ‘1994-09-27’) 返回 3。 |
MONTH(date) | N/A | 返回 SQL 日期中的月份(介于 1 和 12 之间的整数)。等价于 EXTRACT(MONTH FROM date)。例如,MONTH(DATE ‘1994-09-27’) 返回 9。 |
WEEK(date) | N/A | 返回 SQL 日期中的周数(介于 1 和 53 之间的整数)。等价于 EXTRACT(WEEK FROM date)。例如,WEEK(DATE ‘1994-09-27’) 返回 39。 |
DAYOFYEAR(date) | N/A | 返回 SQL 日期中的年中天数(介于 1 和 366 之间的整数)。等价于 EXTRACT(DOY FROM date)。例如,DAYOFYEAR(DATE ‘1994-09-27’) 返回 270。 |
DAYOFMONTH(date) | N/A | 返回 SQL 日期中的月中天数(介于 1 和 31 之间的整数)。等价于 EXTRACT(DAY FROM date)。例如,DAYOFMONTH(DATE ‘1994-09-27’) 返回 27。 |
DAYOFWEEK(date) | N/A | 返回 SQL 日期中的星期几(介于 1 和 7 之间的整数)。等价于 EXTRACT(DOW FROM date)。例如,DAYOFWEEK(DATE ‘1994-09-27’) 返回 3。 |
HOUR(timestamp) | N/A | 返回 SQL 时间戳中的小时数(介于 0 和 23 之间的整数)。等价于 EXTRACT(HOUR FROM timestamp)。例如,MINUTE(TIMESTAMP ‘1994-09-27 13:14:15’) 返回 14。 |
MINUTE(timestamp) | N/A | 返回 SQL 时间戳中的分钟数(介于 0 和 59 之间的整数)。等价于 EXTRACT(MINUTE FROM timestamp)。例如,MINUTE(TIMESTAMP ‘1994-09-27 13:14:15’) 返回 14。 |
SECOND(timestamp) | N/A | 返回 SQL 时间戳中的秒数(介于 0 和 59 之间的整数)。等价于 EXTRACT(SECOND FROM timestamp)。例如,SECOND(TIMESTAMP ‘1994-09-27 13:14:15’) 返回 15。 |
FLOOR(timepoint TO timeintervalunit) | TIMEPOINT.floor(TIMEINTERVALUNIT) | 将 timepoint 向下舍入到 timeintervalunit 的时间单位。例如,FLOOR(TIME ‘12:44:31’ TO MINUTE) 返回 12:44:00。 |
CEIL(timepoint TO timeintervaluntit) | TIMEPOINT.ceil(TIMEINTERVALUNIT) | 将 timepoint 向上舍入到 timeintervalunit 的时间单位。例如,CEIL(TIME ‘12:44:31’ TO MINUTE) 返回 12:45:00。 |
(timepoint1, temporal1) OVERLAPS (timepoint2, temporal2) | temporalOverlaps(TIMEPOINT1, TEMPORAL1, TIMEPOINT2, TEMPORAL2) | 如果由 (timepoint1, temporal1) 和 (timepoint2, temporal2) 定义的两个时间间隔重叠,则返回 TRUE。temporal 值可以是时间点或时间间隔。例如,(TIME ‘2:55:00’, INTERVAL ‘1’ HOUR) OVERLAPS (TIME ‘3:30:00’, INTERVAL ‘2’ HOUR) 返回 TRUE;(TIME ‘9:00:00’, TIME ‘10:00:00’) OVERLAPS (TIME ‘10:15:00’, INTERVAL ‘3’ HOUR) 返回 FALSE。 |
DATE_FORMAT(timestamp, string) | dateFormat(TIMESTAMP, STRING) | 将 timestamp 转换为指定日期格式字符串的值。日期格式字符串与 Java 的 SimpleDateFormat 兼容。 |
TIMESTAMPADD(timeintervalunit, interval, timepoint) | N/A | 在 timepoint 上添加指定的时间间隔,返回新的 SQL 时间戳。第一个参数指定了间隔的单位,应该是以下值之一:SECOND、MINUTE、HOUR、DAY、MONTH 或 YEAR。 |
TIMESTAMPDIFF(timepointunit, timepoint1, timepoint2) | timestampDiff(TIMEPOINTUNIT, TIMEPOINT1, TIMEPOINT2) | 返回 timepoint1 和 timepoint2 之间(带符号的)timepointunit 的数量。间隔的单位由第一个参数给出,应该是以下值之一:SECOND、MINUTE、HOUR、DAY、MONTH 或 YEAR。 |
CONVERT_TZ(string1, string2, string3) | convertTz(STRING1, STRING2, STRING3) | 将 datetime 字符串 string1(默认的 ISO 时间戳格式为 “yyyy-MM-dd HH:mm:ss”)从时区 string2 转换为时区 string3。时区的格式可以是缩写(例如“PST”)、全名(例如“America/Los_Angeles”)或自定义 ID(例如“GMT-08:00”)。例如,CONVERT_TZ(‘1970-01-01 00:00:00’, ‘UTC’, ‘America/Los_Angeles’) 返回 ‘1969-12-31 16:00:00’。 |
FROM_UNIXTIME(numeric[, string]) | fromUnixtime(NUMERIC[, STRING]) | 将 numeric 参数作为字符串格式(默认为 “yyyy-MM-dd HH:mm:ss”)的值返回。numeric 是表示自“1970-01-01 00:00:00”以来经过的秒数的内部时间戳值,例如 UNIX_TIMESTAMP() 函数生成的值。返回值使用会话时区(在 TableConfig 中指定)表示。例如,FROM_UNIXTIME(44) 在 UTC 时区下返回 ‘1970-01-01 00:00:44’,但在 ‘Asia/Tokyo’ 时区下返回 ‘1970-01-01 09:00:44’。 |
UNIX_TIMESTAMP() | unixTimestamp() | 获取当前 Unix 时间戳(以秒为单位)。该函数是非确定性的,这意味着每条记录都会重新计算该值。 |
UNIX_TIMESTAMP(string1[, string2]) | unixTimestamp(STRING1[, STRING2]) | 将日期时间字符串 string1 使用格式字符串 string2(默认为 ‘yyyy-MM-dd HH:mm:ss’)转换为 Unix 时间戳(以秒为单位),使用表配置中指定的时区。如果日期时间字符串中指定了时区并且使用 UTC+X 格式(例如“yyyy-MM-dd HH:mm:ss.SSS X”)进行解析,则此函数将使用日期时间字符串中指定的时区,而不是表配置中的时区。如果无法解析日期时间字符串,则返回默认值 Long.MIN_VALUE(-9223372036854775808)。 |
TO_DATE(string1[, string2]) | toDate(STRING1[, STRING2]) | 将日期字符串 string1 使用格式字符串 string2(默认为 ‘yyyy-MM-dd’)转换为日期。 |
TO_TIMESTAMP_LTZ(numeric, precision) | toTimestampLtz(NUMERIC, PRECISION) | 将 epoch 秒或 epoch 毫秒转换为 TIMESTAMP_LTZ,有效精度为 0 或 3,其中 0 表示 TO_TIMESTAMP_LTZ(epochSeconds, 0),3 表示 TO_TIMESTAMP_LTZ(epochMilliseconds, 3)。 |
TO_TIMESTAMP(string1[, string2]) | toTimestamp(STRING1[, STRING2]) | 将日期时间字符串 string1 使用格式字符串 string2(默认为 ‘yyyy-MM-dd HH:mm:ss’)转换为不带时区的时间戳。 |
CURRENT_WATERMARK(rowtime) | N/A | 返回给定 rowtime 属性的当前水位线,如果在当前操作中没有所有上游操作的公共水位线可用,则返回 NULL。函数的返回类型根据提供的 rowtime 属性进行推断,但精度调整为 3。例如,如果 rowtime 属性为 TIMESTAMP_LTZ(9),则函数将返回 TIMESTAMP_LTZ(3)。请注意,此函数可能返回 NULL,并且您可能需要考虑这种情况。例如,如果要过滤掉延迟数据,可以使用:WHERE CURRENT_WATERMARK(ts) IS NULL OR ts > CURRENT_WATERMARK(ts) |
条件函数
条件函数根据给定的条件执行不同的操作。
SQL 函数 | Table 函数 | 描述 |
---|---|---|
CASE value WHEN value1_1 [, value1_2]* THEN RESULT1 (WHEN value2_1 [, value2_2 ]* THEN result_2)* (ELSE result_z) END | N/A | 当第一次出现的值包含在 (valueX_1, valueX_2, …) 中时,返回 resultX。当没有匹配的值时,如果提供了 result_z,则返回 result_z;否则返回 NULL。 |
CASE WHEN condition1 THEN result1 (WHEN condition2 THEN result2)* (ELSE result_z) END | N/A | 当满足第一个 conditionX 时,返回 resultX。当没有满足的条件时,如果提供了 result_z,则返回 result_z;否则返回 NULL。 |
NULLIF(value1, value2) | N/A | 如果 value1 等于 value2,则返回 NULL;否则返回 value1。例如,NULLIF(5, 5) 返回 NULL;NULLIF(5, 0) 返回 5。 |
COALESCE(value1 [, value2]*) | coalesce(value1, [, value2]*) | 返回第一个非 NULL 的参数。如果所有参数都为 NULL,则也返回 NULL。返回类型是所有参数中最不限制的公共类型。如果所有参数都可为空,则返回类型也可为空。例如,COALESCE(NULL, ‘default’) 返回 ‘default’;COALESCE(f0, f1, ‘default’) 返回 f0 和 f1 中的第一个非空值,如果 f0 和 f1 都为 NULL,则返回 ‘default’。 |
IF(condition, true_value, false_value) | N/A | 如果满足条件,则返回 true_value;否则返回 false_value。例如,IF(5 > 3, 5, 3) 返回 5。 |
IFNULL(input, null_replacement) | input.ifNull(nullReplacement) | 如果 input 为 NULL,则返回 null_replacement;否则返回 input。与 COALESCE 或 CASE WHEN 相比,该函数返回的数据类型在空值方面非常具体。返回类型是两个参数的公共类型,但仅当 null_replacement 可为空时才可为空。该函数允许将可为空列传递到声明了 NOT NULL 约束的函数或表中。例如,IFNULL(nullable_column, 5) 永不返回 NULL。 |
IS_ALPHA(string) | N/A | 如果字符串中的所有字符都是字母,则返回 true;否则返回 false。 |
IS_DECIMAL(string) | N/A | 如果字符串可以解析为有效的数字,则返回 true;否则返回 false。 |
IS_DIGIT(string) | N/A | 如果字符串中的所有字符都是数字,则返回 true;否则返回 false。 |
N/A | BOOLEAN.?(VALUE1, VALUE2) | 如果 BOOLEAN 评估为 TRUE,则返回 VALUE1;否则返回 VALUE2。例如,(42 > 5).?(‘A’, ‘B’) 返回 “A”。 |
GREATEST(value1[, value2]*) | N/A | 返回参数列表中的最大值。如果任何参数为 NULL,则返回 NULL。 |
LEAST(value1[, value2]*) | N/A | 返回参数列表中的最小值。如果任何参数为 NULL,则返回 NULL。 |
类型转换函数
类型转换函数用于在不同数据类型之间进行转换。
SQL 函数 | Table 函数 | 描述 |
---|---|---|
CAST(value AS type) | ANY.cast(TYPE) | 将 value 强制转换为 type 类型的新值。CAST 错误会引发异常并导致作业失败。当执行可能失败的强制转换操作(例如从 STRING 到 INT)时,应使用 TRY_CAST 来处理错误。如果启用了“table.exec.legacy-cast-behaviour”,则 CAST 的行为类似于 TRY_CAST。例如,CAST(‘42’ AS INT) 返回 42;CAST(NULL AS STRING) 返回类型为 STRING 的 NULL;CAST(‘non-number’ AS INT) 抛出异常并导致作业失败。 |
TRY_CAST(value AS type) | ANY.tryCast(TYPE) | 类似于 CAST,但在出现错误时,返回 NULL 而不是导致作业失败。例如,TRY_CAST(‘42’ AS INT) 返回 42;TRY_CAST(NULL AS STRING) 返回类型为 STRING 的 NULL;TRY_CAST(‘non-number’ AS INT) 返回类型为 INT 的 NULL;COALESCE(TRY_CAST(‘non-number’ AS INT), 0) 返回类型为 INT 的 0。 |
TYPEOF(input) TYPEOF(input, force_serializable) call(“TYPEOF”, input) call(“TYPEOF”, input, force_serializable) | 返回输入表达式的数据类型的字符串表示形式。默认情况下,返回的字符串是一个概要字符串,为了可读性可能省略某些细节。如果 force_serializable 设置为 TRUE,则该字符串表示一个完整的数据类型,可以持久化到目录中。请注意,特别是匿名、内联数据类型没有可序列化的字符串表示形式。在这种情况下,返回 NULL。 |
请注意,具体使用的函数取决于您的需求和数据类型。
集合函数
SQL Function | Table Function | Description |
---|---|---|
CARDINALITY(array) | ARRAY.cardinality() | 返回数组中元素的数量。 |
array ‘[’ INT ‘]’ | ARRAY.at(INT) | 返回数组中位置为INT的元素。索引从1开始。 |
ELEMENT(array) | ARRAY.element() | 返回数组的唯一元素(基数应为一),如果数组为空则返回NULL。如果数组有多个元素,则抛出异常。 |
CARDINALITY(map) | MAP.cardinality() | 返回map中条目的数量。 |
map ‘[’ value ‘]’ | MAP.at(ANY) | 返回map中由键值value指定的值。 |
ARRAY_CONTAINS(haystack, needle) | haystack.arrayContains(needle) | 返回给定元素在数组中是否存在。支持检查数组中的空元素。如果数组本身为null,则该函数将返回null。如果需要,将隐式地将给定元素转换为数组的元素类型。 |
ARRAY_DISTINCT(haystack) | haystack.arrayDistinct() | 返回一个包含唯一元素的数组。如果数组本身为null,则该函数将返回null。保留元素的顺序。 |
ARRAY_POSITION(haystack, needle) | haystack.arrayPosition(needle) | 返回给定值在给定数组中的第一次出现的位置作为int。如果在数组中找不到给定值,则返回0。如果任一参数为null,则返回null。索引不是从零开始,而是从1开始。数组中的第一个元素的索引为1。 |
ARRAY_REMOVE(haystack, needle) | haystack.arrayRemove(needle) | 从数组中删除所有等于给定元素的元素。如果数组本身为null,则该函数将返回null。保留元素的顺序。 |
ARRAY_REVERSE(haystack) | haystack.arrayReverse() | 返回逆序的数组。如果数组本身为null,则该函数将返回null。 |
ARRAY_SLICE(array, start_offset[, end_offset]) | array.arraySlice(start_offset[, end_offset]) | 返回输入数组中从“start_offset”到“end_offset”的子数组(包括“start_offset”和“end_offset”)。偏移量是基于1的,但0也被视为数组的开头。正值从数组的开头计数,负值从数组的末尾计数。如果省略了“end_offset”,则此偏移量被视为数组的长度。如果“start_offset”在“end_offset”之后或两者都超出数组边界,则返回一个空数组。如果任何输入为null,则返回null。 |
ARRAY_UNION(array1, array2) | haystack.arrayUnion(array) | 返回数组array1和array2的并集中的元素数组,不包含重复项。如果任何数组为null,则该函数将返回null。 |
ARRAY_CONCAT(array1, …) | array1.arrayConcat(…) | 返回由至少一个数组连接而成的数组。该数组包含第一个数组中的所有元素,后跟第二个数组中的所有元素,依此类推,直到第N个数组。如果任何输入数组为NULL,则该函数返回NULL。 |
ARRAY_MAX(array) | array.arrayMax() | 返回数组中的最大值,如果数组本身为null,则该函数返回null。 |
ARRAY_JOIN(array, delimiter[, nullReplacement]) | array.arrayJoin(delimiter[, nullReplacement]) | 返回一个字符串,表示给定数组中的元素和元素的数据类型。数组中的元素必须是字符串类型。分隔符是用于分隔数组中连续元素对的字符串。可选的nullReplacement是替换数组中的null元素的字符串。如果未指定nullReplacement,则结果字符串中将省略数组中的null元素。如果输入的数组、分隔符或nullReplacement为null,则返回null。 |
MAP_KEYS(map) | MAP.mapKeys() | 返回map的键作为数组。不保证顺序。 |
MAP_VALUES(map) | MAP.mapValues() | 返回map的值作为数组。不保证顺序。 |
MAP_ENTRIES(map) | MAP.mapEntries() | 返回给定map中所有条目的数组。不保证顺序。 |
MAP_FROM_ARRAYS(array_of_keys, array_of_values) | mapFromArrays(array_of_keys, array_of_values) | 从键和值的数组创建一个map。注意,两个数组的长度应相同。 |
JSON 函数
SQL Function | Table Function | Description |
---|---|---|
IS JSON [ { VALUE | SCALAR | ARRAY |
JSON_EXISTS(jsonValue, path [ { TRUE | FALSE | UNKNOWN |
JSON_STRING(value) | jsonString(value) | 将值序列化为JSON字符串。 |
JSON_VALUE(jsonValue, path [RETURNING ] [ { NULL | ERROR | DEFAULT } ON EMPTY ] [ { NULL |
JSON_QUERY(jsonValue, path [ { WITHOUT | WITH CONDITIONAL | WITH UNCONDITIONAL } [ ARRAY ] WRAPPER ] [ { NULL |
JSON_OBJECT([[KEY] key VALUE value]* [ { NULL | ABSENT } ON NULL ]) | jsonObject(JsonOnNull, keyValues…) |
JSON_ARRAY([value]* [ { NULL | ABSENT } ON NULL ]) | jsonArray(JsonOnNull, values…) |
Value Construction Functions
SQL Function | Table Function | Description |
---|---|---|
implicit constructor with parenthesis (value1 [, value2]*) | row(ANY1, ANY2, …) | 返回由值列表(value1,value2,…)创建的行。 |
explicit ROW constructor with ROW(value1 [, value2]*) | N/A | 返回由值列表(value1,value2,…)创建的行。 |
row(ANY1, ANY2, …) | N/A | 返回由值列表(value1,value2,…)创建的行。 |
ARRAY ‘[’ value1 [, value2 ]* ‘]’ | array(ANY1, ANY2, …) | 返回由值列表(value1,value2,…)创建的数组。 |
MAP ‘[’ value1, value2 [, value3, value4 ]* ‘]’ | map(ANY1, ANY2, ANY3, ANY4, …) | 返回由键值对列表((value1,value2),(value3,value4),…)创建的map。 |
N/A | NUMERIC.rows | 创建NUMERIC行间隔(在窗口创建中常用)。 |
Value Access Functions
SQL Function | Table Function | Description |
---|---|---|
tableName.compositeType.field | COMPOSITE.get(STRING) | 通过名称从Flink复合类型(例如Tuple、POJO)中返回字段的值。 |
tableName.compositeType.* | ANY.flatten() | 返回Flink复合类型(例如Tuple、POJO)的扁平表示形式,将其每个直接子类型转换为单独的字段。大多数情况下,扁平表示形式的字段与原始字段的命名方式相似,但使用美元分隔符(例如mypojo m y t u p l e mytuple mytuplef0)。 |
GROUP_ID() | N/A | 返回唯一标识分组键组合的整数。 |
GROUPING(expression1 [, expression2]* ) GROUPING_ID(expression1 [, expression2]* ) | N/A | 返回给定分组表达式的位向量。 |
哈希函数
SQL Function | Table Function | Description |
---|---|---|
MD5(string) | STRING.md5() | 返回字符串string的MD5哈希值,以32个十六进制数字的字符串表示;如果string为NULL,则返回NULL。 |
SHA1(string) | STRING.sha1() | 返回字符串string的SHA-1哈希值,以40个十六进制数字的字符串表示;如果string为NULL,则返回NULL。 |
SHA224(string) | STRING.sha224() | 返回字符串string的SHA-224哈希值,以56个十六进制数字的字符串表示;如果string为NULL,则返回NULL。 |
SHA256(string) | STRING.sha256() | 返回字符串string的SHA-256哈希值,以64个十六进制数字的字符串表示;如果string为NULL,则返回NULL。 |
SHA384(string) | STRING.sha384() | 返回字符串string的SHA-384哈希值,以96个十六进制数字的字符串表示;如果string为NULL,则返回NULL。 |
SHA512(string) | STRING.sha512() | 返回字符串string的SHA-512哈希值,以128个十六进制数字的字符串表示;如果string为NULL,则返回NULL。 |
SHA2(string, hashLength) | STRING.sha2(INT) | 使用SHA-2哈希函数(SHA-224、SHA-256、SHA-384或SHA-512)返回哈希值。第一个参数string是要进行哈希处理的字符串,第二个参数hashLength是结果的位数(224、256、384或512)。如果string或hashLength为NULL,则返回NULL。 |
Auxiliary Functions
N/A
聚合函数
聚合函数将表达式应用于所有行,并返回单个聚合值作为结果。
SQL 函数 | Table 函数 | 描述 |
---|---|---|
COUNT([ ALL ] expression | DISTINCT expression1 [, expression2]*) | N/A | 默认情况下或使用 ALL 时,返回表达式不为 NULL 的输入行数。使用 DISTINCT 以获取每个值的唯一实例。 |
COUNT(*) COUNT(1) | FIELD.count | 返回输入行数。 |
AVG([ ALL | DISTINCT ] expression) | FIELD.avg | 默认情况下或使用 ALL 关键字,返回所有输入行上表达式的平均值(算术平均)。使用 DISTINCT 以获取每个值的唯一实例。 |
SUM([ ALL | DISTINCT ] expression) | FIELD.sum | 默认情况下或使用 ALL 关键字,返回所有输入行上表达式的总和。使用 DISTINCT 以获取每个值的唯一实例。 |
N/A | FIELD.sum0 | 返回字段 FIELD 在所有输入行上的数字总和。如果所有值都为 NULL,则返回 0。 |
MAX([ ALL | DISTINCT ] expression) | FIELD.max | 默认情况下或使用 ALL 关键字,返回所有输入行上表达式的最大值。使用 DISTINCT 以获取每个值的唯一实例。 |
MIN([ ALL | DISTINCT ] expression ) | FIELD.min | 默认情况下或使用 ALL 关键字,返回所有输入行上表达式的最小值。使用 DISTINCT 以获取每个值的唯一实例。 |
STDDEV_POP([ ALL | DISTINCT ] expression) | FIELD.stddevPop | 默认情况下或使用 ALL 关键字,返回所有输入行上表达式的总体标准差。使用 DISTINCT 以获取每个值的唯一实例。 |
STDDEV_SAMP([ ALL | DISTINCT ] expression) | FIELD.stddevSamp | 默认情况下或使用 ALL 关键字,返回所有输入行上表达式的样本标准差。使用 DISTINCT 以获取每个值的唯一实例。 |
VAR_POP([ ALL | DISTINCT ] expression) | FIELD.varPop | 默认情况下或使用 ALL 关键字,返回所有输入行上表达式的总体方差(总体标准差的平方)。使用 DISTINCT 以获取每个值的唯一实例。 |
VAR_SAMP([ ALL | DISTINCT ] expression) | FIELD.varSamp | 默认情况下或使用 ALL 关键字,返回所有输入行上表达式的样本方差(样本标准差的平方)。使用 DISTINCT 以获取每个值的唯一实例。 |
COLLECT([ ALL | DISTINCT ] expression) | FIELD.collect | 默认情况下或使用 ALL 关键字,返回表达式在所有输入行上的多集合。将忽略 NULL 值。使用 DISTINCT 以获取每个值的唯一实例。 |
VARIANCE([ ALL | DISTINCT ] expression) | N/A | VAR_SAMP 的同义词。 |
RANK() | N/A | 返回值在一组值中的排名。结果是当前行在分区排序中的前导或相等行数加 1。该值会导致序列中出现间隙。 |
DENSE_RANK() | N/A | 返回值在一组值中的排名。结果是先前分配的排名值加 1。与 rank 函数不同,dense_rank 不会在排名序列中产生间隙。 |
ROW_NUMBER() | N/A | 根据窗口内行的顺序,为每行分配一个唯一的连续编号,从 1 开始。ROW_NUMBER 和 RANK 类似。ROW_NUMBER 顺序编号所有行(例如 1、2、3、4、5)。RANK 对于平局提供相同的数字值(例如 1、2、2、4、5)。 |
LEAD(expression [, offset] [, default]) | N/A | 返回窗口中当前行之后偏移量行处表达式的值。offset 的默认值为 1,default 的默认值为 NULL。 |
LAG(expression [, offset] [, default]) | N/A | 返回窗口中当前行之前偏移量行处表达式的值。offset 的默认值为 1,default 的默认值为 NULL。 |
FIRST_VALUE(expression) | FIELD.firstValue | 返回有序值集中的第一个值。 |
LAST_VALUE(expression) | FIELD.lastValue | 返回有序值集中的最后一个值。 |
LISTAGG(expression [, separator]) | FIELD.listagg | 将字符串表达式的值连接起来,并在它们之间放置分隔符值。在字符串的末尾不添加分隔符。分隔符的默认值为“,”。 |
CUME_DIST() | N/A | 返回一组值中某个值的累积分布。结果是在分区排序中位于当前行之前或等于当前行的行数除以窗口分区中的行数。 |
PERCENT_RANK() | N/A | 返回一组值中某个值的百分比排名。结果是排名值减 1,除以分区中的行数减 1。如果分区只包含一行,则该函数将返回 0。 |
NTILE(n) | N/A | 将每个窗口分区的行划分为从 1 到最多 n 的桶。如果窗口分区中的行数不能整除为桶数,则余数值将从第一个桶开始分配,每个桶一个。例如,对于 6 行和 4 个桶,桶值如下:1 1 2 2 3 4 |
JSON_OBJECTAGG([KEY] key VALUE value [ { NULL | ABSENT } ON NULL ]) | jsonObjectAgg(JsonOnNull, keyExpression, valueExpression) |
JSON_ARRAYAGG([ { NULL | ABSENT } ON NULL ]) | jsonArrayAgg(JsonOnNull, itemExpression) | 通过将项聚合到数组中来构建 JSON 对象字符串。项表达式可以是任意类型,包括其他 JSON 函数。如果值为 NULL,则使用 ON NULL 定义的行为。默认情况下,假设 ABSENT ON NULL。该函数目前不支持在 OVER 窗口、无界会话窗口或跳转窗口中使用。 |
时间间隔和时间点单位规范
以下表格列出了时间间隔和时间点单位的规范。
对于 Table API,请在空格处使用下划线(例如,DAY_TO_HOUR)。
时间间隔单位 | 时间点单位 |
---|---|
MILLENNIUM | |
CENTURY | |
DECADE | |
YEAR | YEAR |
YEAR TO MONTH | |
QUARTER | QUARTER |
MONTH | MONTH |
WEEK | WEEK |
DAY | DAY |
DAY TO HOUR | |
DAY TO MINUTE | |
DAY TO SECOND | |
HOUR | HOUR |
HOUR TO MINUTE | |
HOUR TO SECOND | |
MINUTE | MINUTE |
MINUTE TO SECOND | |
SECOND | SECOND |
MILLISECOND | MILLISECOND |
MICROSECOND | MICROSECOND |
NANOSECOND | |
EPOCH | |
DOY (仅 SQL) | |
DOW (仅 SQL) | |
EPOCH (仅 SQL) | |
ISODOW (仅 SQL) | |
ISOYEAR (仅 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) |
列函数
列函数用于选择或取消选择表的列。
列函数仅在 Table API 中使用。
语法 | 描述 |
---|---|
withColumns(…) | 选择指定的列 |
withoutColumns(…) | 取消选择指定的列 |
withAllColumns() | 选择所有列(类似于 SQL 中的 SELECT *) |
详细的语法如下:
columnFunction:
withColumns(columnExprs)
withoutColumns(columnExprs)
withAllColumns()
columnExprs:
columnExpr [, columnExpr]*
columnExpr:
columnRef | columnIndex to columnIndex | columnName to columnName
columnRef:
columnName(存在于表中的字段名称) | columnIndex(从 1 开始的正整数)
列函数的用法示例如下表所示(假设我们有一个包含 5 列的表:(a: Int, b: Long, c: String, d:String, e: String)):
API | 用法 | 描述 |
---|---|---|
withColumns($(*)) | select(withColumns( ( " ∗ " ) ) ) = s e l e c t ( ("*"))) = select( ("∗")))=select((“a”), $(“b”), $(“c”), $(“d”), $(“e”)) | 选择所有列 |
withColumns(m to n) | select(withColumns(range(2, 4))) = select($(“b”), $(“c”), $(“d”)) | 选择从 m 到 n 的列 |
withColumns(m, n, k) | select(withColumns(lit(1), lit(3), ( “ e ” ) ) ) = s e l e c t ( (“e”))) = select( (“e”)))=select((“a”), $(“c”), $(“e”)) | 选择列 m、n、k |
withColumns(m, n to k) | select(withColumns(lit(1), range(3, 5))) = select($(“a”), $(“c”), $(“d”), $(“e”)) | 上述两种表示方法的混合 |
withoutColumns(m to n) | select(withoutColumns(range(2, 4))) = select($(“a”), $(“e”)) | 取消选择从 m 到 n 的列 |
withoutColumns(m, n, k) | select(withoutColumns(lit(1), lit(3), lit(5))) = select($(“b”), $(“d”)) | 取消选择列 m、n、k |
withoutColumns(m, n to k) | select(withoutColumns(lit(1), range(3, 5))) = select($(“b”)) | 上述两种表示方法的混合 |
列函数可用于需要列字段的所有地方,如 select、groupBy、orderBy、UDF 等。
例如:
table
.groupBy(withColumns(range(1, 3)))
.select(withColumns(range("a", "b")), myUDAgg(myUDF(withColumns(range(5, 20)))));
请注意,具体使用的函数取决于您的需求和数据类型。