本文將向您介紹可在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格式相容。 |
TIMESTAMPADD(timeintervalunit, interval, timepoint) | 計算timepoint加上interval(單位timeintervalunit)之後的時間點。 timeintervalunit可被指定為SECOND、MINUTE、HOUR、DAY、MONTH或YEAR。 |
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時,預設採用 |
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。 |