このトピックでは、Flink CDC データインジェストジョブの変換モジュール式で使用できるビルトイン関数について説明します。
ビルトイン関数
Flink CDC データインジェストジョブには、豊富なビルトイン関数が用意されています。これらの関数は、変換モジュール内の射影式およびフィルター式で直接使用できます。
算術関数
関数 | 説明 |
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() | グローバル一意識別子 (UUID) 文字列(例:3d3c68f7-f608-473f-b60c-b0c44ad4cc4e)を生成します。 RFC 4122 タイプ 4 に基づき、擬似乱数 UUID を生成します。 |
日時関数
関数 | 説明 |
LOCALTIME | 現在のタイムゾーンにおけるローカル時刻を返します。戻り値の型は |
LOCALTIMESTAMP | 現在のタイムゾーンにおけるローカルタイムスタンプを返します。戻り値の型は |
CURRENT_TIME | 現在のタイムゾーンにおけるローカル時刻を返します。この関数は LOCALTIME と同等です。 |
CURRENT_DATE | 現在のタイムゾーンにおけるローカル日付を返します。 |
CURRENT_TIMESTAMP | 現在のタイムゾーンにおけるローカルタイムスタンプを返します。戻り値の型は |
NOW() | 現在のタイムゾーンにおけるローカルタイムスタンプを返します。この関数は CURRENT_TIMESTAMP と同等です。 |
DATE_FORMAT(timestamp, string) | 指定されたフォーマット文字列を使用して、入力タイムスタンプをフォーマットします。 説明 フォーマット文字列は Java SimpleDateFormat と互換があります。 |
DATE_FORMAT_TZ(timestamp, string) | 入力タイムスタンプを指定されたタイムゾーンで文字列としてフォーマットします。 説明
|
DATE_FORMAT_TZ(timestamp, string1[, string2]) | 入力タイムスタンプを、string2 で指定されたタイムゾーンにおいて、string1 で指定されたフォーマットで文字列に変換します。 説明 フォーマット文字列は Java SimpleDateFormat と互換があります。 |
TIMESTAMPADD(timeintervalunit, interval, timepoint) | timepoint に timeintervalunit 単位の interval を加算した後の時刻を返します。 timeintervalunit の有効値は SECOND、MINUTE、HOUR、DAY、MONTH、YEAR です。 |
DATE_ADD(timestamp, integer, string) | 第 1 パラメーターの timestamp を、第 3 パラメーターの string で指定されたタイムゾーンのローカル時刻に変換し、その後、第 2 パラメーターの integer で指定された日数を加算します。結果は yyyy-MM-dd 形式の文字列として返されます。 |
TIMESTAMPDIFF(timepointunit, timepoint1, timepoint2) | timepoint1 と timepoint2 の差分を timepointunit 単位で返します。 timepointunit の有効値は SECOND、MINUTE、HOUR、DAY、MONTH、YEAR です。 |
TO_DATE(string1[, string2]) | フォーマット文字列 string2 を使用して、日付文字列 string1 を DATE 型にパースします。 説明 string2 を指定しない場合、デフォルトのフォーマットは |
TO_TIMESTAMP(string1[, string2]) | フォーマット文字列 string2 を使用して、タイムスタンプ文字列 string1 をタイムゾーン情報を持たない TIMESTAMP 型にパースします。 説明 string2 を指定しない場合、デフォルトのフォーマットは |
TO_TIMESTAMP_LTZ(string1[, string2][, string3]) | フォーマット文字列 string2 を使用して、タイムスタンプ文字列 string1 を string3 で指定されたタイムゾーンの TIMESTAMP_LTZ 型にパースします。 説明
|
TO_TIMESTAMP_LTZ(bigint[, integer]) | 第 1 パラメーター(タイムスタンプ)を、第 2 パラメーターで指定された精度を持つ TIMESTAMP_LTZ 型に変換します。 説明 第 2 パラメーターは 0 または 3 である必要があります。 |
FROM_UNIXTIME(numeric[, string]) | 第 1 パラメーター(1970-01-01 00:00:00 UTC からの経過秒数)をタイムスタンプに変換します。結果は、第 2 パラメーターで指定されたフォーマットの文字列として返されます。 説明 string を指定しない場合、デフォルトのフォーマットは |
UNIX_TIMESTAMP() | 現在の UNIX タイムスタンプ(秒単位)を返します。 |
UNIX_TIMESTAMP(string1[, string2]) | 日時文字列 string1 をフォーマット string2 に変換します。 |
射影式およびフィルター式を評価する際、各部分式は同じ時刻を返します。たとえば、NOW() AS t1, NOW() AS t2, NOW() AS t3 は、評価順序やタイミングに関係なく、常に t1、t2、t3 に対して同じタイムスタンプを返します。
文字列関数
関数 | 説明 |
string1 || string2 | string1 と string2 を連結した文字列を返します。 説明 この演算子は論理 OR 演算子ではありません。 |
CHAR_LENGTH(string) | string の文字数を返します。 |
UPPER(string) | string を大文字に変換して返します。 |
LOWER(string) | string を小文字に変換して返します。 |
TRIM(string1) | 文字列の前後の空白を削除できます。 |
REGEXP_REPLACE(string1, string2, string3) | string1 内でパターン string2 に一致するすべての部分文字列を string3 に置換します。 たとえば、 |
SUBSTRING(string FROM integer1 [ FOR integer2 ]) | string の integer1 番目の位置から integer2 番目の位置までの部分文字列を返します。 説明
|
CONCAT(string1, string2,…) | string1、string2 などを連結して新しい文字列を返します。 たとえば、 |
型変換関数
明示的な型変換には、CAST(<expression> AS <type>) 構文を使用します。以下の変換がサポートされています。
ソース型 | ターゲット型 | 説明 |
Any | 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 | WHEN 句の各 value と value が等しいかどうかを順にチェックします。最初に一致した句の RESULT を返します。 一致する句がない場合は ELSE 句の値を返します。ELSE 句がない場合は NULL を返します。 |
CASE WHEN condition1 THEN result1 (WHEN condition2 THEN result2)* (ELSE result_z) END | WHEN 句の各 condition が真かどうかを順にチェックします。最初に真となった条件の RESULT を返します。 どの条件も真でない場合は ELSE 句の値を返します。ELSE 句がない場合は NULL を返します。 |
COALESCE(value1 [, value2]*) | リスト [value1, value2, ...] の中で最初に出現する NULL でない値を返します。すべての値が NULL の場合は NULL を返します。 |
IF(condition, true_value, false_value) | condition が真の場合は true_value を返します。それ以外の場合は false_value を返します。 |
Variant 関数
Variant 関数は、Ververica Runtime (VVR) 11.6 以降のデータインジェストジョブで使用できます。
関数 | 説明 |
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 です。 |
ハッシュ関数
ハッシュ関数は、Ververica Runtime (VVR) 11.6 以降のデータインジェストジョブで使用できます。
関数 | 説明 |
MD5(string) | string の MD5 ハッシュを 32 文字の 16 進数文字列として返します。string が |
SHA1(string) | string の SHA-1 ハッシュを 40 文字の 16 進数文字列として返します。string が |
SHA224(string) | string の SHA-224 ハッシュを 56 文字の 16 進数文字列として返します。string が |
SHA256(string) | string の SHA-256 ハッシュを 64 文字の 16 進数文字列として返します。string が |
SHA384(string) | string の SHA-384 ハッシュを 96 文字の 16 進数文字列として返します。string が |
SHA512(string) | string の SHA-512 ハッシュを 128 文字の 16 進数文字列として返します。string が |
SHA2(string, hashLength) | SHA-2 ファミリー関数(SHA-224、SHA-256、SHA-384、SHA-512)を使用してハッシュを返します。第 1 パラメーター string は入力文字列です。第 2 パラメーター hashLength は結果のビット長(224、256、384、512)を指定します。string または hashLength が |
ネストされたデータ型へのアクセス
[] 演算子を使用して、ARRAY、MAP、VARIANT などのネストされたデータフィールド内の特定の要素にアクセスできます。この機能は、Ververica Runtime (VVR) 11.6 以降で利用可能です。
アクセス方法
nest_col という名前のネストされたフィールドがあると仮定します。アクセス方法はその内部データ形式によって異なります。
配列形式 (ARRAY/VARIANT)
説明:nest_col[integer]を使用して、指定されたインデックス(インデックスは 1 から開始)の要素を取得します。例:
nest_colが[{"id": 1, "name": "Project A"}, {"id": 2, "name": "Project B"}]の場合。操作:
nest_col[1]を実行します。結果:{"id": 1, "name": "Project A"}。ハッシュテーブル形式 (MAP/VARIANT)
説明:
nest_col[string]を使用して、指定されたキーの値を取得します。例:
nest_colが{"id": 1, "name": "Project A"}の場合。操作:
nest_col['id']を実行します。結果:1。
複雑なネストされたデータの場合、深くネストされた要素にアクセスするために [] 演算子を繰り返し使用します。
例:nest_col が [{"id": 1, "name": "Project A"}, {"id": 2, "name": "Project 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です。