本文將向您介紹可在Flink CDC資料攝入作業的Transform模組運算式中使用的內建函數。
內建函數
Flink CDC資料攝入作業提供了豐富的內建函數,可以直接在transform模組中的projection和filter運算式中使用。
算術函數
函數 | 說明 |
numeric1 + numeric2 | 返回numeric1加上numeric2的值。 |
numeric1 - numeric2 | 返回numeric1減去numeric2的值。 |
numeric1 * numeric2 | 返回numeric1乘以numeric2的值。 |
numeric1 / numeric2 | 返回numeric1除以numeric2的值。 |
numeric1 % numeric2 | 返回numeric1對numeric2模數的值。 |
ABS(numeric) | 返回numeric的絕對值。 |
CEIL(numeric) | 返回numeric向上取整的值。 |
FLOOR(numeric) | 返回numeric向下取整的值。 |
ROUND(numeric, int) | 返回numeric四捨五入到小數點後n位的值。 |
UUID() | 產生一個全域唯一ID(UUID)字串(例如“3d3c68f7-f608-473f-b60c-b0c44ad4cc4e”)。 使用RFC 4122 type 4方法偽隨機產生。 |
時間函數
函數 | 說明 |
LOCALTIME | 返回當前時區下的本地時間,傳回型別為 |
LOCALTIMESTAMP | 返回當前時區下的本地時間戳記,傳回型別為 |
CURRENT_TIME | 返回當前時區下的本地時間,與LOCALTIME相同。 |
CURRENT_DATE | 返回當前時區下的本地日期。 |
CURRENT_TIMESTAMP | 返回當前時區下的本地時間戳記。傳回型別為 |
NOW() | 返回當前時區下的本地時間戳記,與CURRENT_TIMESTAMP相同。 |
DATE_FORMAT(timestamp, string) | 將傳入的時間戳記按指定的格式化字串string進行格式化。 說明 格式化字串與Java中的SimpleDateFormat格式相容。 |
DATE_FORMAT_TZ(timestamp, string) | 將傳入的時間格式化為給定時區的字串。 說明
|
DATE_FORMAT_TZ(timestamp, string1[, string2]) | 將傳入的時間轉換為格式string1並且時區資訊為string2的字串。 說明 格式化字串與Java中的SimpleDateFormat格式相容。 |
TIMESTAMPADD(timeintervalunit, interval, timepoint) | 計算timepoint加上interval(單位timeintervalunit)之後的時間點。 timeintervalunit可被指定為SECOND、MINUTE、HOUR、DAY、MONTH或YEAR。 |
DATE_ADD(timestamp, integer, string) | 將傳入的第一個參數timestamp(如果是無時區的時間,轉換為第三個參數string對應時區的本地時間)添加第二個參數integer對應的天數後,轉換為yyyy-MM-dd格式的字串。 |
TIMESTAMPDIFF(timepointunit, timepoint1, timepoint2) | 計算timepoint1和timepoint2之間差距多少timepointunit單位。 timepointunit可被指定為SECOND、MINUTE、HOUR、DAY、MONTH或YEAR。 |
TO_DATE(string1[, string2]) | 將傳入的日期文字string1按string2指定的格式轉化為DATE類型。 說明 在不指定格式化字串string2時,預設採用 |
TO_TIMESTAMP(string1[, string2]) | 將傳入的時間戳記字串string1按string2指定的格式轉化為不帶時區資訊的TIMESTAMP類型。 說明 在不指定格式化字串string2時,預設採用 |
TO_TIMESTAMP_LTZ(string1[, string2][, string3]) | 將傳入的時間戳記字串string1按string2指定的格式轉化為時區為string3的TIMESTAMP_LTZ類型。 說明
|
TO_TIMESTAMP_LTZ(bigint[, integer]) | 將傳入的第一個參數(時間戳記)轉化為精度為第二個參數的TIMESTAMP_LTZ類型。 說明 第二個參數可以填寫為0或者3。 |
FROM_UNIXTIME(numeric[, string]) | 將第一個參數作為UTC時區下1970-01-01 00:00:00後經過的秒數轉換為時間戳記,並根據第二個參數,返回一個指定格式的時間戳記字串。 說明 在不指定格式化字串string時,預設採用 |
UNIX_TIMESTAMP() | 返回目前時間下的UNIX時間戳記秒數。 |
UNIX_TIMESTAMP(string1[, string2]) | 將給定的日期時間字串string1轉換為另一個日期時間格式string2。 |
在進行projection和filter運算式求值時,可以保證其中每個子運算式所得到的時間點都一致。例如,NOW() AS t1, NOW() AS t2, NOW() AS t3得到的t1、t2、t3一定對應同一個時間戳記,無論其求值時間和順序如何。
字串函數
函數 | 說明 |
string1 || string2 | 返回string1和string2拼接而成的字串。 說明 此運算子與邏輯或運算子不同。 |
CHAR_LENGTH(string) | 返回string字串中的字元數。 |
UPPER(string) | 返回string的大寫形式字串。 |
LOWER(string) | 返回string的小寫形式字串。 |
TRIM(string1) | 刪除string兩側的空白字元。 |
REGEXP_REPLACE(string1, string2, string3) | 將string1中所有滿足string2模式的子串替換為string3。 例如, |
SUBSTRING(string FROM integer1 [ FOR integer2 ]) | 返回string從第integer1到第integer2個字元的子串。 說明 在不提供 |
CONCAT(string1, string2,…) | 返回將string1、string2、…拼接在一起形成的新字串。 例如, |
類型轉換函式
您可以使用 CAST(<運算式> AS <類型>)文法進行顯式強制類型轉換。目前支援以下轉換路徑:
源類型 | 目標類型 | 說明 |
任何 | VARCHAR 重要 目前不可使用 | 任何類型的欄位均可被轉換為字串。 |
NUMERIC STRING | BOOLEAN | 任何非數字0或FALSE字串的字面量均會被轉換為TRUE。 |
NUMERIC STRING | TINYINT | 結果會被截斷到-128到127範圍內。 |
NUMERIC STRING | SMALLINT | 結果會被截斷到-32768到32767範圍內。 |
NUMERIC STRING | INTEGER | 結果會被截斷到-2147483648到2147483647範圍內。 |
NUMERIC STRING | BIGINT | 結果會被截斷到-9223372036854775808到9223372036854775807範圍內。 |
NUMERIC STRING | FLOAT | |
NUMERIC | DOUBLE | |
NUMERIC | DECIMAL | |
STRING TIMESTAMP_TZ TIMESTAMP_LTZ | TIMESTAMP | 字串必須為合法的ISO_LOCAL_DATE_TIME格式。 |
比較函數
除非特別說明,否則以下內建函數在輸入參數包含NULL時均返回NULL。
函數 | 說明 |
value1 = value2 | 如果value1等於value2,則返回TRUE;否則返回FALSE。 |
value1 <> value2 | 如果value1不等於value2,則返回TRUE;否則返回FALSE。 |
value1 > value2 | 如果value1大於value2,則返回TRUE;否則返回FALSE。 |
value1 >= value2 | 如果value1大於或等於value2,則返回TRUE;否則返回FALSE。 |
value1 < value2 | 如果value1小於value2,則返回TRUE;否則返回FALSE。 |
value1 <= value2 | 如果value1小於或等於value2,則返回TRUE;否則返回FALSE。 |
value IS NULL | 如果value是NULL,則返回TRUE;否則返回FALSE。 |
value IS NOT NULL | 如果value不是NULL,則返回TRUE;否則返回FALSE。 |
value1 BETWEEN value2 AND value3 | 如果value1的值介於value2和value3之間,則返回TRUE;否則返回FALSE。 |
value1 NOT BETWEEN value2 AND value3 | 如果value1的值並非介於value2和value3之間,則返回TRUE;否則返回FALSE。 |
string1 LIKE string2 | 如果string1的值與string2定義的模式比對,則返回TRUE;否則返回FALSE。 |
string1 NOT LIKE string2 | 如果string1的值與string2定義的模式不匹配,則返回TRUE;否則返回FALSE。 |
value1 IN (value2 [, value3]* ) | 如果value1的值存在於[value2, value3, ...]列表中,則返回TRUE;否則返回FALSE。 |
value1 NOT IN (value2 [, value3]* ) | 如果value1的值不存在於[value2, value3, ...]列表中,則返回TRUE;否則返回FALSE。 |
邏輯函數
函數 | 說明 |
boolean1 OR boolean2 | 如果boolean1和boolean2至少有一個為TRUE,則返回TRUE。 |
boolean1 AND boolean2 | 如果boolean1和boolean2均為TRUE,則返回TRUE。 |
NOT boolean | 如果boolean為TRUE,則返回FALSE;如果boolean是FALSE,則返回TRUE。 |
boolean IS FALSE | 如果boolean為TRUE,則返回FALSE;如果boolean是FALSE,則返回TRUE。 |
boolean IS NOT FALSE | 如果boolean為TRUE,則返回TRUE;如果boolean是FALSE,則返回FALSE。 |
boolean IS TRUE | 如果boolean為TRUE,則返回TRUE;如果boolean是FALSE,則返回FALSE。 |
boolean IS NOT TRUE | 如果boolean為TRUE,則返回FALSE;如果boolean是FALSE,則返回TRUE。 |
條件函數
函數 | 說明 |
CASE value WHEN value1_1 [, value1_2]* THEN RESULT1 (WHEN value2_1 [, value2_2 ]* THEN result_2)* (ELSE result_z) END | 依次檢查value值是否等於WHEN子句給出的值,並返回第一個相等子句的RESULT值。 如果沒有任何子句滿足條件,則返回ELSE子句指定的值。如果沒有指定ELSE子句,則返回NULL。 |
CASE WHEN condition1 THEN result1 (WHEN condition2 THEN result2)* (ELSE result_z) END | 依次檢查value值是否滿足每個WHEN子句給出的條件,並返回第一個滿足條件子句的RESULT值。 如果沒有任何子句滿足條件,則返回ELSE子句指定的值。如果沒有指定ELSE子句,則返回NULL。 |
COALESCE(value1 [, value2]*) | 返回[value1、value2、……]列表中第一個不為NULL的元素。如果列表中所有元素均為NULL,則返回NULL。 |
IF(condition, true_value, false_value) | 如果condition子句對應的條件為真,則返回true_value;否則返回false_value。 |
JSON 函數
自Realtime Compute引擎 VVR 11.6 版本開始,您可以在資料攝入作業中使用Variant類型及相關函數。
函數 | 說明 |
PARSE_JSON(json_string[, allow_duplicate_keys]) | 將 JSON 字串解析為 Variant。如果 JSON 字串無效,將拋出錯誤。如果希望返回 NULL 而不是拋出錯誤, 請使用 如果輸入的 JSON 字串中存在重複的鍵,當 allowDuplicateKeys 為 true 時,解析器會保留最後一個出現的具有相 同鍵的欄位,否則當 allowDuplicateKeys 為 false 時,它會拋出一個錯誤。預設情況下, allowDuplicateKeys 的值為 false。 |
TRY_PARSE_JSON(json_string[, allow_duplicate_keys]) | 儘可能將 JSON 字串解析為 Variant。如果 JSON 字串無效,則返回 NULL。如果希望拋出錯誤而不是返回 NULL, 請使用 如果輸入的 JSON 字串中存在重複的鍵,當 allowDuplicateKeys 為 true 時,解析器會保留最後一個出現的具有相 同鍵的欄位,否則當 allowDuplicateKeys 為 false 時,它會拋出一個錯誤。預設情況下, allowDuplicateKeys 的值為 false。 |
JSON_EXISTS(json_string, json_path) | 判斷JSON字串中是否存在指定路徑的對象,樣本如下。 目前路徑支援的符號及功能如下:
說明 僅Realtime Compute引擎 VVR 11.7 及更高版本支援此函數。 |
JSON_VALUE(json_string, json_path) | 從JSON字串中提取指定路徑的對象,支援提取標量值或對象值。 說明 僅Realtime Compute引擎 VVR 11.7 及更高版本支援此函數。 |
雜湊函數
自Realtime Compute引擎 VVR 11.6 版本開始,您可以在資料攝入作業中使用雜湊函數。
函數 | 說明 |
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)返回散列值。第一個參數 string 是要散列的字串, 第二個參數 hashLength 是結果的位元(224,256,384 或 512)。如果 string 或 hashLength 為 |
訪問巢狀型別資料
自Realtime Compute引擎 VVR 11.6 版本開始,對於 ARRAY、MAP、VARIANT 等巢狀型別的資料欄位,您可以使用 [] 操作符訪問其中的特定元素。
訪問方式
假設存在一個名為 nest_col 的巢狀型別欄位,根據其內部資料格式的不同,訪問方式如下:
數組格式(ARRAY/VARIANT)
說明:使用nest_col[integer]擷取指定索引位置的元素(索引從 1 開始)。樣本:若
nest_col的值為[{"id": 1, "name": "專案 A"}, {"id": 2, "name": "專案 B"}]。操作:執行
nest_col[1],返回結果為{"id": 1, "name": "專案 A"}。雜湊表格式(MAP/VARIANT)
說明:使用
nest_col[string]擷取指定鍵(Key)對應的值。樣本:若
nest_col的值為{"id": 1, "name": "專案 A"}。操作:執行
nest_col['id'],返回結果為1。
對於複雜的巢狀型別資料,您可以重複使用[] 操作符以訪問內部深層次嵌套元素。
樣本:若 nest_col 的值為 [{"id": 1, "name": "專案 A"}, {"id": 2, "name": "專案 B"}]。
操作:執行 nest_col[1]['id'],返回結果為 1。
傳回型別
使用 [] 操作符擷取其中的特定元素的傳回型別取決於原始巢狀型別欄位的內部類型:
原始欄位的類型為
ARRAY[T],內部類型為T
使用nest_col[integer]擷取指定索引位置元素的傳回型別為T。原始欄位的類型為
MAP<K, V>,即鍵的類型為K,值的類型為T使用
nest_col[string]擷取指定鍵對應元素的傳回型別為V。原始欄位的類型為
VARIANT使用
nest_col[integer]或者nest_col[string]訪問元素的傳回型別始終為VARIANT。