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

Simple Log Service:UNNEST句

最終更新日:Aug 26, 2024

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

構文

  • 配列を複数の行に展開します。 column_nameは、行の列名を指定します。

    UNNEST(x) AS table_alias(column_name)
  • マップを複数の行に展開します。 key_nameはキーの列名を指定し、value_nameは値の列名を指定します。

    unnest(y) AS table(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フィールドの値を複数の行に展開します。 フィールド値は配列です。

  • サンプルフィールド

    number:[49, 50, 45, 47, 50]
  • クエリ文

    * |
    SELECT
      a
    FROM  log,
      unnest(cast(json_parse(number) AS array(bigint))) AS t(a)
  • クエリと分析結果unnest

例 2:

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

  • サンプルフィールド

    number:[49, 50, 45, 47, 50]
  • クエリ文

    * |
    SELECT
      sum(a) AS sum
    FROM  log,
      unnest(cast(json_parse(number) as array(bigint))) AS t(a)
  • クエリと分析結果unnest

例 3

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

  • サンプルフィールド

    number:[49, 50, 45, 47, 50]
  • クエリ文

    * |
    SELECT
      a, count(*) AS count
    FROM  log,
      unnest(cast(json_parse(number) as array(bigint))) AS t(a) GROUP BY a
  • クエリと分析結果unnest

例 4

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

  • サンプルフィールド

    result:{
      anomaly_type:"OverThreshold"
      dim_name:"request_time"
      is_anomaly:true
      score:1
      value:"3.000000"}
  • クエリ文

    * |
    select
      key,
      value
    FROM  log,
      unnest(
        try_cast(json_parse(result) as map(varchar, varchar))
      ) as t(key, value)
  • クエリと分析結果unnest

例 5

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

  • サンプルフィールド

    result:{
      anomaly_type:"OverThreshold"
      dim_name:"request_time"
      is_anomaly:true
      score:1
      value:"3.000000"}
  • クエリ文

    * |
    select
      key,
      count(*) AS count
    FROM  log,
      unnest(
        try_cast(json_parse(result) as map(varchar, varchar))
      ) as t(key, value)
    GROUP BY
      key
  • クエリと分析結果unnest

例6

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

  • クエリ文

    * |
    SELECT
      key,
      value
    FROM(
        SELECT
          histogram(request_method) AS result
        FROM      log
      ),
      unnest(result) AS t(key, value)
  • クエリと分析結果unnest