複雑なビジネスシナリオでは、ログフィールドの値は、配列やマップなどの複雑なデータ型である場合があります。 値が上記の型であるフィールドを含むログをクエリおよび分析する場合は、UNNEST句を使用して、分析のためにフィールド値を複数の行に展開できます。

構文

  • 配列を複数の行に展開します。 column_nameは、行の列名を指定します。
    UNNEST(x) AS table_alias( column_name)
  • マップを複数の行に展開します。 key_nameはキーの列名を指定し、value_nameは値の列名を指定します。
    unnest(y) ASテーブル (key_name, value_name)
重要 UNNEST句を使用して、配列またはマップのみを展開できます。 文字列を展開する場合は、文字列をJSONデータに変換する必要があります。 次に、try_cast(json_parse(array_column) as array(bigint)) 構文を使用して、JSONデータを配列またはマップに変換できます。 詳細については、「データ型変換関数」をご参照ください。

パラメーター

項目説明
xこのパラメーターの値は配列です。
column_name配列から展開されたデータに指定する列名。 この列は、配列の要素を格納するために使用されます。
yこのパラメーターの値はマップです。
key_nameマップから展開されたデータに指定する列名。 この列は、マップ内のキーを格納するために使用されます。
value_nameマップから展開されるデータに指定する列名。 この列は、値をマップに格納するために使用されます。

例 1:

numberフィールドの値を複数の行に展開します。 フィールド値は配列です。

  • サンプルフィールド
    番号:[49, 50, 45, 47, 50]
  • クエリ文
    * |
    選択
      a
    ログから、
      unnest(cast(json_parse(number) AS array(bigint))) AS t(a)
  • クエリと分析結果unnest

例 2:

numberフィールドの値を複数の行に展開し、要素の合計を計算します。 フィールド値は配列です。

  • サンプルフィールド
    番号:[49, 50, 45, 47, 50]
  • クエリ文
    * |
    選択
      合計 (a) AS合計
    ログから、
      unnest(cast(json_parse(number) as array(bigint))) AS t(a)
  • クエリと分析結果unnest

例 3

numberフィールドの値を複数の行に展開し、要素に対してGROUP BY操作を実行します。 フィールド値は配列です。

  • サンプルフィールド
    番号:[49, 50, 45, 47, 50]
  • クエリ文
    * |
    選択
      a、カウント (*) ASカウント
    ログから、
      unnest(cast(json_parse(number) as array(bigint))) AS t(a) GROUP BY a
  • クエリと分析結果unnest

例 4

numberフィールドの値を複数の行に展開します。 フィールド値はマップです。

  • サンプルフィールド
    result:{
      anomaly_type:"超過しきい値"
      dim_name:"request_time"
      is_anomaly:true
      スコア: 1
      値: "3.000000"}
  • クエリ文
    * |
    選択
      キー,
      値
    ログから、
      unnest (
        try_cast(json_parse(result) as map(varchar, varchar))
      ) としてt (キー、値)
  • クエリと分析結果unnest

例 5

numberフィールドの値を複数の行に展開し、各キーに対してGROUP BY操作を実行します。 フィールド値はマップです。

  • サンプルフィールド
    result:{
      anomaly_type:"超過しきい値"
      dim_name:"request_time"
      is_anomaly:true
      スコア: 1
      値: "3.000000"}
  • クエリ文
    * |
    選択
      キー,
      カウント (*) ASカウント
    ログから、
      unnest (
        try_cast(json_parse(result) as map(varchar, varchar))
      ) としてt (キー、値)
    グループ化
      キー
  • クエリと分析結果unnest

例6

各リクエストメソッドを使用して送信されたリクエストの数を取得するには、histogram関数を呼び出します。 戻り値はマップです。 次に、UNNEST句を使用してマップを複数の行に展開し、クエリと分析の結果を縦棒グラフに表示します。

  • クエリ文
    * |
    選択
      キー,
      値
    から (
        SELECT
          ヒストグラム (request_method) AS結果
        ログから
      ),
      unnest(result) AS t (キー、値)
  • クエリと分析結果unnest