本文翻译自官网:Built-In Functions https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/functions.html
Flink Table API和SQL为用户提供了一组用于数据转换的内置函数。此页面简要概述了它们。如果尚不支持所需的功能,则可以实现用户定义的功能。如果您认为该功能足够通用,请为此打开Jira问题,并提供详细说明。
标量函数
标量函数将零个,一个或多个值作为输入,并返回一个值作为结果。
比较功能
比较功能 | 描述 |
---|---|
|
如果ANY1等于ANY2 返回true; 如果ANY1或ANY2为NULL,则返回UNKNOWN 。 |
|
如果ANY1不等于ANY2 返回true; 如果ANY1或ANY2为NULL,则返回UNKNOWN 。 |
|
如果 ANY1大于ANY2 返回TRUE; 如果ANY1或ANY2为NULL,则返回UNKNOWN 。 |
|
如果 ANY1大于或等于ANY2返回TRUE ; 如果ANY1或ANY2为NULL,则返回UNKNOWN 。 |
|
如果 ANY1小于ANY2返回TRUE ; 如果ANY1或ANY2为NULL,则返回UNKNOWN 。 |
|
如果ANY1小于或等于ANY2 返回TRUE; 如果ANY1或ANY2为NULL,则返回UNKNOWN 。 |
|
如果ANY为NULL,则返回TRUE 。 |
|
如果ANY不为NULL,则返回TRUE 。 |
|
如果STRING1匹配模式STRING2,则返回TRUE ;如果STRING1或STRING2为NULL,则返回UNKNOWN 。 例如, |
|
如果STRING1与SQL正则表达式STRING2匹配,则返回TRUE ;如果STRING1或STRING2为NULL,则返回UNKNOWN 。 例如, |
|
如果ANY1存在于给定列表(ANY2,ANY3,...)中,则返回TRUE 。 当(ANY2,ANY3,...)包含NULL,如果可以找到该元素,则返回TRUE,否则返回UNKNOWN。 如果ANY1为NULL,则始终返回UNKNOWN 。 例如, |
|
如果ANY等于子查询TABLE返回的行,则返回TRUE 。 注意:对于流查询,该操作将在联接和分组操作中重写。 根据不同输入行的数量,计算查询结果所需的状态可能会无限增长。 请提供具有有效保留间隔的查询配置,以防止出现过多的状态。有关详细信息,请参见查询配置。 |
|
如果ANY1大于或等于ANY2和小于或等于ANY3 返回true。当ANY2或ANY3为NULL时,返回FALSE或UNKNOWN。 例如, |
|
如果ANY1小于ANY2或大于ANY3 返回true。当ANY2或ANY3为NULL时,返回TRUE或UNKNOWN。 例如, |
逻辑函数
逻辑功能 | 描述 |
---|---|
|
如果BOOLEAN1为TRUE或BOOLEAN2为TRUE,则返回TRUE。支持三值逻辑。 例如, |
|
如果BOOLEAN1和BOOLEAN2均为TRUE,则返回TRUE。支持三值逻辑。 例如, |
|
如果BOOLEAN为FALSE,则返回TRUE ;如果BOOLEAN为TRUE,则返回FALSE 。 如果BOOLEAN为UNKNOWN,则返回UNKNOWN。 |
|
如果BOOLEAN为TRUE,则返回TRUE;如果BOOLEAN为FALSE或UNKNOWN,则返回FALSE 。 |
|
如果BOOLEAN为FALSE,则返回TRUE ;如果BOOLEAN为TRUE或UNKNOWN,则返回FALSE 。 |
|
如果BOOLEAN为FALSE或UNKNOWN,则返回TRUE ;如果BOOLEAN为TRUE,则返回FALSE 。 |
|
如果BOOLEAN为TRUE或UNKNOWN,则返回TRUE ;如果BOOLEAN为FALSE,则返回FALSE。 |
算术函数
算术函数 | 描述 |
---|---|
|
返回NUMERIC。 |
|
返回负数NUMERIC。 |
|
返回NUMERIC1加NUMERIC2。 |
|
返回NUMERIC1减去NUMERIC2。 |
|
返回NUMERIC1乘以NUMERIC2。 |
|
返回NUMERIC1除以NUMERIC2。 |
|
返回NUMERIC1的NUMERIC2 次幂。 |
|
返回NUMERIC的绝对值。 |
|
返回NUMERIC1除以NUMERIC2的余数(模)。仅当numeric1为负数时,结果为负数。 |
|
返回NUMERIC的平方根。 |
|
返回NUMERIC的自然对数(以e为底)。 |
|
返回NUMERIC的以10为底的对数。 |
|
返回NUMERIC的以2为底的对数。 |
|
如果不带参数调用,则返回NUMERIC1的自然对数。当使用参数调用时,将NUMERIC1的对数返回到基数NUMERIC2。 注意:当前,NUMERIC1必须大于0,而NUMERIC2必须大于1。 |
|
返回e 的 NUMERIC 次幂。 |
|
将NUMERIC向上舍入,并返回大于或等于NUMERIC的最小整数。 |
|
向下舍入NUMERIC,并返回小于或等于NUMERIC的最大整数。 |
|
返回NUMERIC的正弦值。 |
|
返回NUMERIC的双曲正弦值。 返回类型为DOUBLE。 |
|
返回NUMERIC的余弦值。 |
|
返回NUMERIC的正切。 |
|
返回NUMERIC的双曲正切值。 返回类型为DOUBLE。 |
|
返回NUMERIC的余切。 |
|
返回NUMERIC的反正弦值。 |
|
返回NUMERIC的反余弦值。 |
|
返回NUMERIC的反正切。 |
|
返回坐标的反正切(NUMERIC1,NUMERIC2)。 |
|
返回NUMERIC的双曲余弦值。 返回值类型为DOUBLE。 |
|
返回弧度NUMERIC的度数表示形式。 |
|
返回度数NUMERIC的弧度表示。 |
|
返回NUMERIC的符号。 |
|
返回一个数字,四舍五入为NUMERIC的INT小数位。 |
|
返回一个比pi更接近其他值的值。 |
|
返回一个比任何其他值都更接近e的值。 |
|
返回介于0.0(含)和1.0(不含)之间的伪随机双精度值。 |
|
返回带有初始种子INTEGER的介于0.0(含)和1.0(不含)之间的伪随机双精度值。 如果两个RAND函数具有相同的初始种子,它们将返回相同的数字序列。 |
|
返回介于0(含)和INTEGER(不含)之间的伪随机整数值。 |
|
返回介于0(含)和INTEGER2(不含)之间的伪随机整数值,其初始种子为INTEGER1。 如果两个randInteger函数具有相同的初始种子和边界,它们将返回相同的数字序列。 |
|
根据RFC 4122 type 4(伪随机生成)UUID返回UUID(通用唯一标识符)字符串 (例如,“ 3d3c68f7-f608-473f-b60c-b0c44ad4cc4e”)。使用加密强度高的伪随机数生成器生成UUID。 |
|
以二进制格式返回INTEGER的字符串表示形式。如果INTEGER为NULL,则返回NULL。 例如, |
|
以十六进制格式返回整数NUMERIC值或STRING的字符串表示形式。如果参数为NULL,则返回NULL。 例如,数字20导致“ 14”,数字100导致“ 64”,字符串“ hello,world”导致“ 68656C6C6F2C776F726C64”。 |
字符串函数
字符串函数 | 描述 |
---|---|
|
返回STRING1和STRING2的串联。 |
|
返回STRING中的字符数。 |
|
以大写形式返回STRING。 |
|
以小写形式返回STRING。 |
|
返回STRING1在STRING2中第一次出现的位置(从1开始); 如果在STRING2中找不到STRING1,则返回0 。 |
|
返回一个字符串,该字符串从STRING中删除前导和/或结尾字符。 |
|
返回一个字符串,该字符串从STRING除去左空格。 例如, |
|
返回一个字符串,该字符串从STRING中删除正确的空格。 例如, |
|
返回一个字符串,该字符串重复基本STRING INT次。 例如, |
|
返回字符串STRING1所有匹配正则表达式的子串STRING2连续被替换STRING3。 例如, |
|
从位置INT1返回一个字符串,该字符串将STRING1的INT2(默认为STRING2的长度)字符替换为STRING2。 例如, |
|
返回字符串STRING的子字符串,从位置INT1开始,长度为INT2(默认为结尾)。 |
|
返回一个新字符串替换其中出现的所有STRING2与STRING3(非重叠)从STRING1。 例如, |
|
从STRING1返回一个字符串,该字符串使用指定的正则表达式STRING2和正则表达式匹配组索引INTEGER1提取。 注意: regex匹配组索引从1和0开始,表示匹配整个regex。另外,正则表达式匹配组索引不应超过定义的组数。 例如, |
|
返回一种新形式的STRING,其中每个单词的第一个字符转换为大写,其余字符转换为小写。 这里的单词表示字母数字字符序列。 |
|
返回连接STRING1,STRING2,...的字符串。如果任何参数为NULL,则返回NULL。 例如, |
|
返回一个字符串,会连接STRING2,STRING3,......与分离STRING1。 分隔符被添加到要连接的字符串之间。如果STRING1为NULL,则返回NULL。 与相比 例如, |
|
返回一个新字符串,该字符串从STRING1的左侧填充STRING2,长度为INT个字符。 如果STRING1的长度小于INT,则返回缩短为INT个字符的STRING1。 例如, |
|
返回一个新字符串,该字符串从STRING1右侧填充STRING2,长度为INT个字符。 如果STRING1的长度小于INT,则返回缩短为INT个字符的STRING1。 例如, |
|
返回来自STRING的base64解码结果;如果STRING为NULL,则返回null 。 例如, |
|
从STRING返回base64编码的结果;如果STRING为NULL,则返回NULL。 例如, |
时间函数
时间功能 | 描述 |
---|---|
|
返回以“ yyyy-MM-dd”形式从STRING解析的SQL日期。 |
|
返回以“ HH:mm:ss”的形式从STRING解析的SQL时间。 |
|
返回从STRING解析的SQL时间戳,格式为“ yyyy-MM-dd HH:mm:ss [.SSS]”。 |
|
为NUMERIC年创建一个月间隔。 |
|
为NUMERIC个季度创建一个月间隔。 例如, |
|
创建间隔NUMERIC个月。 |
|
创建NUMERIC周的毫秒间隔。 例如, |
|
创建NUMERIC天的毫秒间隔。 |
|
创建NUMERIC小时的毫秒间隔。 |
|
为NUMERIC分钟创建一个毫秒间隔。 |
|
为NUMERIC秒创建毫秒间隔。 |
|
创建一个NUMERIC毫秒的时间间隔。 |
|
返回UTC时区中的当前SQL日期。 |
|
返回UTC时区中的当前SQL时间。 |
|
返回UTC时区中的当前SQL时间戳。 |
|
返回本地时区的当前SQL时间。 |
|
返回本地时区的当前SQL时间戳。 |
|
返回从temporal的TIMEINTERVALUNIT部分中提取的长值。 例如,
|
|
返回将TIMEPOINT向下舍入为时间单位TIMEINTERVALUNIT的值。 例如, |
|
返回将TIMEPOINT 舍入为时间单位TIMEINTERVALUNIT的值。 例如, |
|
如果(TIMEPOINT1,TEMPORAL1)和(TIMEPOINT2,TEMPORAL2)定义的两个时间间隔重叠,则返回TRUE 。 时间值可以是时间点,也可以是时间间隔。 例如, |
|
注意此功能存在严重的错误,暂时不应使用。请改为实施自定义UDF或使用extract()作为解决方法。 |
|
返回TIMEPOINT1和TIMEPOINT2之间的TIMEPOINTUNIT的(带符号)编号。 时间间隔的单位由第一个参数指定,该参数应为以下值之一:SECOND,MINUTE,HOUR,DAY,MONTH或YEAR。 另请参见时间间隔和点单位说明符表。 例如,timestampDiff(TimePointUnit.DAY,'2003-01-02 10:00:00'.toTimestamp,'2003-01-03 10:00:00'.toTimestamp)返回1。 。 |
条件函数
条件函数 | 描述 |
---|---|
|
如果BOOLEAN的计算结果为TRUE,则返回VALUE1;否则,返回VALUE1。否则返回VALUE2。 例如, |
类型转换函数功能
类型转换函数 | 描述 |
---|---|
|
返回转换为TYPE类型的新ANY。请在此处查看受支持的类型。 例如, |
Collection 函数功能
Collection 函数 | 描述 |
---|---|
|
返回ARRAY中的元素数量。 |
|
返回位于元素INT的ARRAY。索引从1开始。 |
|
返回ARRAY的唯一元素(其基数应为1);否则为false。 如果ARRAY为空,则返回NULL 。如果ARRAY具有多个元素,则引发异常。 |
|
返回MAP中的条目数。 |
|
返回键指定的值ANY在MAP。 |
Value Construction构函数
Value Construction函数 |
描述 |
---|---|
|
返回从对象值(ANY1,ANY2,...)的列表创建的行。行是复合类型,可以通过值访问函数进行访问。 |
|
返回从对象值(ANY1,ANY2,...)的列表创建的数组。 |
|
返回从键值对列表((ANY1,ANY2),(ANY3,ANY4),...)创建的映射。 |
|
创建行的NUMERIC间隔(通常在窗口创建中使用)。 |
Value Access函数
Value Access函数 |
描述 |
---|---|
|
通过名称或索引从Flink复合类型(例如,Tuple,POJO)返回字段的值。 例如, |
|
返回Flink复合类型(例如Tuple,POJO)的平面表示形式,该类型将其每个直接子类型转换为单独的字段。 在大多数情况下,平面表示形式的字段与原始字段的命名方式相似,但带有美元分隔符(例如,mypojo $ mytuple $ f0)。 |
分组函数
分组函数 | 描述 |
---|---|
|
返回一个唯一标识分组键组合的整数。 |
|
返回给定分组表达式的位向量。 |
hash函数
hash函数 | 描述 |
---|---|
|
以32个十六进制数字的字符串形式返回STRING的MD5哈希值;如果STRING为NULL,则返回NULL。 |
|
以40个十六进制数字的字符串形式返回STRING的SHA-1哈希值;如果STRING为NULL,则返回NULL。 |
|
以56个十六进制数字的字符串形式返回STRING的SHA-224哈希值;如果STRING为NULL,则返回NULL。 |
|
以64个十六进制数字的字符串形式返回STRING的SHA-256哈希值;如果STRING为NULL,则返回NULL。 |
|
以96个十六进制数字的字符串返回STRING的SHA-384哈希值;如果STRING为NULL,则返回NULL。 |
|
以128个十六进制数字的字符串返回STRING的SHA-512哈希值;如果STRING为NULL,则返回NULL。 |
|
返回由INT(可能为224、256、384或512)为STRING指定的SHA-2系列 (SHA-224,SHA-256,SHA-384或SHA-512)哈希值。如果STRING或INT为NULL,则返回NULL。 |
辅助函数
辅助函数 | 描述 |
---|---|
|
指定ANY的名称(字段)。如果表达式扩展到多个字段,则可以指定其他名称。 |
汇总函数
聚合函数将所有行中的表达式作为输入,并返回单个聚合值作为结果。
汇总功能 | 描述 |
---|---|
|
返回FIELD不为NULL 的输入行数。 |
|
返回所有输入行中FIELD的平均值(算术平均值)。 |
|
返回所有输入行中数字字段FIELD的总和。如果所有值均为NULL,则返回NULL。 |
|
返回所有输入行中数字字段FIELD的总和。如果所有值均为NULL,则返回0。 |
|
返回所有输入行中数字字段FIELD的最大值。 |
|
返回所有输入行中数字字段FIELD的最小值。 |
|
返回所有输入行中数字字段FIELD的总体标准偏差。 |
|
返回所有输入行中数字字段FIELD的样本标准偏差。 |
|
返回所有输入行中数字字段FIELD的总体方差(总体标准差的平方)。 |
|
返回所有输入行中数字字段FIELD的样本方差(样本标准差的平方)。 |
|
返回所有输入行的FIELD的多集。 |
时间间隔和点单位说明符
下表列出了时间间隔和时间单位的说明符。
对于Table API,请使用_
空格(例如DAY_TO_HOUR
)。
时间间隔单位 | 时间点单位 |
---|---|
MILLENIUM (仅SQL)
|
|
CENTURY (仅SQL)
|
|
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 |
|
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)
|
列函数
列函数用于选择或删除列.
SYNTAX | DESC |
---|---|
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)
下表说明了column函数的用法。(假设我们有一个包含5列的表)(a: Int, b: Long, c: String, d:String, e: String)
:
api | 用法 | 描述 |
---|---|---|
withColumns(*)| * |
|
所有列 |
withColumns(m至n) |
|
从m到n的列 |
withColumns(m,n,k) |
|
m,n,k列 |
withColumns(m,n to k) |
|
上面两种表示的混合 |
withoutColumns(m to n) |
|
取消选择从m到n的列 |
withoutColumns(m,n,k) |
|
取消选择列m,n,k |
withoutColumns(m,n to k) |
|
上面两种表示的混合 |
列函数可以在所有需要列字段的地方使用,select, groupBy, orderBy, UDFs 等.
例如:
table
.groupBy(withColumns(1 to 3))
.select(withColumns('a to 'b), myUDAgg(myUDF(withColumns(5 to 20))))
注意:列函数仅在Table API中使用。
欢迎关注Flink菜鸟公众号,会不定期更新Flink(开发技术)相关的推文