複雑なビジネスシナリオでは、ログフィールドの値は、配列やマップなどの複雑なデータ型である場合があります。 値が上記の型であるフィールドを含むログをクエリおよび分析する場合は、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)
クエリと分析結果
例 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)
クエリと分析結果
例 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
クエリと分析結果
例 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)
クエリと分析結果
例 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
クエリと分析結果
例6
各リクエストメソッドを使用して送信されたリクエストの数を取得するには、histogram関数を呼び出します。 戻り値はマップです。 次に、UNNEST句を使用してマップを複数の行に展開し、クエリと分析の結果を縦棒グラフに表示します。
クエリ文
* | SELECT key, value FROM( SELECT histogram(request_method) AS result FROM log ), unnest(result) AS t(key, value)
クエリと分析結果