すべてのプロダクト
Search
ドキュメントセンター

Realtime Compute for Apache Flink:複数キーバリュー

最終更新日:Jan 07, 2025

このトピックでは、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