operador union
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Usa duas ou mais tabelas e retorna as linhas de todas elas.
Sintaxe
[ T |
] union
[ UnionParameters ] [kind=
inner
|outer
] [ withsource=
ColumnName] [ true
|isfuzzy=
false
] Tabelas
[ T |
] union
[kind=
inner
|outer
] [ withsource=
ColumnName] [ true
|isfuzzy=
false
] Tabelas
Saiba mais sobre as convenções de sintaxe.
Observação
A operação do union
operador pode ser alterada definindo a best_effort
propriedade request como true
, usando uma instrução set ou por meio de propriedades de solicitação do cliente. Quando essa propriedade for definida como true
, o union
operador desconsiderará a resolução difusa e as falhas de conectividade para executar qualquer uma das subexpressões que estão sendo "unidas" e produzirá um aviso nos resultados do status da consulta.
Parâmetros
Nome | Digitar | Obrigatória | Descrição |
---|---|---|---|
T | string |
A expressão tabular de entrada. | |
UnionParameters | string |
zero ou mais parâmetros separados por espaço no formulário de Nome = Valor que controlam o comportamento da operação de correspondência de linhas e o plano de execução. Consulte os parâmetros de união suportados. |
|
kind |
string |
inner ou outer . inner faz com que o resultado tenha o subconjunto de colunas 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 como null . 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 tem o sufixo '_' seguido pelo tipo de coluna de origem. |
|
withsource= ColumnName |
string |
Se especificado, a saída inclui uma coluna chamada ColumnName cujo valor indica qual tabela de origem contribuiu com cada linha. Se a consulta fizer referência efetiva 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 true , permite a resoluçã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 a execução. Se pelo menos uma dessas tabelas for encontrada, qualquer falha de resolução produzirá um aviso nos resultados do status da consulta, mas não impedirá a execução da consulta. Se nenhuma resolução for 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 especificadas 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 suportados
Nome | Digitar | Obrigatória | 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 único nó 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 | Digitar | Obrigatória | 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 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 como null . 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 tem o sufixo '_' seguido pelo tipo de coluna de origem. |
|
withsource= ColumnName |
string |
Se especificado, a saída inclui uma coluna chamada ColumnName cujo valor indica qual tabela de origem contribuiu com cada linha. Se a consulta fizer referência efetiva 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 true , permite a resoluçã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 a execução. Se pelo menos uma dessas tabelas for encontrada, qualquer falha de resolução produzirá um aviso nos resultados do status da consulta, mas não impedirá a execução da consulta. Se nenhuma resolução for 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 especificadas 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 aview
palavra-chave. - O
union
escopo não incluirá funções. Para incluir uma função, defina uma instrução let com aview
palavra-chave. - Não há garantia da ordem em que as pernas da união aparecerão, mas se cada perna tiver um
order by
operador, cada perna será classificada.
Devoluções
Uma tabela com tantas linhas quanto as que existem em todas as tabelas de entrada.
Exemplos
Tabelas com cadeia de caracteres no nome ou na 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
Count |
---|
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
Count |
---|
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