Operador union

Toma dos o más tablas y devuelve las filas de todas ellas.

Sintaxis

[ T| ] union [ UnionParameters ] [kind=|outerinner] [withsource=ColumnName] [isfuzzy=|truefalse] Tables

Obtenga más información sobre las convenciones de sintaxis.

Nota

La operación del union operador se puede modificar estableciendo la best_effort propiedad truerequest en , mediante una instrucción set o mediante propiedades de solicitud de cliente. Cuando esta propiedad se establece trueen , el union operador omitirá la resolución aproximada y los errores de conectividad para ejecutar cualquiera de las subexpresiones que se "unionan" y producirá una advertencia en los resultados del estado de la consulta.

Parámetros

Nombre Tipo Requerido Descripción
T string Expresión tabular de entrada.
UnionParameters string Cero o más parámetros (separados por espacios) con el formato Name=Value, que controlan el comportamiento de la operación de coincidencia de filas y el plan de ejecución. Consulte parámetros de unión admitidos.
kind string inner o outer. inner hace que el resultado tenga el subconjunto de columnas que son comunes a todas las tablas de entrada. outer hace que el resultado tenga todas las columnas que se producen en cualquiera de las entradas. Las celdas que no están definidas por una fila de entrada se establecen en null. El valor predeterminado es outer.

Con outer, el resultado tiene todas las columnas que se producen en cualquiera de las entradas, una columna para cada nombre y repeticiones de tipo. Esto significa que si una columna aparece en varias tablas y tiene varios tipos, tiene una columna correspondiente para cada tipo en el resultado de la unión. Este nombre de columna tiene el sufijo "_" seguido del tipo de columna de origen.
withsource=Columnname string Si se especifica, la salida incluye una columna denominada ColumnName cuyo valor indica qué tabla de origen ha contribuido cada fila. Si la consulta hace referencia eficazmente a tablas de más de una base de datos, incluida la base de datos predeterminada, el valor de esta columna tiene un nombre de tabla calificado con la base de datos. las calificaciones de clúster y de base de datos están presentes en el valor si se hace referencia a más de un clúster.
isfuzzy bool Si se establece en true, permite la resolución aproximada de las piernas de unión. El conjunto de orígenes de unión se reduce al conjunto de referencias de tabla que existen y son accesibles en el momento en que se analiza la consulta y se prepara para su ejecución. Si se encontró al menos una tabla de este tipo, cualquier error de resolución genera una advertencia en los resultados del estado de la consulta, pero no impedirá la ejecución de la consulta. Si no se han realizado correctamente las resoluciones, la consulta devuelve un error. El valor predeterminado es false.

isfuzzy=true solo se aplica a la fase de resolución de orígenes de union. Una vez determinado el conjunto de tablas de origen, no se suprimirán los posibles errores de consulta adicionales.
Tablas string Una o varias referencias de tabla separadas por comas, una expresión de consulta entre paréntesis o un conjunto de tablas especificadas con un carácter comodín. Por ejemplo, E* forma la unión de todas las tablas de la base de datos cuyos nombres comienzan con E.

Parámetros de unión admitidos

Nombre Tipo Requerido Descripción
hint.concurrency int sugiere al sistema el número de subconsultas simultáneas del operador union que se deben ejecutar en paralelo. El valor predeterminado es el número de núcleos de CPU en el nodo único del clúster (de 2 a 16).
hint.spread int sugiere al sistema el número de nodos que debe usar la ejecución simultánea de subconsultas union. El valor predeterminado es 1.
Nombre Tipo Requerido Descripción
T string Expresión tabular de entrada.
kind string inner o outer. inner hace que el resultado tenga el subconjunto de columnas que son comunes a todas las tablas de entrada. outer hace que el resultado tenga todas las columnas que se producen en cualquiera de las entradas. Las celdas que no están definidas por una fila de entrada se establecen en null. El valor predeterminado es outer.

Con outer, el resultado tiene todas las columnas que se producen en cualquiera de las entradas, una columna para cada nombre y repeticiones de tipo. Esto significa que si una columna aparece en varias tablas y tiene varios tipos, tiene una columna correspondiente para cada tipo en el resultado de la unión. Este nombre de columna tiene el sufijo "_" seguido del tipo de columna de origen.
withsource=Columnname string Si se especifica, la salida incluye una columna denominada ColumnName cuyo valor indica qué tabla de origen ha contribuido cada fila. Si la consulta hace referencia eficazmente a tablas de más de una base de datos, incluida la base de datos predeterminada, el valor de esta columna tiene un nombre de tabla calificado con la base de datos. las calificaciones de clúster y de base de datos están presentes en el valor si se hace referencia a más de un clúster.
isfuzzy bool Si se establece en true, permite la resolución aproximada de las piernas de unión. El conjunto de orígenes de unión se reduce al conjunto de referencias de tabla que existen y son accesibles en el momento en que se analiza la consulta y se prepara para su ejecución. Si se encontró al menos una tabla de este tipo, cualquier error de resolución genera una advertencia en los resultados del estado de la consulta, pero no impedirá la ejecución de la consulta. Si no se han realizado correctamente las resoluciones, la consulta devuelve un error. Sin embargo, en las consultas entre áreas de trabajo y entre aplicaciones, si no se encuentra alguna de las áreas de trabajo o aplicaciones, se producirá un error en la consulta. El valor predeterminado es false.

isfuzzy=true solo se aplica a la fase de resolución de orígenes de union. Una vez determinado el conjunto de tablas de origen, no se suprimirán los posibles errores de consulta adicionales.
Tablas string Una o varias referencias de tabla separadas por comas, una expresión de consulta entre paréntesis o un conjunto de tablas especificadas con un carácter comodín. Por ejemplo, E* forma la unión de todas las tablas de la base de datos cuyos nombres comienzan con E.

Siempre que se conozca la lista de tablas, evite usar caracteres comodín. Algunos espacios de trabajo contienen un número muy grande de tablas, lo que provocaría una ejecución ineficiente. También se pueden agregar tablas con el tiempo, lo que provoca resultados imprevisibles.

Nota

  • El union ámbito puede incluir instrucciones let si se atribuyen a la view palabra clave .
  • El union ámbito no incluirá funciones. Para incluir una función, defina una instrucción let con la view palabra clave .
  • No hay ninguna garantía del orden en que aparecerán las piernas de unión, pero si cada pierna tiene un order by operador, se ordenará cada pierna.

Devoluciones

Una tabla con todas las filas que hay en las tablas de entrada.

Ejemplos

Tablas con cadena en nombre o columna

union K* | where * has "Kusto"

Filas de todas las tablas de la base de datos cuyo nombre comience por K y en las que alguna columna incluya la palabra Kusto.

Recuento de valores únicos

union withsource=SourceTable kind=outer Query, Command
| where Timestamp > ago(1d)
| summarize dcount(UserId)

El número de usuarios distintivos que han creado un evento Query o un evento Command a lo largo del día anterior. En el resultado, la columna "SourceTable" indicará "Query" o "Command".

Query
| where Timestamp > ago(1d)
| union withsource=SourceTable kind=outer 
   (Command | where Timestamp > ago(1d))
| summarize dcount(UserId)

Esta versión más eficaz, produce el mismo resultado. Filtra cada tabla antes de crear la unión.

Usar isfuzzy=true

// Using union isfuzzy=true to access non-existing view:                                     
let View_1 = view () { print x=1 };
let View_2 = view () { print x=1 };
let OtherView_1 = view () { print x=1 };
union isfuzzy=true
(View_1 | where x > 0), 
(View_2 | where x > 0),
(View_3 | where x > 0)
| count 

Salida

Count
2

Al observar el estado de la consulta: se devolvió la siguiente advertencia: Failed to resolve entity 'View_3'.

// Using union isfuzzy=true and wildcard access:
let View_1 = view () { print x=1 };
let View_2 = view () { print x=1 };
let OtherView_1 = view () { print x=1 };
union isfuzzy=true View*, SomeView*, OtherView*
| count 

Salida

Count
3

Al observar el estado de la consulta: se devolvió la siguiente advertencia: Failed to resolve entity 'SomeView*'.

Error de coincidencia de tipos de columnas de origen

let View_1 = view () { print x=1 };
let View_2 = view () { print x=toint(2) };
union withsource=TableName View_1, View_2

Salida

TableName x_long x_int
View_1 1
View_2 2
let View_1 = view () { print x=1 };
let View_2 = view () { print x=toint(2) };
let View_3 = view () { print x_long=3 };
union withsource=TableName View_1, View_2, View_3 

Salida

TableName x_long1 x_int x_long
View_1 1
View_2 2
View_3 3

La columna x de View_1 recibió el sufijo _long y, como ya existe una columna denominada x_long en el esquema de resultados, los nombres de columna se desduplicaron, lo que produjo una nueva columna: x_long1.