Compartilhar via


operador union

Aplica-se a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft 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 a view palavra-chave.
  • O union escopo não incluirá funções. Para incluir uma função, defina uma instrução let com a view 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