本文翻譯自官網: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(開發技術)相關的推文