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

Simple Log Service:UNNEST 句

最終更新日:Jun 11, 2026

ログフィールドには配列またはマップの値が含まれる場合があります。UNNEST 句を使用すると、これらの値を複数の行に展開してクエリと分析を実行できます。

構文

  • 配列を、column_name という名前の単一列を持つ複数行に展開します。

    UNNEST(x) AS table_alias(column_name)
  • マップを、key_namevalue_name という名前の列を持つ複数行に展開します。

    UNNEST(y) AS table_alias(key_name, value_name)
重要

データが文字列の場合は、JSON オブジェクトに解析してから、必要な array または map 型にキャストしてください。たとえば、try_cast(json_parse(array_column) as array(bigint)) を使用します。詳細については、「型変換関数」をご参照ください。

パラメーター

パラメーター

説明

x

配列として評価される式。

column_name

array の要素を格納する出力列の名前。

y

マップとして評価される式。

key_name

map のキーを格納する出力列の名前。

value_name

map の値を格納する出力列の名前。

例 1

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

  • サンプルフィールド

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

    * |
    SELECT
      a
    FROM  log,
      UNNEST(cast(json_parse(number) AS array(bigint))) AS t(a)
  • クエリは、展開された要素 (49、50、45、47、50) を含む列 a を返します。

例 2

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

  • サンプルフィールド

    このサンプルは単一のログを示しています。合計は、一致するすべてのログを対象に、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)
  • クエリは、値 368248 を持つ列 sum を返します。これは、一致するすべてのログに含まれるすべての number 要素の合計です。

例 3

number フィールドの配列値を複数の行に展開し、要素をグループ化します。

  • サンプルフィールド

    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
  • 結果には、各要素とその出現回数が表示されます。たとえば、要素 50 は 1194 回出現し、要素 47、49、45 はそれぞれ 597 回出現します。

例 4

result フィールドの map 値を複数の行と列に展開します。

  • サンプルフィールド

    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)

例 5

result フィールドの map 値を展開し、キーでグループ化します。

  • サンプルフィールド

    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
  • 結果には、5 つのキー (anomaly_typedim_nameis_anomalyscorevalue) のそれぞれに対して count が 5422 と表示され、各ログに同じキーのセットが含まれていることを確認できます。

例 6

histogram 関数を使用してメソッド別にリクエストをカウントし、結果のマップを UNNEST で展開して縦棒グラフにデータを表示します。

  • クエリ・分析文

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