系统(内置)函数

Flink Table API & SQL 为用户提供了一组内置的数据转换函数。本页简要介绍了它们。如果你需要的函数尚不支持,你可以实现 用户自定义函数。如果你觉得这个函数够通用,请 创建一个 Jira issue并详细 说明。

标量函数

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

比较函数

SQL 函数Table 函数描述
value1 = value2value1 === value2如果 value1 等于 value2 返回 TRUE;如果 value1 或者 value2 为 NULL 返回 UNKNOW
value1 <> value2value1 !== value2如果 value1 不等于 value2 返回 TRUE;如果 value1 或 value2 为 NULL 返回 UNKNOWN
value1 > value2value1 > value2如果 value1 大于 value2 返回 TRUE;如果 value1 或 value2 为 NULL 返回 UNKNOWN
value1 >= value2value1 >= value2如果 value1 大于或等于 value2 返回 TRUE;如果 value1 或 value2 为 NULL 返回 UNKNOWN
value1 < value2value1 < value2如果 value1 小于 value2 返回 TRUE;如果 value1 或 value2 为 NULL 返回 UNKNOWN
value1 <= value2value1 <= value2如果 value1 小于或等于 value2 返回 TRUE;如果 value1 或 value2 为 NULL 返回 UNKNOWN
value IS NULLvalue.isNull如果值为 NULL 返回 TRUE
value IS NOT NULLvalue.isNotNull如果值不为 NULL 返回 TRUE
value1 IS DISTINCT FROM value2不适用A 和 B 的数据类型和值不完全相同返回 TRUE。A 和 B 的数据类型和值都相同返回 FALSE。将 NULL 视为相同。 例如 1 IS DISTINCT FROM NULL 返回 TRUENULL IS DISTINCT FROM NULL 返回 FALSE
value1 IS NOT DISTINCT FROM value2不适用A 和 B 的数据类型和值都相同返回 TRUE。A 和 B 的数据类型和值不完全相同则返回 FALSE。将 NULL 视为相同。 例如 1 IS NOT DISTINCT FROM NULL 返回 FALSENULL IS NOT DISTINCT FROM NULL 返回 TRUE
value1 BETWEEN [ ASYMMETRIC | SYMMETRIC ] value2 AND value3不适用默认或使用 ASYMMETRIC 关键字的情况下,如果 value1 大于等于 value2 且小于等于 value3 返回 TRUE。 使用 SYMMETRIC 关键字则 value1 在 value2 和 value3 之间返回 TRUE。 当 value2 或 value3 为 NULL 时,返回 FALSEUNKNOWN。 例如 12 BETWEEN 15 AND 12 返回 FALSE12 BETWEEN SYMMETRIC 15 AND 12 返回 TRUE12 BETWEEN 10 AND NULL 返回 UNKNOWN12 BETWEEN NULL AND 10 返回 FALSE12 BETWEEN SYMMETRIC NULL AND 12 返回 UNKNOWN
value1 NOT BETWEEN [ ASYMMETRIC | SYMMETRIC ] value2 AND value3不适用默认或使用 ASYMMETRIC 关键字的情况下,如果 value1 小于 value2 或大于 value3,则返回 TRUE。 使用 SYMMETRIC 关键字则 value1 不在 value2 和 value3 之间返回 TRUE。 当 value2 或 value3 为 NULL 时,返回 TRUEUNKNOWN。 例如 12 NOT BETWEEN 15 AND 12 返回 TRUE12 NOT BETWEEN SYMMETRIC 15 AND 12 返回 FALSE12 NOT BETWEEN NULL AND 15 返回 UNKNOWN12 NOT BETWEEN 15 AND NULL 返回 TRUE12 NOT BETWEEN SYMMETRIC 12 AND NULL 返回 UNKNOWN
string1 LIKE string2 [ ESCAPE char ]string1.like(string2)如果 string1 匹配 string2 返回 TRUE;如果 string1 或 string2 为 NULL 返回 UNKNOWN。 如果需要可以定义转义字符。尚不支持转义字符。
string1 NOT LIKE string2 [ ESCAPE char ]不适用如果 string1 与 string2 不匹配返回 TRUE;如果 string1 或 string2 为 NULL 返回 UNKNOWN。 如果需要可以定义转义字符。尚不支持转义字符。
string1 SIMILAR TO string2 [ ESCAPE char ]string1.similar(string2)如果 string1 匹配 SQL 正则表达式 string2 返回 TRUE;如果 string1 或 string2 为 NULL 返回 UNKNOWN。如果需要可以定义转义字符。尚不支持转义字符。
string1 NOT SIMILAR TO string2 [ ESCAPE char ]不适用如果 string1 与 SQL 正则表达式 string2 不匹配返回 TRUE;如果 string1 或 string2 为 NULL 返回 UNKNOWN。如果需要可以定义转义字符。尚不支持转义字符。
value1 IN (value2 [, value3] )value1.in(valu2)在给定列表 (value2, value3, …) 中存在 value1 返回 TRUE。当列表包含 NULL,如果可以找到 value1 则返回 TRUE,否则返回 UNKNOWN。如果 value1 为 NULL 则始终返回 UNKNOWN。例如 4 IN (1, 2, 3) 返回 FALSE1 IN (1, 2, NULL) 返回 TRUE4 IN (1, 2, NULL) 返回 UNKNOWN
value1 NOT IN (value2 [, value3] )不适用在给定列表 (value2, value3, …) 中不存在 value1 返回 TRUE。当列表包含 NULL,如果可以找到 value1 则 返回 FALSE,否则返回 UNKNOWN。如果 value1 为 NULL,则始终返回 UNKNOWN。例如 4 NOT IN (1, 2, 3) 返回 TRUE1 NOT IN (1, 2, NULL) 返回 FALSE4 NOT IN (1, 2, NULL) 返回 UNKNOWN
EXISTS (sub-query)不适用如果子查询至少返回一行则返回 TRUE。 仅支持可以在 join 和分组操作中可以被重写的操作。对于流式查询,该操作在 join 和分组操作中被重写。根据输入行的数量计算查询结果所需的状态可能会无限增长。请提供具有有效保留间隔的查询配置,以防止状态过大。
value IN (sub-query)value1.in(TABLE)如果 value 等于子查询结果集中的一行则返回 TRUE
value NOT IN (sub-query)不适用如果 value 不包含于子查询返回的行则返回 TRUE
不适用value1.between(value2, value3)如果 value1 大于或等于 value2 且小于或等于 value3 返回 TRUE。当 value2 或 value3 为 NULL 时, 返回 FALSEUNKNOWN
不适用value1.notBetween(value2, value3)如果 value1 大于或等于 value2 且小于或等于 value3 返回 FALSE。当 value2 或 value3 为 NULL 时, 返回 TRUEUNKNOWN

逻辑函数

SQL 函数Table 函数描述
boolean1 OR boolean2BOOLEAN1 || BOOLEAN2如果 boolean1 为 TRUE 或 boolean2 为 TRUE 返回 TRUE。支持三值逻辑。 例如 true || Null(BOOLEAN) 返回 TRUE
boolean1 AND boolean2BOOLEAN1 && BOOLEAN2如果 boolean1 和 boolean2 都为 TRUE 返回 TRUE。支持三值逻辑。 例如 true && Null(BOOLEAN) 返回 UNKNOWN
NOT booleanBOOLEAN.not(), not(BOOLEAN), or ‘!BOOLEAN’ (Scala only)如果布尔值为 FALSE 返回 TRUE;如果布尔值为 TRUE 返回 FALSE;如果布尔值为 UNKNOWN 返回 UNKNOWN
boolean IS FALSEBOOLEAN.isFalse如果布尔值为 FALSE 返回 TRUE;如果 boolean 为 TRUEUNKNOWN 返回 FALSE
boolean IS NOT FALSEBOOLEAN.isNotFalse如果 boolean 为 TRUEUNKNOWN 返回 TRUE;如果 boolean 为 FALSE 返回 FALSE
boolean IS TRUEBOOLEAN.isTrue如果 boolean 为 TRUE 返回 TRUE;如果 boolean 为 FALSEUNKNOWN 返回 FALSE
boolean IS NOT TRUEBOOLEAN.isNotTrue如果 boolean 为 FALSEUNKNOWN 返回 TRUE;如果布尔值为 TRUE 返回 FALSE
boolean IS UNKNOWN不适用如果布尔值为 UNKNOWN 返回 TRUE;如果 boolean 为 TRUEFALSE 返回 FALSE
boolean IS NOT UNKNOWN不适用如果 boolean 为 TRUEFALSE 返回 TRUE;如果布尔值为 UNKNOWN 返回 FALSE

算术函数

SQL 函数Table 函数描述
+ numeric+ NUMERIC返回 numeric。
- numeric- NUMERIC返回 numeric 的相反数。
numeric1 + numeric2NUMERIC1 + NUMERIC2返回 numeric1 加 numeric2。
numeric1 - numeric2NUMERIC1 - NUMERIC2返回 numeric1 减 numeric2。
numeric1 numberic2NUMERIC1 NUMERIC2返回 numeric1 乘以 numeric2。
numeric1 / numeric2NUMERIC1 / NUMERIC2返回 numeric1 除以 numeric2。
numeric1 % numeric2MOD(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()返回以 10 为底的 numeric 的对数。
LOG2(numeric)NUMERIC.log2()返回以 2 为底的 numeric 的对数。
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 的最小整数。
FLOOR(numeric)NUMERIC.floor()向下取整,并返回小于或等于 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)返回 numeric 四舍五入保留 INT 小数位的值。
PI()pi()返回无比接近 pi 的值。
E()e()返回无比接近 e 的值。
RAND()rand()返回 [0.0, 1.0) 范围内的伪随机双精度值。
RAND(INT)rand(INT)返回范围为 [0.0, 1.0) 的伪随机双精度值,初始种子为 INT。 如果两个 RAND 函数具有相同的初始种子,它们将返回相同的数字序列。
RAND_INTEGER(INT)randInteger(INT)返回 [0, INT) 范围内的伪随机整数。
RAND_INTEGER(INT1, INT2)randInteger(INT1, INT2)返回范围为 [0, INT2) 的伪随机整数,初始种子为 INT1。 如果两个 RAND_INTGER 函数具有相同的初始种子和边界,它们将返回相同的数字序列。
UUID()uuid()根据 RFC 4122 类型 4(伪随机生成)UUID,返回 UUID(通用唯一标识符)字符串。 例如“3d3c68f7-f608-473f-b60c-b0c44ad4cc4e”,UUID 是使用加密强的伪随机数生成器生成的。
BIN(INT)INT.bin()以二进制格式返回 INTEGER 的字符串表示形式。如果 INTEGER 为 NULL,则返回 NULL。 例如 4.bin() 返回“100”,12.bin() 返回“1100”。
HEX(numeric) HEX(string)NUMERIC.hex() string.hex()以十六进制格式返回整数 numeric 值或 STRING 的字符串表示形式。如果参数为 NULL,则返回 NULL。 例如数字 20 返回“14”,数字 100 返回“64”,字符串“hello,world” 返回“68656C6C6F2C776F726C64”。
TRUNCATE(numeric1, integer2)NUMERIC1.truncate(INTEGER2)返回截取 integer2 位小数的数字。如果 numeric1 或 integer2 为 NULL,则返回 NULL。 如果 integer2 为 0,则结果没有小数点或小数部分。integer2 可以为负数,使值的小数点左边的 integer2 位变为零。 此函数也可以传入只有一个 numeric1 参数且不设置 Integer2 以使用。如果未设置 Integer2 则 Integer2 为 0。 例如 42.324.truncate(2) 为 42.32,42.324.truncate() 为 42.0。

字符串函数

SQL 函数Table 函数描述
string1 || string2STRING1 + STRING2返回 STRING1 和 STRING2 的连接。
CHAR_LENGTH(string) CHARACTER_LENGTH(string)STRING.charLength()返回字符串中的字符数。
UPPER(string)STRING.upperCase()以大写形式返回字符串。
LOWER(string)STRING.lowerCase()以小写形式返回字符串。
POSITION(string1 IN string2)STRING1.position(STRING2)返回 STRING2 中第一次出现 STRING1 的位置(从 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. ‘.ltrim() 返回 ‘This is a test String.’
REPEAT(string, int)STRING.repeat(INT)返回 INT 个 string 连接的字符串。 例如 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 所有与正则表达式 STRING2 匹配的子字符串被 STRING3 替换后的字符串。 例如 ‘foobar’.regexpReplace(‘oo|ar’, ‘’) 返回 “fb”
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)返回 STRING 从位置 INT1 开始,长度为 INT2(默认到结尾)的子字符串。
REPLACE(string1, string2, string3)STRING1.replace(STRING2, STRING3)返回一个新字符串,它用 STRING1 中的 STRING3(非重叠)替换所有出现的 STRING2。 例如 ‘hello world’.replace(‘world’, ‘flink’) 返回 ‘hello flink’‘ababab’.replace(‘abab’, ‘z’) 返回 ‘zab’
REGEXP_EXTRACT(string1, string2[, integer])STRING1.regexpExtract(STRING2[, INTEGER1])将字符串 STRING1 按照 STRING2 正则表达式的规则拆分,返回指定 INTEGER1 处位置的字符串。正则表达式匹配组索引从 1 开始, 0 表示匹配整个正则表达式。此外,正则表达式匹配组索引不应超过定义的组数。 例如 REGEXP_EXTRACT(‘foothebar’, ‘foo(.?)(bar)’, 2) 返回 “bar”
INITCAP(string)STRING.initCap()返回新形式的 STRING,其中每个单词的第一个字符转换为大写,其余字符转换为小写。这里的单词表示字母数字的字符序列。
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, …)返回将 STRING2, STRING3, … 与分隔符 STRING1 连接起来的字符串。在要连接的字符串之间添加分隔符。 如果 STRING1 为 NULL,则返回 NULL。与 concat() 相比,concat_ws() 会自动跳过 NULL 参数。 例如 concat_ws(‘~’, ‘AA’, Null(STRING), ‘BB’, ‘’, ‘CC’) 返回 “AA~BB~~CC”.
LPAD(string1, integer, string2)STRING1.lpad(INT, STRING2)返回从 string1 靠左填充 string2 到 INT 长度的新字符串。如果 string1 的长度小于 INT 值,则返回 string1 缩 短为整数字符。例如 LPAD(‘hi’, 4, ‘??’) 返回 “??hi”LPAD(‘hi’, 1, ‘??’) 返回 `“h”。
RPAD(string1, integer, string2)STRING1.rpad(INT, STRING2)返回从 string1 靠右边填充 string2 到 INT 长度的新字符串。如果 string1 的长度小于 INT 值,则返回 string1 缩 短为长度为 INT 的新字符串。例如 RPAD(‘hi’, 4, ‘??’) 返回 “hi??”, RPAD(‘hi’, 1, ‘??’) 返回 “h”
FROM_BASE64(string)STRING.fromBase64()返回字符串 string1 的 base64 解码的结果;如果字符串为 NULL,则返回 NULL。 例如 FROM_BASE64(‘aGVsbG8gd29ybGQ=’) 返回 “hello world”
TO_BASE64(string)STRING.toBase64()返回字符串 string 的 base64 编码的结果;如果字符串为 NULL,则返回 NULL。 例如 TO_BASE64(‘hello world’) 返回 “aGVsbG8gd29ybGQ=”
ASCII(string)STRING.ascii()返回字符串 string 第一个字符的数值。如果字符串为 NULL 则返回 NULL。 例如 ascii(‘abc’) 返回 97ascii(CAST(NULL AS VARCHAR)) 返回 NULL
CHR(integer)INT.chr()返回二进制等于 integer 的 ASCII 字符。如果整数 integer 大于 255,我们先将得到整数对 255 取模数, 并返回模数的 CHR。如果整数为 NULL,则返回 NULL。例如 chr(97) 返回 achr(353) 返回 aascii(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’)编码。 如果任一参数为空,则结果也将为空。
INSTR(string1, string2)STRING1.instr(STRING2)返回 string2 在 string1 中第一次出现的位置。如果有任一参数为 NULL,则返回 NULL
LEFT(string, integer)STRING.LEFT(INT)返回字符串中最左边的长度为 integer 值的字符串。如果 integer 为负,则返回 EMPTY 字符串。如果有任一参数 为 NULL 则返回 NULL
RIGHT(string, integer)STRING.RIGHT(INT)返回字符串中最右边的长度为 integer 值的字符串。如果 integer 为负,则返回 EMPTY 字符串。如果有任一参数 为 NULL 则返回 NULL
LOCATE(string1, string2[, integer])STRING1.locate(STRING2[, INTEGER])返回 string2 中 string1 在位置 integer 之后第一次出现的位置。未找到返回 0。如果有任一参数为 NULL 则返回 NULL
PARSE_URL(string1, string2[, string3])STRING1.parseUrl(STRING2[, STRING3])从 URL 返回指定的部分。string2 的有效值包括“HOST”,“PATH”,“QUERY”,“REF”,“PROTOCOL”,“AUTHORITY”,“FILE”和“USERINFO”。 如果有任一参数为 NULL,则返回 NULL。例如 parse_url(‘http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1‘, ‘HOST’) 返回 ‘facebook.com’。 还可以通过提供关键词 string3 作为第三个参数来提取 QUERY 中特定键的值。例如 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,则返回 NULL
REVERSE(string)STRING.reverse()返回反转的字符串。如果字符串为 NULL,则返回 NULL
SPLIT_INDEX(string1, string2, integer1)STRING1.splitIndex(STRING2, INTEGER1)通过分隔符 string2 拆分 string1,返回分隔后这组字符串的第 integer(从零开始)个字符串。如果整数为负,则返回 NULL。 如果有任一参数为 NULL,则返回 NULL
STR_TO_MAP(string1[, string2, string3])STRING1.strToMap([STRING2, STRING3])使用分隔符将 string1 拆分为键值对后返回一个 map。string2 是 pair 分隔符,默认为 ‘,’。string3 是键值分隔符,默认为 ‘=’。 pair 分隔符与键值分隔符均为正则表达式,当使用特殊字符作为分隔符时请提前进行转义,例如 <([{\^-=$!|]})?+.>
SUBSTR(string, integer1[, integer2])STRING.substr(INTEGER1[, INTEGER2])返回字符串的子字符串,从位置 integer1 开始,长度为 integer2(默认到末尾)。

时间函数

SQL 函数Table 函数描述
DATE stringSTRING.toDate()以“yyyy-MM-dd”的形式返回从字符串解析的 SQL 日期。
TIME stringSTRING.toTime()以“HH:mm:ss”的形式返回从字符串解析的 SQL 时间。
TIMESTAMP stringSTRING.toTimestamp()以“yyyy-MM-dd HH:mm:ss[.SSS]”的形式返回从字符串解析的 SQL 时间戳。
INTERVAL string range不适用从“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’ DAYINTERVAL ‘2-10’ YEAR TO MONTH 返回间隔。
不适用numeric.year | numeric.years创建 numeric 年的月间隔。
不适用numeric.quarter | numeric.quarters为 numeric 季度创建月间隔。例如 2.quarters 返回 6
不适用numeric.month | numeric.months创建 numeric 个月的间隔。
不适用numeric.week | numeric.weeks为 numeric 周创建毫秒间隔。例如 2.weeks 返回 1209600000。
不适用numeric.day | numeric.days创建 numeric 天的毫秒间隔。
不适用numeric.hour | numeric.hours创建 numeric 小时的毫秒间隔。
不适用numeric.minute | numeric.minutes创建 numeric 分钟的毫秒间隔。
不适用numeric.second | numeric.seconds创建 numeric 秒的毫秒间隔。
不适用numeric.milli | numeric.millis创建 numeric 毫秒的毫秒间隔。
LOCALTIMElocalTime()返回本地时区的当前 SQL 时间,返回类型为 TIME(0)。在流模式下为每条记录进行取值。 但在批处理模式下,它在查询开始时计算一次,并对每一行使用相同的结果。
LOCALTIMESTAMPlocalTimestamp()返回本地时区的当前 SQL 时间,返回类型为 TIMESTAMP(3)。在流模式下为每条记录进行取值。 但在批处理模式下,它在查询开始时计算一次,并对每一行使用相同的结果。
CURRENT_TIMEcurrentTime()返回本地时区的当前 SQL 时间,这是 LOCAL_TIME 的同义词。
CURRENT_DATEcurrentDate()返回本地时区中的当前 SQL 日期。在流模式下为每条记录进行取值。 但在批处理模式下,它在查询开始时计算一次,并对每一行使用相同的结果。
CURRENT_TIMESTAMPcurrentTimestamp()返回本地时区的当前 SQL 时间戳,返回类型为 TIMESTAMP_LTZ(3)。在流模式下为每条记录进行取值。 但在批处理模式下,它在查询开始时计算一次,并对每一行使用相同的结果。
NOW()不适用返回本地时区的当前 SQL 时间戳,这是 CURRENT_TIMESTAMP 的同义词。
CURRENT_ROW_TIMESTAMP()不适用返回本地时区的当前 SQL 时间戳,返回类型为 TIMESTAMP_LTZ(3)。无论是在批处理模式还是流模式下,都会为每条记录进行取值。
EXTRACT(timeinteravlunit FROM temporal)TEMPORAL.extract(TIMEINTERVALUNIT)返回从时间的时间间隔单位部分提取的 long 值。例如 EXTRACT(DAY FROM DATE ‘2006-06-05’) 返回 5。
YEAR(date)不适用从 SQL 日期 date 返回年份。相当于 EXTRACT(YEAR FROM date)。例如 YEAR(DATE ‘1994-09-27’) 返回 1994。
QUARTER(date)不适用从 SQL 日期 date 返回一年中的季度(1 到 4 之间的整数)。相当于 EXTRACT(QUARTER FROM date)。 例如 QUARTER(DATE ‘1994-09-27’) 返回 3。
MONTH(date)不适用从 SQL 日期 date 返回一年中的月份(1 到 12 之间的整数)。相当于 EXTRACT(MONTH FROM date)。 例如 MONTH(DATE ‘1994-09-27’) 返回 9。
WEEK(date)不适用从 SQL 日期 date 返回一年中的第几周(1 到 53 之间的整数)。相当于 EXTRACT(WEEK FROM date)。 例如 WEEK(DATE ‘1994-09-27’) 返回 39。
DAYOFYEAR(date)不适用从 SQL 日期 date 返回一年中的第几天(1 到 366 之间的整数)。相当于 EXTRACT(DOY FROM date)。 例如 DAYOFYEAR(DATE ‘1994-09-27’) 返回 270。
DAYOFMONTH(date)不适用从 SQL 日期 date 返回一个月中的第几天(1 到 31 之间的整数)。相当于 EXTRACT(DAY FROM date)。 例如 DAYOFMONTH(DATE ‘1994-09-27’) 返回 27。
DAYOFWEEK(date)不适用从 SQL 日期 date 返回一个星期中的第几天(1 到 7 之间的整数)。相当于 EXTRACT(DOW FROM date)。 例如 DAYOFWEEK(DATE ‘1994-09-27’) 返回 3。
HOUR(timestamp)不适用从 SQL 时间戳 timestamp 返回小时单位部分的小时(0 到 23 之间的整数)数。相当于 EXTRACT(HOUR FROM timestamp)。 例如 MINUTE(TIMESTAMP ‘1994-09-27 13:14:15’) 返回 14。
MINUTE(timestamp)不适用从 SQL 时间戳 timestamp 返回分钟单位的分钟数(0 到 59 之间的整数)。相当于 EXTRACT(MINUTE FROM timestamp)。 例如 MINUTE(TIMESTAMP ‘1994-09-27 13:14:15’) 返回 14。
SECOND(timestamp)不适用从 SQL 时间戳 timestamp 返回秒单位部分的秒数(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(timespoint TO timeintervaluntit)TIMEPOINT.ceil(TIMEINTERVALUNIT)返回将时间点 timespoint 向上取值到时间单位 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。 时间值可以是时间点或时间间隔。例如 (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)不适用将时间戳 timestamp 转换为日期格式字符串 string 指定格式的字符串值。格式字符串与 Java 的 SimpleDateFormat 兼容。
TIMESTAMPADD(timeintervalunit, interval, timepoint)不适用
TIMESTAMPDIFF(timepointunit, timepoint1, timepoint2)timestampDiff(TIMEPOINTUNIT, TIMEPOINT1, TIMEPOINT2)返回 timepoint1 和 timepoint2 之间时间间隔。间隔的单位由第一个参数给出,它应该是以下值之一: SECOND,MINUTE,HOUR,DAY,MONTH 或 YEAR。
CONVERT_TZ(string1, string2, string3)不适用将日期时间 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])以字符串格式 string 返回数字参数 numberic 的表示形式(默认为 ‘yyyy-MM-dd HH:mm:ss’)。numeric 是一个内部 时间戳值,表示自’1970-01-01 00:00:00’ UTC 以来的秒数,由 UNIX_TIMESTAMP() 函数生成。返回值以会话时区表示 (在 TableConfig 中指定)。例如,如果在 UTC 时区,FROM_UNIXTIME(44) 返回 ‘1970-01-01 00:00:44’,如果在 ‘Asia/Tokyo’ 时区,则返回 ‘1970-01-01 09:00:44’。
UNIX_TIMESTAMP()不适用以秒为单位获取当前的 Unix 时间戳。此函数不是确定性的,这意味着将为每个记录重新计算该值。
UNIX_TIMESTAMP(string1[, string2])不适用使用表配置中指定的时区将格式为 string2 的日期时间字符串 string1(如果未指定默认情况下:yyyy-MM-dd HH:mm:ss) 转换为 Unix 时间戳(以秒为单位)。
TO_DATE(string1[, string2])不适用将格式为 string2(默认为 ‘yyyy-MM-dd’)的字符串 string1 转换为日期。
TO_TIMESTAMP_LTZ(numeric, precision)toTimestampLtz(numeric, PRECISION)将纪元秒或纪元毫秒转换为 TIMESTAMP_LTZ,有效精度为 0 或 3,0 代表 TO_TIMESTAMP_LTZ(epochSeconds, 0), 3 代表 TO_TIMESTAMP_LTZ(epochMilliseconds, 3)
TO_TIMESTAMP(string1[, string2])不适用将 ‘UTC+0’ 时区下格式为 string2(默认为:‘yyyy-MM-dd HH:mm:ss’)的字符串 string1 转换为时间戳。
CURRENT_WATERMARK(rowtime)不适用

返回给定时间列属性 rowtime 的当前水印,如果管道中的当前操作没有可用的上游操作的公共水印时则为 NULL。 函数的返回类型被推断为与提供的时间列属性匹配,但调整后的精度为 3。例如时间列属性为 TIMESTAMP_LTZ(9),则函数将返回 TIMESTAMP_LTZ(3)。

请注意,此函数可以返回 NULL,您可能必须考虑这种情况。例如,如果您想过滤掉后期数据,您可以使用:

  1. WHERE
  2. CURRENT_WATERMARK(ts) IS NULL
  3. 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不适用当第一个时间值包含在 (valueX_1, valueX_2, …) 中时,返回 resultX。当没有值匹配时,如果提供则返回 result_z, 否则返回 NULL
CASE WHEN condition1 THEN result1 (WHEN condition2 THEN result2) (ELSE result_z) END不适用满足第一个条件 X 时返回 resultX。当不满足任何条件时,如果提供则返回 result_z,否则返回 NULL
NULLIF(value1, value2)不适用如果 value1 等于 value2 返回 NULL;否则返回 value1。例如 NULLIF(5, 5) 返回 NULLNULLIF(5, 0) 返回 5。
COALESCE(value1, value2 [, value3])不适用从 value1, value2, … 返回第一个不为 NULL 的值。例如 COALESCE(3, 5, 3) 返回 3。
IF(condition, true_value, false_value)不适用如果满足条件,则返回 true_value,否则返回 false_value。例如 IF(5 > 3, 5, 3) 返回 5。
IFNULL(input, null_replacement)input.ifNull(nullReplacement)如果输入为 NULL,则返回 null_replacement;否则返回输入。与 COALESCE 或 CASE WHEN 相比,此函数返回的数据类型 在是否为空方面非常明确。。返回的类型是两个参数的公共类型,但只有在 null_replacement 可为空时才能为空。该函数允许将可 为空的列传递到使用 NOT NULL 约束声明的函数或表中。例如 IFNULL(nullable_column, 5) 一定不返回 NULL
IS_ALPHA(string)不适用如果字符串中的所有字符都是字母,则返回 true,否则返回 false
IS_DECIMAL(string)不适用如果 string 可以解析为有效数字,则返回 true,否则返回 false
IS_DIGIT(string)不适用如果字符串中的所有字符都是数字,则返回 true,否则返回 false
不适用BOOLEAN.?(VALUE1, VALUE2)如果 BOOLEAN 计算结果为 TRUE,则返回 VALUE1;否则返回 VALUE2。例如 (42 > 5).?(‘A’, ‘B’) 返回 “A”
GREATEST(value1[, value2])不适用返回所有输入参数的最大值,如果输入参数中包含 NULL,则返回 NULL。
LEAST(value1[, value2]*)不适用返回所有输入参数的最小值,如果输入参数中包含 NULL,则返回 NULL。

类型转换函数

SQL 函数Table 函数描述
CAST(value AS type)ANY.cast(TYPE)返回被强制转换为类型 type 的新值。例如 CAST(‘42’ AS INT) 返回 42; CAST(NULL AS VARCHAR) 返回 VARCHAR 类型的 NULL
TYPEOF(input) | TYPEOF(input, force_serializable)call(“TYPEOF”, input) | call(“TYPEOF”, input, force_serializable)返回输入表达式的数据类型的字符串表示形式。默认情况下返回的字符串是一个摘要字符串,可能会为了可读性而省略某些细节。 如果 force_serializable 设置为 TRUE,则字符串表示可以保留在目录中的完整数据类型。请注意, 特别是匿名的内联数据类型没有可序列化的字符串表示。在这种情况下返回 NULL

集合函数

SQL 函数Table 函数描述
CARDINALITY(array)ARRAY.cardinality()返回数组中元素的数量。
array ‘[‘ INT ‘]’ARRAY.at(INT)返回数组中 INT 位置的元素。索引从 1 开始。
ELEMENT(array)ARRAY.element()返回数组的唯一元素(其基数应为 1);如果数组为空,则返回 NULL。如果数组有多个元素,则抛出异常。
CARDINALITY(map)MAP.cardinality()返回 map 中的 entries 数量。
map ‘[’ value ‘]’MAP.at(ANY)返回 map 中指定 key 对应的值。

JSON Functions

JSON functions make use of JSON path expressions as described in ISO/IEC TR 19075-6 of the SQL standard. Their syntax is inspired by and adopts many features of ECMAScript, but is neither a subset nor superset thereof.

Path expressions come in two flavors, lax and strict. When omitted, it defaults to the strict mode. Strict mode is intended to examine data from a schema perspective and will throw errors whenever data does not adhere to the path expression. However, functions like JSON_VALUE allow defining fallback behavior if an error is encountered. Lax mode, on the other hand, is more forgiving and converts errors to empty sequences.

The special character $ denotes the root node in a JSON path. Paths can access properties ($.a), array elements ($.a[0].b), or branch over all elements in an array ($.a[*].b).

Known Limitations:

  • Not all features of Lax mode are currently supported correctly. This is an upstream bug (CALCITE-4717). Non-standard behavior is not guaranteed.
SQL FunctionTable FunctionDescription
IS JSON [ { VALUE | SCALAR | ARRAY | OBJECT } ]STRING.isJson([JsonType type])

Determine whether a given string is valid JSON.

Specifying the optional type argument puts a constraint on which type of JSON object is allowed. If the string is valid JSON, but not that type, false is returned. The default is VALUE.

  1. TRUE
  2. 1 IS JSON
  3. ‘[]’ IS JSON
  4. ‘{}’ IS JSON
  5. TRUE
  6. ‘“abc”‘ IS JSON
  7. FALSE
  8. abc IS JSON
  9. NULL IS JSON
  10. TRUE
  11. 1 IS JSON SCALAR
  12. FALSE
  13. 1 IS JSON ARRAY
  14. FALSE
  15. 1 IS JSON OBJECT
  16. FALSE
  17. ‘{}’ IS JSON SCALAR
  18. FALSE
  19. ‘{}’ IS JSON ARRAY
  20. TRUE
  21. ‘{}’ IS JSON OBJECT
JSON_EXISTS(jsonValue, path [ { TRUE | FALSE | UNKNOWN | ERROR } ON ERROR ])STRING.jsonExists(STRING path [, JsonExistsOnError onError])

Determines whether a JSON string satisfies a given path search criterion.

If the error behavior is omitted, FALSE ON ERROR is assumed as the default.

  1. TRUE
  2. SELECT JSON_EXISTS(‘{“a”: true}’, $.a’);
  3. FALSE
  4. SELECT JSON_EXISTS(‘{“a”: true}’, $.b’);
  5. TRUE
  6. SELECT JSON_EXISTS(‘{“a”: [{ b”: 1 }]}’,
  7. $.a[0].b’);
  8. TRUE
  9. SELECT JSON_EXISTS(‘{“a”: true}’,
  10. strict $.b TRUE ON ERROR);
  11. FALSE
  12. SELECT JSON_EXISTS(‘{“a”: true}’,
  13. strict $.b FALSE ON ERROR);
JSON_STRING(value)jsonString(value)

Serializes a value into JSON.

This function returns a JSON string containing the serialized value. If the value is NULL, the function returns NULL.

  1. NULL
  2. JSON_STRING(CAST(NULL AS INT))
  3. 1
  4. JSON_STRING(1)
  5. true
  6. JSON_STRING(TRUE)
  7. ‘“Hello, World!”‘
  8. JSON_STRING(‘Hello, World!’)
  9. ‘[1,2]’
  10. JSON_STRING(ARRAY[1, 2])
JSON_VALUE(jsonValue, path [RETURNING <dataType>] [ { NULL | ERROR | DEFAULT <defaultExpr> } ON EMPTY ] [ { NULL | ERROR | DEFAULT <defaultExpr> } ON ERROR ])STRING.jsonValue(STRING path [, returnType, onEmpty, defaultOnEmpty, onError, defaultOnError])

Extracts a scalar from a JSON string.

This method searches a JSON string for a given path expression and returns the value if the value at that path is scalar. Non-scalar values cannot be returned. By default, the value is returned as STRING. Using returningType a different type can be chosen, with the following types being supported:

  • VARCHAR / STRING
  • BOOLEAN
  • INTEGER
  • DOUBLE

For empty path expressions or errors a behavior can be defined to either return null, raise an error or return a defined default value instead. When omitted, the default is NULL ON EMPTY or NULL ON ERROR, respectively. The default value may be a literal or an expression. If the default value itself raises an error, it falls through to the error behavior for ON EMPTY, and raises an error for ON ERROR.

For path contains special characters such as spaces, you can use [‘property’] or [“property”] to select the specified property in a parent object. Be sure to put single or double quotes around the property name. When using JSON_VALUE in SQL, the path is a character parameter which is already single quoted, so you have to escape the single quotes around property name, such as JSON_VALUE(‘{“a b”: “true”}’, ‘$.[‘’a b’’]’).

  1. true
  2. JSON_VALUE(‘{“a”: true}’, $.a’)
  3. TRUE
  4. JSON_VALUE(‘{“a”: true}’, $.a RETURNING BOOLEAN)
  5. false
  6. JSON_VALUE(‘{“a”: true}’, lax $.b
  7. DEFAULT FALSE ON EMPTY)
  8. false
  9. JSON_VALUE(‘{“a”: true}’, strict $.b
  10. DEFAULT FALSE ON ERROR)
  11. 0.998D
  12. JSON_VALUE(‘{“a.b”: [0.998,0.996]}’,’$.[“a.b”][0]’
  13. RETURNING DOUBLE)
  14. right
  15. JSON_VALUE(‘{“contains blank”: right”}’, strict $.[‘’contains blank’’]’ NULL ON EMPTY DEFAULT wrong ON ERROR)
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 ])STRING.jsonQuery(path [, JsonQueryWrapper [, JsonQueryOnEmptyOrError, JsonQueryOnEmptyOrError ] ])

Extracts JSON values from a JSON string.

The result is always returned as a STRING. The RETURNING clause is currently not supported.

The wrappingBehavior determines whether the extracted value should be wrapped into an array, and whether to do so unconditionally or only if the value itself isn’t an array already.

onEmpty and onError determine the behavior in case the path expression is empty, or in case an error was raised, respectively. By default, in both cases null is returned. Other choices are to use an empty array, an empty object, or to raise an error.

  1. ‘{ b”: 1 }’
  2. JSON_QUERY(‘{ a”: { b”: 1 } }’, $.a’)
  3. ‘[1, 2]’
  4. JSON_QUERY(‘[1, 2]’, $’)
  5. NULL
  6. JSON_QUERY(CAST(NULL AS STRING), $’)
  7. ‘[“c1”,”c2”]’
  8. JSON_QUERY(‘{“a”:[{“c”:”c1”},{“c”:”c2”}]}’,
  9. lax $.a[].c’)
  10. Wrap result into an array
  11. ‘[{}]’
  12. JSON_QUERY(‘{}’, $ WITH CONDITIONAL ARRAY WRAPPER)
  13. ‘[1, 2]’
  14. JSON_QUERY(‘[1, 2]’, $ WITH CONDITIONAL ARRAY WRAPPER)
  15. ‘[[1, 2]]’
  16. JSON_QUERY(‘[1, 2]’, $ WITH UNCONDITIONAL ARRAY WRAPPER)
  17. Scalars must be wrapped to be returned
  18. NULL
  19. JSON_QUERY(1, $’)
  20. ‘[1]’
  21. JSON_QUERY(1, $ WITH CONDITIONAL ARRAY WRAPPER)
  22. Behavior if path expression is empty / there is an error
  23. ‘{}’
  24. JSON_QUERY(‘{}’, lax $.invalid EMPTY OBJECT ON EMPTY)
  25. ‘[]’
  26. JSON_QUERY(‘{}’, strict $.invalid EMPTY ARRAY ON ERROR)
JSON_OBJECT([[KEY] key VALUE value] [ { NULL | ABSENT } ON NULL ])jsonObject(JsonOnNull, keyValues…)

Builds a JSON object string from a list of key-value pairs.

Note that keys must be non-NULL string literals, while values may be arbitrary expressions.

This function returns a JSON string. The ON NULL behavior defines how to treat NULL values. If omitted, NULL ON NULL is assumed by default.

Values which are created from another JSON construction function call (JSON_OBJECT, JSON_ARRAY) are inserted directly rather than as a string. This allows building nested JSON structures.

  1. ‘{}’
  2. JSON_OBJECT()
  3. ‘{“K1”:”V1”,”K2”:”V2”}’
  4. JSON_OBJECT(‘K1 VALUE V1’, K2 VALUE V2’)
  5. Expressions as values
  6. JSON_OBJECT(‘orderNo VALUE orders.orderId)
  7. ON NULL
  8. JSON_OBJECT(KEY K1 VALUE CAST(NULL AS STRING) NULL ON NULL) ‘{“K1”:null}’
  9. JSON_OBJECT(KEY K1 VALUE CAST(NULL AS STRING) ABSENT ON NULL) ‘{}’
  10. ‘{“K1”:{“K2”:”V”}}’
  11. JSON_OBJECT(
  12. KEY K1
  13. VALUE JSON_OBJECT(
  14. KEY K2
  15. VALUE V
  16. )
  17. )
JSON_OBJECTAGG([KEY] key VALUE value [ { NULL | ABSENT } ON NULL ])jsonObjectAgg(JsonOnNull, keyExpression, valueExpression)

Builds a JSON object string by aggregating key-value expressions into a single JSON object.

The key expression must return a non-nullable character string. Value expressions can be arbitrary, including other JSON functions. If a value is NULL, the ON NULL behavior defines what to do. If omitted, NULL ON NULL is assumed by default.

Note that keys must be unique. If a key occurs multiple times, an error will be thrown.

This function is currently not supported in OVER windows.

  1. ‘{“Apple”:2,”Banana”:17,”Orange”:0}’
  2. SELECT
  3. JSON_OBJECTAGG(KEY product VALUE cnt)
  4. FROM orders
JSON_ARRAY([value]* [ { NULL | ABSENT } ON NULL ])jsonArray(JsonOnNull, values…)

Builds a JSON array string from a list of values.

This function returns a JSON string. The values can be arbitrary expressions. The ON NULL behavior defines how to treat NULL values. If omitted, ABSENT ON NULL is assumed by default.

Elements which are created from another JSON construction function call (JSON_OBJECT, JSON_ARRAY) are inserted directly rather than as a string. This allows building nested JSON structures.

  1. ‘[]’
  2. JSON_ARRAY()
  3. ‘[1,”2”]’
  4. JSON_ARRAY(1, 2’)
  5. Expressions as values
  6. JSON_ARRAY(orders.orderId)
  7. ON NULL
  8. JSON_ARRAY(CAST(NULL AS STRING) NULL ON NULL) ‘[null]’
  9. JSON_ARRAY(CAST(NULL AS STRING) ABSENT ON NULL) ‘[]’
  10. ‘[[1]]’
  11. JSON_ARRAY(JSON_ARRAY(1))
JSON_ARRAYAGG(items [ { NULL | ABSENT } ON NULL ])jsonArrayAgg(JsonOnNull, itemExpression)

Builds a JSON object string by aggregating items into an array.

Item expressions can be arbitrary, including other JSON functions. If a value is NULL, the ON NULL behavior defines what to do. If omitted, ABSENT ON NULL is assumed by default.

This function is currently not supported in OVER windows, unbounded session windows, or hop windows.

  1. ‘[“Apple”,”Banana”,”Orange”]’
  2. SELECT
  3. JSON_ARRAYAGG(product)
  4. FROM orders

值构建函数

SQL 函数Table 函数描述
— implicit constructor with parenthesis (value1 [, value2])row(ANY1, ANY2, …)返回从值列表 (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。
不适用numeric.rows创建一个 numeric 行间隔(通常用于窗口创建)。

值获取函数

SQL 函数Table 函数描述
tableName.compositeType.fieldCOMPOSITE.get(STRING) | COMPOSITE.get(INT)按名称从 Flink 复合类型(例如,Tuple,POJO)返回字段的值。
tableName.compositeType.*ANY.flatten()返回 Flink 复合类型(例如,Tuple,POJO)的平面表示,将其每个直接子类型转换为单独的字段。在大多数情况下,平面表示 的字段与原始字段的命名类似,但使用 $ 分隔符(例如 mypojo$mytuple$f0)。

分组函数

SQL 函数Table 函数描述
GROUP_ID()不适用返回唯一标识分组键组合的整数。
GROUPING(expression1 [, expression2] ) | GROUPING_ID(expression1 [, expression2] )不适用返回给定分组表达式的位向量。

哈希函数

SQL 函数Table 函数描述
MD5(string)STRING.md5()以 32 个十六进制数字的字符串形式返回 string 的 MD5 哈希值;如果字符串为 NULL,则返回 NULL
SHA1(string)STRING.sha1()以 40 个十六进制数字的字符串形式返回 string 的 SHA-1 哈希值;如果字符串为 NULL,则返回 NULL
SHA224(string)STRING.sha224()以 56 个十六进制数字的字符串形式返回 string 的 SHA-224 哈希值;如果字符串为 NULL,则返回 NULL
SHA256(string)STRING.sha256()以 64 个十六进制数字的字符串形式返回 string 的 SHA-256 哈希值;如果字符串为 NULL,则返回 NULL
SHA384(string)STRING.sha384()以 96 个十六进制数字的字符串形式返回 string 的 SHA-384 哈希值;如果字符串为 NULL,则返回 NULL
SHA512(string)STRING.sha512()以 128 个十六进制数字的字符串形式返回 string 的 SHA-512 哈希值;如果字符串为 NULL,则返回 NULL
SHA2(string, hashLength)STRING.sha2(INT)使用 SHA-2 系列散列函数(SHA-224,SHA-256,SHA-384 或 SHA-512)返回散列值。第一个参数字符串是要散列的字符串, 第二个参数 hashLength 是结果的位长(224,256,384 或 512)。如果 string 或 hashLength 为 NULL,则返回 NULL

辅助函数

SQL 函数Table 函数描述

聚合函数

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

SQL 函数Table 函数描述
COUNT([ ALL ] expression | DISTINCT expression1 [, expression2])不适用默认情况下或使用关键字 ALL,返回不为 NULL 的表达式的输入行数。使用 DISTINCT 则对所有值去重后计算。
COUNT() | COUNT(1)FIELD.count返回输入行数。
AVG([ ALL | DISTINCT ] expression)FIELD.avg默认情况下或使用关键字 ALL,返回所有输入行中表达式的平均值(算术平均值)。使用 DISTINCT 则对所有值去重后计算。
SUM([ ALL | DISTINCT ] expression)FIELD.sum默认情况下或使用关键字 ALL,返回所有输入行的表达式总和。使用 DISTINCT 则对所有值去重后计算。
不适用FIELD.sum0返回所有输入行的数字字段的总和。如果所有值都为 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)不适用VAR_SAMP() 的同义方法。
RANK()不适用返回值在一组值中的排名。结果是 1 加上分区顺序中当前行之前或等于当前行的行数。排名在序列中不一定连续。
DENSE_RANK()不适用返回值在一组值中的排名。结果是一加先前分配的等级值。与函数 rank 不同,dense_rank 不会在排名序列中产生间隙。
ROW_NUMBER()不适用在窗口分区内根据 rows 的排序为每一行分配一个唯一的序列号,从一开始。ROW_NUMBER 和 RANK 相似。ROW_NUMBER 按 顺序对所有行进行编号(例如 1,2,3,4,5)。RANK 为等值 row 提供相同的序列值(例如 1,2,2,4,5)。
LEAD(expression [, offset] [, default])不适用返回窗口中当前行之后第 offset 行处的表达式值。offset 的默认值为 1,default 的默认值为 NULL
LAG(expression [, offset] [, default])不适用返回窗口中当前行之前第 offset 行处的表达式值。offset 的默认值为 1,default 的默认值为 NULL
FIRST_VALUE(expression)FIELD.firstValue返回一组有序值中的第一个值。
LAST_VALUE(expression)FIELD.lastValue返回一组有序值中的最后一个值。
LISTAGG(expression [, separator])不适用连接字符串表达式的值并在它们之间放置分隔符值。字符串末尾不添加分隔符时则分隔符的默认值为“,”。
CUME_DIST()不适用返回值在一组值的累积分布。结果是小于或等于当前行的值的行数除以窗口分区的总行数。
PERCENT_RANK()不适用返回值在一组值的百分比排名。结果是当前行在窗口分区中的排名减 1,然后除以窗口分区的总行数减 1。如果窗口分区的总行数为 1,则该函数返回 0。
NTILE(n)不适用将窗口分区中的所有数据按照顺序划分为 n 个分组,返回分配给各行数据的分组编号(从 1 开始)。 如果不能均匀划分为 n 个分组,则从第 1 个分组开始,为每一分组分配一个剩余值。 比如某个窗口分区有 6 行数据,划分为 4 个分组,则各行的分组编号为:1,1,2,2,3,4。

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

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

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

时间间隔单位时间点单位
MILLENNIUM
CENTURY
DECADE
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
MILLISECONDMILLISECOND
MICROSECONDMICROSECOND
NANOSECOND
EPOCH
DOY (仅适用SQL)
DOW (仅适用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(…)选择除指定列以外的列

详细语法如下:

  1. 列函数:
  2. withColumns(columnExprs)
  3. withoutColumns(columnExprs)
  4. 多列表达式:
  5. columnExpr [, columnExpr]*
  6. 单列表达式:
  7. columnRef | columnIndex to columnIndex | columnName to columnName
  8. 列引用:
  9. 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)):

接口用法举例描述
withColumns($())select(withColumns($(““))) = 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”))) = 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、UDFs 等函数,例如:

Java

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

Scala

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

Python

  1. table
  2. .group_by(with_columns(range_(1, 3)))
  3. .select(with_columns(range_('a', 'b')), myUDAgg(myUDF(with_columns(range_(5, 20)))))