operador union

Usa duas ou mais tabelas e retorna as linhas de todas elas.

Syntax

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

Saiba mais sobre as convenções de sintaxe.

Observação

A operação do union operador pode ser alterada definindo a best_effort propriedade de solicitação truecomo , usando uma instrução set ou por meio de propriedades de solicitação do cliente. Quando essa propriedade é definida truecomo , o union operador desconsiderará a resolução difusa e as falhas de conectividade para executar qualquer uma das subexpressãos sendo "uniãodas" e produzirá um aviso na consulta status resultados.

Parâmetros

Nome Tipo Obrigatório Descrição
T string A expressão tabular de entrada.
UnionParameters string Zero ou mais parâmetros separados por espaço no formato Nome=Valor que controlam o comportamento da operação de correspondência entre linhas e o plano de execução. Confira Parâmetros de união com suporte.
kind string inner ou outer. inner faz com que o resultado tenha o subconjunto de colunas que são comuns a todas as tabelas de entrada. outer faz com que o resultado tenha todas as colunas que ocorrem em qualquer uma das entradas. As células que não são definidas por uma linha de entrada são definidas nullcomo . O padrão é outer.

Com outer, o resultado tem todas as colunas que ocorrem em qualquer uma das entradas, uma coluna para cada nome e ocorrências de tipo. Isso significa que, se uma coluna aparecer em várias tabelas e tiver vários tipos, ela terá uma coluna correspondente para cada tipo no resultado da união. Esse nome de coluna é sufixo com um '_' seguido pelo tipo de coluna de origem.
withsource=Columnname string Se especificada, a saída incluirá uma coluna chamada ColumnName cujo valor indica qual tabela de origem contribuiu com cada linha. Se a consulta fizer referência efetivamente a tabelas de mais de um banco de dados, incluindo o banco de dados padrão, o valor dessa coluna terá um nome de tabela qualificado com o banco de dados. As qualificações de cluster e banco de dados estarão presentes no valor se mais de um cluster for referenciado.
isfuzzy bool Se definido como , permite a trueresolução difusa das pernas de união. O conjunto de fontes de união é reduzido ao conjunto de referências de tabela que existem e são acessíveis no momento durante a análise da consulta e a preparação para execução. Se pelo menos uma dessas tabelas tiver sido encontrada, qualquer falha de resolução gerará um aviso na consulta status resultados, mas não impedirá a execução da consulta. Se nenhuma resolução tiver sido bem-sucedida, a consulta retornará um erro. O padrão é false.

isfuzzy=true aplica-se somente à fase de resolução de origens union. Depois que o conjunto de tabelas de origem for determinado, possíveis falhas de consulta adicionais não serão suprimidas.
Tabelas string Uma ou mais referências de tabela separadas por vírgulas, uma expressão de consulta entre parênteses ou um conjunto de tabelas especificado com um curinga. Por exemplo, E* formaria a união de todas as tabelas do banco de dados cujos nomes começam com E.

Parâmetros de união com suporte

Nome Tipo Obrigatório Descrição
hint.concurrency int Informa ao sistema quantas subconsultas simultâneas do operador union devem ser executadas em paralelo. O padrão é o número de núcleos de CPU no nó único do cluster (2 a 16).
hint.spread int Informa ao sistema quantos nós devem ser usados pela execução simultânea de subconsultas union. O padrão é 1.
Nome Tipo Obrigatório Descrição
T string A expressão tabular de entrada.
kind string inner ou outer. inner faz com que o resultado tenha o subconjunto de colunas que são comuns a todas as tabelas de entrada. outer faz com que o resultado tenha todas as colunas que ocorrem em qualquer uma das entradas. As células que não são definidas por uma linha de entrada são definidas nullcomo . O padrão é outer.

Com outer, o resultado tem todas as colunas que ocorrem em qualquer uma das entradas, uma coluna para cada nome e ocorrências de tipo. Isso significa que, se uma coluna aparecer em várias tabelas e tiver vários tipos, ela terá uma coluna correspondente para cada tipo no resultado da união. Esse nome de coluna é sufixo com um '_' seguido pelo tipo de coluna de origem.
withsource=Columnname string Se especificada, a saída incluirá uma coluna chamada ColumnName cujo valor indica qual tabela de origem contribuiu com cada linha. Se a consulta fizer referência efetivamente a tabelas de mais de um banco de dados, incluindo o banco de dados padrão, o valor dessa coluna terá um nome de tabela qualificado com o banco de dados. As qualificações de cluster e banco de dados estarão presentes no valor se mais de um cluster for referenciado.
isfuzzy bool Se definido como , permite a trueresolução difusa das pernas de união. O conjunto de fontes de união é reduzido ao conjunto de referências de tabela que existem e são acessíveis no momento durante a análise da consulta e a preparação para execução. Se pelo menos uma dessas tabelas tiver sido encontrada, qualquer falha de resolução gerará um aviso na consulta status resultados, mas não impedirá a execução da consulta. Se nenhuma resolução tiver sido bem-sucedida, a consulta retornará um erro. No entanto, em consultas entre workspaces e entre aplicativos, se qualquer um dos workspaces ou aplicativos não for encontrado, a consulta falhará. O padrão é false.

isfuzzy=true aplica-se somente à fase de resolução de origens union. Depois que o conjunto de tabelas de origem for determinado, possíveis falhas de consulta adicionais não serão suprimidas.
Tabelas string Uma ou mais referências de tabela separadas por vírgulas, uma expressão de consulta entre parênteses ou um conjunto de tabelas especificado com um curinga. Por exemplo, E* formaria a união de todas as tabelas do banco de dados cujos nomes começam com E.

Sempre que a lista de tabelas for conhecida, evite usar curingas. Alguns workspaces contêm um número muito grande de tabelas que levam a uma execução ineficiente. As tabelas também podem ser adicionadas ao longo do tempo, levando a resultados não previsíveis.

Observação

  • O union escopo pode incluir instruções let se atribuídas com o view palavra-chave.
  • O union escopo não incluirá funções. Para incluir uma função, defina uma instrução let com o view palavra-chave.
  • Não há garantia da ordem em que as pernas de união aparecerão, mas se cada perna tiver um order by operador, cada perna será classificada.

Retornos

Uma tabela com tantas linhas quanto as que existem em todas as tabelas de entrada.

Exemplos

Tabelas com cadeia de caracteres em nome ou coluna

union K* | where * has "Kusto"

Linhas de todas as tabelas no banco de dados cujo nome começa com K e em que qualquer coluna inclui a palavra Kusto.

Contagem distinta

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

O número de usuários distintos que produziram um evento Query ou um evento Command no dia anterior. No resultado, a coluna “SourceTable” indicará "Query" ou "Command".

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

Esta versão mais eficiente produz o mesmo resultado. Ela filtra cada tabela antes de criar a união.

Usando 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 

Saída

Contagem
2

Observando o status da consulta – o seguinte aviso retornado: 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 

Saída

Contagem
3

Observando o status da consulta – o seguinte aviso retornado: Failed to resolve entity 'SomeView*'

Incompatibilidade de tipos de colunas de origem

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

Saída

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 

Saída

TableName x_long1 x_int x_long
View_1 1
View_2 2
View_3 3

A coluna x de View_1 recebeu o sufixo _long e, como uma coluna chamada x_long já existe no esquema de resultado, os nomes das colunas foram diferenciados, gerando uma nova coluna chamada x_long1