ログフィールドには配列またはマップの値が含まれる場合があります。UNNEST 句を使用すると、これらの値を複数の行に展開してクエリと分析を実行できます。
構文
-
配列を、column_name という名前の単一列を持つ複数行に展開します。
UNNEST(x) AS table_alias(column_name) -
マップを、key_name と value_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 |
|
|
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) -
クエリは、展開された要素 (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_type、dim_name、is_anomaly、score、value) のそれぞれに対してcountが 5422 と表示され、各ログに同じキーのセットが含まれていることを確認できます。
例 6
histogram 関数を使用してメソッド別にリクエストをカウントし、結果のマップを UNNEST で展開して縦棒グラフにデータを表示します。
-
クエリ・分析文
* | SELECT key, value FROM( SELECT histogram(request_method) AS result FROM log ), UNNEST(result) AS t(key, value) -
クエリ・分析結果
