Campos de log podem conter valores do tipo array ou map. Use a cláusula UNNEST para expandir esses valores em várias linhas e facilitar consultas e análises.
Sintaxe
-
Expanda um array em várias linhas em uma única coluna chamada column_name.
UNNEST(x) AS table_alias(column_name) -
Expanda um map em várias linhas com colunas chamadas key_name e value_name.
UNNEST(y) AS table(key_name,value_name)
Se seus dados forem strings, converta-os em um objeto JSON e faça o cast para o tipo array ou map desejado. Por exemplo, use try_cast(json_parse(array_column) as array(bigint)). Para mais detalhes, consulte funções de conversão de tipos.
Parâmetros
|
Parâmetro |
Descrição |
|
x |
Expressão que resulta em um array. |
|
column_name |
Nome da coluna de saída que contém os elementos do |
|
y |
Expressão que resulta em um map. |
|
key_name |
Nome da coluna de saída que contém as chaves do |
|
value_name |
Nome da coluna de saída que contém os valores do |
Exemplos
Exemplo 1
Expanda o valor de array do campo number em várias linhas.
-
Campo de amostra
number:[49, 50, 45, 47, 50] -
Instrução de consulta e análise
* | SELECT a FROM log, UNNEST(cast(json_parse(number) AS array(bigint))) AS t(a) A consulta retorna a coluna a com os elementos expandidos: 49, 50, 45, 47 e 50.
Exemplo 2
Expanda o valor de array do campo number em várias linhas e calcule a soma.
-
Campo de amostra
Este exemplo mostra um único log. A soma agrega os valores de number de todos os logs correspondentes.
number:[49, 50, 45, 47, 50] -
Instrução de consulta e análise
* | SELECT sum(a) AS sum FROM log, UNNEST(cast(json_parse(number) as array(bigint))) AS t(a) A consulta retorna a coluna sum com o valor 368248, que representa o total de todos os elementos
numbernos logs correspondentes.
Exemplo 3
Expanda o valor de array do campo number em várias linhas e agrupe os elementos.
-
Campo de amostra
number:[49, 50, 45, 47, 50] -
Instrução de consulta e análise
* | SELECT a, count(*) AS count FROM log, UNNEST(cast(json_parse(number) as array(bigint))) AS t(a) GROUP BY a O resultado exibe cada elemento e sua contagem. Por exemplo, o elemento 50 aparece 1194 vezes, enquanto os elementos 47, 49 e 45 aparecem 597 vezes cada.
Exemplo 4
Expanda o valor map do campo result em várias linhas e colunas.
-
Campo de amostra
result:{ anomaly_type:"OverThreshold" dim_name:"request_time" is_anomaly:true score:1 value:"3.000000"} -
Instrução de consulta e análise
* | select key, value FROM log, UNNEST( try_cast(json_parse(result) as map(varchar, varchar)) ) AS t(key, value)
Exemplo 5
Expanda o valor map do campo result e agrupe por chave.
-
Campo de amostra
result:{ anomaly_type:"OverThreshold" dim_name:"request_time" is_anomaly:true score:1 value:"3.000000"} -
Instrução de consulta e análise
* | select key, count(*) AS count FROM log, UNNEST( try_cast(json_parse(result) as map(varchar, varchar)) ) AS t(key, value) GROUP BY key O resultado mostra uma
countde 5422 para cada uma das cinco chaves (anomaly_type,dim_name,is_anomaly,scoreevalue), o que confirma que cada log contém o mesmo conjunto de pares chave-valor.
Exemplo 6
Use a função histogram para contar requisições por método e expanda o map resultante com UNNEST para exibir os dados em um gráfico de colunas.
-
Instrução de consulta e análise
* | SELECT key, value FROM( SELECT histogram(request_method) AS result FROM log ), UNNEST(result) AS t(key, value) Resultado da consulta e análise
