このトピックでは、MULTI_KEYVALUE関数の使用方法について説明します。この関数は、split1で指定されたキーバリューペア区切り文字に基づいて文字列をキーバリューペアに分割し、split2で指定された区切り文字に基づいてキーバリューペアを分割し、key_name1とkey_name2の値を返します。
制限事項
この関数は、Ververica Runtime(VVR) 3.0.0以降を使用するRealtime Compute for Apache Flinkでのみサポートされています。
VVR 8.0.7以前を使用するRealtime Compute for Apache Flinkでは、解析エラーを回避するために、以下のシナリオでMULTI_KEYVALUE関数の代わりにKEYVALUE関数を使用する必要があります。
MULTI_KEYVALUE関数のsplit1およびsplit2パラメーターで指定された区切り文字と、すべてのkey_nameパラメーターの値に定数文字列が使用されています。
特定のエンジンバージョンのRealtime Compute for Apache Flinkの名前空間で、MULTI_KEYVALUE関数が複数回呼び出され、MULTI_KEYVALUE関数が呼び出されるたびにsplit1およびsplit2パラメーターで指定された異なる区切り文字が使用されます。 MULTI_KEYVALUE関数は、単一のデプロイメントで繰り返し呼び出すことも、複数のデプロイメントで個別に呼び出すこともできます。
KEYVALUE関数を使用して同じフィールド内の異なるkey_name値を複数回解析する場合、Realtime Compute for Apache Flinkは中間解析結果を再利用し、文字列にバイナリ解析メカニズムを使用します。これにより、全体的な処理効率が最適化されます。 KEYVALUE関数はスカラー関数です。複数のフィールドを解析するには、KEYVALUE関数を複数回呼び出す必要があります。
構文
MULTI_KEYVALUE(VARCHAR str, VARCHAR split1, VARCHAR split2, VARCHAR key_name1, VARCHAR key_name2, ...)入力パラメーター
パラメーター | データ型 | 説明 |
str | VARCHAR | 分割する文字列。 |
split1 | VARCHAR | キーバリューペア区切り文字。 split1の値がNULLの場合、スペースがキーバリューペア区切り文字として使用されます。 split1の長さが1より大きい場合、split1は区切り文字のセットのみを表し、各文字は有効な区切り文字を表します。 |
split2 | VARCHAR | キーバリュー区切り文字。 split2の値がNULLの場合、スペースがキーバリュー区切り文字として使用されます。 split2の長さが1より大きい場合、split2は区切り文字のセットのみを表し、各文字は有効な区切り文字を表します。 |
key_name1, key_name2, ... | VARCHAR | 値を取得するキーのリスト。 |
例
テストデータ
表 1 T1
str(VARCHAR)
split1(VARCHAR)
split2(VARCHAR)
key1(VARCHAR)
key2(VARCHAR)
k1=v1;k2=v2
;
=
k1
k2
NULL
;
=
k1
k2
k1:v1;k2:v2
;
:
k1
k3
k1:v1;k2:v2
;
=
k1
k2
k1:v1;k2:v2
,
:
k1
k2
k1:v1;k2=v2
;
:
k1
k2
k1:v1abck2:v2
abc
:
k1
k2
k1:v1;k2=v2
;
:=
k1
k2
k1:v1 k2:v2
NULL
:
k1
k2
k1 v1;k2 v2
;
NULL
k1
k2
テストステートメント
SELECT c1, c2 FROM T1, lateral table(MULTI_KEYVALUE(str, split1, split2, key1, key2)) as T(c1, c2);テスト結果
c1(VARCHAR)
c2(VARCHAR)
v1
v2
NULL
NULL
v1
NULL
NULL
NULL
NULL
NULL
v1
NULL
v1
v2
v1
v2
v1
v2
v1
v2