全部產品
Search
文件中心

Realtime Compute for Apache Flink:支援的函數

更新時間:Jul 13, 2024

本文為您介紹Realtime ComputeFlink版支援的所有內建函數。

支援的函數

Flink全託管VVR 3.0.0版本在Flink V1.12的基礎上增加了部分內建函數,詳情請參見純量涵式資料表值函式彙總函式。下表展示的是Flink全託管在Flink V1.15版本的基礎上支援的全部內建函數及簡要說明。

不同Flink版本支援的函數可能會有差異,如果您需要查看函數詳情及不同版本差異,請查看對應的文檔連結,詳情請參見Flink V1.12內建函數Flink V1.13內建函數Flink V1.14內建函數Flink V1.15內建函Flink V1.16內建函數Flink V1.17內建函數

說明

如果內建函數中不存在您所需的函數,您可以通過自訂函數實現,自訂函數詳情請參見自訂函數概述

純量涵式

類別

函數

說明

比較函數

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匹配SQLRegexstring2返回true。

string1 NOT SIMILAR TO string2 [ ESCAPE char ]

如果string1與SQLRegexstring2不匹配返回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。

邏輯函數

BITAND

使用BITAND函數進行按位與操作。

BITNOT

使用BITNOT函數進行按位取反。

BITOR

使用BITOR函數進行按位取或。

BITXOR

使用BITXOR函數進行按位取異或。

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 * numberic2

返回numeric1乘以numeric2。

numeric1 / numeric2

返回numeric1除以numeric2。

numeric1 % numeric2

返回numeric1除以numeric2的餘數。

POWER(numeric1, numeric2)

返回numeric1的numeric2次方。

ABS(numeric)

返回numeric的絕對值。

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

返回numeric四捨五入保留INT小數位的值。

PI()

返回無比接近pi的值。

E()

返回無比接近e的值。

RAND()

返回[0.0, 1.0) 範圍內的偽隨機雙精確度值。

RAND(INT)

返回範圍為[0.0, 1.0) 的偽隨機雙精確度值,初始種子為INT。

RAND_INTEGER(INT)

返回[0, INT) 範圍內的偽隨機整數。

RAND_INTEGER(INT1,INT2)

返回範圍為[0, INT2) 的偽隨機整數,初始種子為INT1。

UUID()

根據RFC 4122 類型 4(偽隨機產生)UUID,返回UUID(通用唯一識別碼)字串。

BIN(INT)

以二進位格式返回INTEGER的字串表示形式。

HEX(numeric) HEX(string)

以十六進位格式返回整數numeric值或 STRING的字串表示形式。

TRUNCATE(numeric1,integer2)

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

字串函數

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

返回INT個string串連的字串。

REGEXP_REPLACE

使用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按照STRING2Regex的規則拆分,返回指定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

使用PARSE_URL函數,返回目標URL中指定部分解析後的值。

REGEXP

使用REGEXP函數,對指定的字串執行一個Regex搜尋,並返回一個Boolean值表示是否找到指定的匹配模式。

REVERSE(string)

返回反轉的字串。

SPLIT_INDEX

使用SPLIT_INDEX函數,將目標字串按照指定分隔字元分割成若干段,返回指定位置的欄位資訊。

STR_TO_MAP(string1[, string2, string3])

使用分隔字元將string1拆分為索引值對後返回一個 map。

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

返回字串的子字串,從位置integer1開始,長度為integer2。

時間函數

DATE string

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

DATEDIFF

使用DATEDIFFFunction Compute兩個日期之間的天數差值。

DATE_ADD

使用DATE_ADD函數返回指定日期增加目標天數後的日期。

DATE_SUB

使用DATE_SUB函數返回指定日期減去目標天數後的日期。

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月數間隔。

LOCALTIME

返回本地時區的當前SQL時間,傳回型別為 TIME(0)。

LOCALTIMESTAMP

返回本地時區的當前SQL時間,傳回型別為 TIMESTAMP(3)。

CURRENT_TIME

返回本地時區的當前SQL時間,這是 LOCAL_TIME的同義字。

CURRENT_DATE

返回本地時區中的當前SQL日期。

CURRENT_TIMESTAMP

返回本地時區的當前SQL時間戳記。

NOW()

返回本地時區的當前SQL時間戳記,這是 CURRENT_TIMESTAMP的同義字。

CURRENT_ROW_TIMESTAMP()

返回本地時區的當前SQL時間戳記。

EXTRACT(timeinteravlunit FROM temporal)

返回從時間的時間間隔單位部分提取的long值。

YEAR(date)

從SQL日期date返回年份。

QUARTER(date)

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

MONTH(date)

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

WEEK(date)

從SQL日期date返回一年中的第幾周。

DAYOFYEAR(date)

從SQL日期date返回一年中的第幾天。

DAYOFMONTH

從SQL日期date返回一個月中的第幾天。

HOUR(timestamp)

從SQL時間戳記timestamp返回小時單位部分的小時數。

MINUTE(timestamp)

從SQL時間戳記timestamp返回分鐘單位的分鐘數。

SECOND(timestamp)

從SQL時間戳記timestamp返回秒單位部分的秒數。

FLOOR(timepoint TO timeintervalunit)

返回將時間點timepoint向下取值到時間單位 timeintervalunit的值。

CEIL(timespoint TO timeintervaluntit)

返回將時間點timespoint向上取值到時間單位 TIMEINTERVALUNIT的值。

(timepoint1, temporal1) OVERLAPS (timepoint2, temporal2)

如果由 (timepoint1, temporal1) 和 (timepoint2, temporal2)定義的兩個時間間隔重疊,則返回true。

DATE_FORMAT

使用DATE_FORMAT函數將字串類型的日期從原格式轉換至目標格式。

DATE_FORMAT_TZ

使用DATE_FORMAT_TZ函數將時間戳記類型的資料根據指定的時區,轉成指定格式的字串。

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

使用FROM_UNIXTIME函數返回VARCHAR類型的日期值。

UNIX_TIMESTAMP

使用UNIX_TIMESTAMP函數,將入參轉換為長整型的時間戳記。

TO_DATE

使用TO_DATE函數,將INT類型或者VARCHAR類型的日期轉換成DATE類型。

TO_TIMESTAMP_LTZ(numeric, precision)

將紀元秒或紀元毫秒轉換TIMESTAMP_LTZ。

TO_TIMESTAMP(string1[, string2])

將UTC+0時區下格式為string2(預設為yyyy-MM-dd HH:mm:ss)的字串string1轉換為時間戳記。

TO_TIMESTAMP_TZ

使用TO_TIMESTAMP_TZ函數,將VARCHAR類型的日期根據指定時區轉換成TIMESTAMP類型。

CURRENT_WATERMARK(rowtime)

返回給定時間列屬性rowtime的當前浮水印。

條件函數

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。

CASE WHEN condition1 THEN result1 (WHEN condition2 THEN result2)* (ELSE result_z) 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。

IFNULL(input,null_replacement)

如果輸入為NULL,則返回 null_replacement,否則返回輸入。

IS_ALPHA(string)

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

IS_DECIMAL(string)

如果string可以解析為有效數字,則返回true,否則返回false。

IS_DIGIT(string)

如果字串中的所有字元都是數字,則返回true,否則返回false。

GREATEST(value1[,value2]*)

返回所有輸入參數的最大值,如果輸入參數中包含NULL,則返回NULL。

LEAST(value1[,value2]*)

返回所有輸入參數的最小值,如果輸入參數中包含NULL,則返回NULL。

類型轉換函式

CONV

使用CONV函數對數字或字元類型的數值進行進位轉換。

CAST(value AS type)

返回被強制轉換為類型type的新值。

TYPEOF(input) | TYPEOF(input, force_serializable)

返回輸入運算式的資料類型的字串表示形式。

集合函數

CARDINALITY(array)

返回數組中元素的數量。

array '[' INT ']'

返回數組中INT位置的元素。

ELEMENT(array)

返回數組的唯一元素(其基數應為1)。

CARDINALITY(map)

返回map中的entries數量。

map‘[’ value ‘]’

返回map中指定key對應的值。

JSON函數

IS JSON [ { VALUE | SCALAR | ARRAY | OBJECT } ]

判斷給定的字串是否為有效JSON。

JSON_EXISTS(jsonValue, path [ { TRUE | FALSE | UNKNOWN | ERROR } ON ERROR ])

確定一個JSON字串是否符合給定的路徑搜尋條件。

JSON_STRING(value)

將一個值序列化為JSON。該函數返回一個包含序列化值的JSON字串。

JSON_VALUE

使用JSON_VALUE函數,從JSON字串中提取指定路徑的運算式。

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 ])

從JSON字串中提取JSON值。

JSON_OBJECT([[KEY] key VALUE value]* [ { NULL | ABSENT } ON NULL ])

從索引值對列表中構建一個JSON對象字串。

JSON_OBJECTAGG([KEY] key VALUE value [ { NULL | ABSENT } ON NULL ])

將索引值運算式匯總為一個JSON對象字串。

JSON_ARRAY([value]* [ { NULL | ABSENT } ON NULL ])

從值列表中構建一個JSON數組字串。

JSON_ARRAYAGG(items [ { NULL | ABSENT } ON NULL ])

通過將項彙總成一個數組來構建一個JSON對象字串。

值構建函數

-- implicit constructor with parenthesis (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)返回散列值。

MURMUR_HASH

使用MURMUR_HASH函數,按Murmur 32雜湊演算法計算指定參數的32位雜湊值。

MURMUR_HASH_64

使用MURMUR_HASH_64函數,按Murmur 128雜湊演算法計算指定參數的64位雜湊值。

其他

ISNAN

使用ISNAN函數,判斷指定的浮點數是否為NaN(Not a number),類似於Java中Double.isNaN()或Float.isNaN()函數。

KEYVALUE

使用KEYVALUE函數,將目標字串按照split1分隔字元拆分成Key-Value(KV)對,然後按照split2分隔字元將Key-Value對分開,返回Key對應的Value。

資料表值函式

函數

說明

GENERATE_SERIES

按from、from+1、from+2 … to-1的規則,產生一系列填充資料。

JSON_TUPLE

從JSON字串中取出各路徑字串所表示的值。

MULTI_KEYVALUE

將目標字串中拆分為Key-Value(KV)對,匹配split1和split2的KV對,並返回key_name1和key_name2對應的Value值。

STRING_SPLIT

根據指定的分隔字元將目標字串拆分為子字串,並返回子字串列表。

彙總函式

函數

說明

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行處的運算式值。

說明

流模式下暫不支援LEAD函數。

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

返回視窗中當前行之前第offset行處的運算式值。

LISTAGG(expression [, separator])

連接字串運算式的值並在它們之間放置分隔字元值。

APPROX_COUNT_DISTINCT

提升作業效能。

FIRST_VALUE

返回指定資料流的第1條非NULL資料。

LAST_VALUE

返回指定資料流的最後1條非NULL資料。