UNNEST子句
在復雜的業(yè)務場景下,日志字段的值可能為數(shù)組(array)、對象(map)等類型。對這種特殊類型的日志字段進行查詢和分析時,您可以先使用UNNEST子句將字段值展開。
語法
將array類型的數(shù)據(jù)展開為多行單列形式,列名為column_name。
UNNEST(x) AS table_alias(column_name)
將map類型的數(shù)據(jù)展開為多行多列形式,列名為key_name和value_name。
UNNEST(y) AS table(key_name,value_name)
UNNEST子句處理的是array或者map類型的數(shù)據(jù)。如果您輸入的數(shù)據(jù)為字符串類型,則需要先轉(zhuǎn)化為JSON類型,然后再轉(zhuǎn)化為array類型或map類型,轉(zhuǎn)化方法為try_cast(json_parse(array_column) as array(bigint))
。更多信息,請參見類型轉(zhuǎn)換函數(shù)。
參數(shù)說明
參數(shù) | 說明 |
x | 數(shù)據(jù)類型為array類型。 |
column_name | 將array類型的數(shù)據(jù)展開后,指定一個列名。該列用于存放array中的元素。 |
y | 數(shù)據(jù)類型為map類型。 |
key_name | 將map類型的數(shù)據(jù)展開后,指定一個列名。該列用于存放map中的鍵。 |
value_name | 將map類型的數(shù)據(jù)展開后,指定一個列名。該列用于存放map中的鍵值。 |
示例
示例1
將number字段的值(array類型)展開為多行單列形式。
字段樣例
number:[49, 50, 45, 47, 50]
查詢和分析語句
* | SELECT a FROM log, UNNEST(cast(json_parse(number) AS array(bigint))) AS t(a)
查詢和分析結果
示例2
將number字段的值(array類型)展開為多行單列形式,并進行求和計算。
字段樣例
此處僅提供一條日志樣例,求和計算是針對所有日志,即對所有日志中的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字段的值(array類型)展開為多行單列形式,并對各個值進行分組統(tǒng)計。
字段樣例
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字段的值(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
將number字段的值(map類型)展開為多行多列形式,并對各個鍵進行分組統(tǒng)計。
字段樣例
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函數(shù)獲取各個請求方法對應的請求數(shù)量,返回結果為map類型。然后通過unnest子句將histogram函數(shù)的返回結果展開為多行多列形式,并通過柱狀圖展示。
查詢和分析語句
* | SELECT key, value FROM( SELECT histogram(request_method) AS result FROM log ), UNNEST(result) AS t(key, value)
查詢和分析結果