Los campos de registro pueden contener valores de tipo arreglo o mapa. Utilice la cláusula UNNEST para expandir estos valores en varias filas y facilitar su consulta y análisis.
Sintaxis
-
Expanda un arreglo en varias filas dentro de una sola columna llamada column_name.
UNNEST(x) AS table_alias(column_name) -
Expanda un mapa en varias filas con columnas denominadas key_name y value_name.
UNNEST(y) AS table(key_name,value_name)
Si sus datos son una cadena, analícelos sintácticamente como un objeto JSON y conviértalos al tipo array o map requerido. Por ejemplo, use try_cast(json_parse(array_column) as array(bigint)). Consulte type conversion functions para obtener más detalles.
Parámetros
|
Parámetro |
Descripción |
|
x |
Expresión que se evalúa como un arreglo. |
|
column_name |
Nombre de la columna de salida que contendrá los elementos del |
|
y |
Expresión que se evalúa como un mapa. |
|
key_name |
Nombre de la columna de salida que contendrá las claves del |
|
value_name |
Nombre de la columna de salida que contendrá los valores del |
Ejemplos
Example 1
Expanda el valor de arreglo del campo number en varias filas.
-
Campo de muestra
number:[49, 50, 45, 47, 50] -
Instrucción de consulta y análisis
* | SELECT a FROM log, UNNEST(cast(json_parse(number) AS array(bigint))) AS t(a) La consulta devuelve la columna a con los elementos expandidos: 49, 50, 45, 47 y 50.
Example 2
Expanda el valor de arreglo del campo number en varias filas y calcule la suma.
-
Campo de muestra
Este ejemplo muestra un solo registro. La suma se calcula sobre todos los registros coincidentes mediante la agregación de los valores del campo number.
number:[49, 50, 45, 47, 50] -
Instrucción de consulta y análisis
* | SELECT sum(a) AS sum FROM log, UNNEST(cast(json_parse(number) as array(bigint))) AS t(a) La consulta devuelve la columna sum con el valor 368248, que corresponde al total de todos los elementos de
numberen los registros coincidentes.
Example 3
Expanda el valor de arreglo del campo number en varias filas y agrupe los elementos.
-
Campo de muestra
number:[49, 50, 45, 47, 50] -
Instrucción de consulta y análisis
* | SELECT a, count(*) AS count FROM log, UNNEST(cast(json_parse(number) as array(bigint))) AS t(a) GROUP BY a El resultado muestra cada elemento con su conteo correspondiente. Por ejemplo, el elemento 50 aparece 1194 veces, mientras que los elementos 47, 49 y 45 aparecen 597 veces cada uno.
Example 4
Expanda el valor de map del campo result en varias filas y columnas.
-
Campo de muestra
result:{ anomaly_type:"OverThreshold" dim_name:"request_time" is_anomaly:true score:1 value:"3.000000"} -
Instrucción de consulta y análisis
* | select key, value FROM log, UNNEST( try_cast(json_parse(result) as map(varchar, varchar)) ) AS t(key, value)
Example 5
Expanda el valor de map del campo result y agrupe por clave.
-
Campo de muestra
result:{ anomaly_type:"OverThreshold" dim_name:"request_time" is_anomaly:true score:1 value:"3.000000"} -
Instrucción de consulta y análisis
* | select key, count(*) AS count FROM log, UNNEST( try_cast(json_parse(result) as map(varchar, varchar)) ) AS t(key, value) GROUP BY key El resultado muestra un
countde 5422 para cada una de las cinco claves (anomaly_type,dim_name,is_anomaly,scoreyvalue), lo cual confirma que cada registro contiene el mismo conjunto de pares clave-valor.
Example 6
Utilice la función histogram para contar las solicitudes por método y luego expanda el mapa resultante con UNNEST para visualizar los datos en un gráfico de columnas.
-
Instrucción de consulta y análisis
* | SELECT key, value FROM( SELECT histogram(request_method) AS result FROM log ), UNNEST(result) AS t(key, value) Resultado de la consulta y análisis
