Operatore union

Considera due o più tabelle e restituisce le righe di tutte.

Sintassi

[ T| ] [ UnionParameters ] union [kind=|innerouter] [withsource=ColumnName] [isfuzzy=|truefalse] Tabelle

Altre informazioni sulle convenzioni di sintassi.

Nota

L'operazione dell'operatore union può essere modificata impostando la best_effort proprietà request su true, usando un'istruzione set o tramite le proprietà della richiesta client. Quando questa proprietà è impostata su true, l'operatore union ignora la risoluzione fuzzy e gli errori di connettività per eseguire una delle espressioni secondarie che vengono "unionete" e restituisce un avviso nei risultati dello stato della query.

Parametri

Nome Tipo Obbligatoria Descrizione
T string Espressione tabulare di input.
UnionParameters string Zero o più parametri separati dallo spazio sotto forma diValorenome= che controllano il comportamento dell'operazione di corrispondenza di riga e del piano di esecuzione. Vedere parametri di unione supportati.
kind string inner o outer. inner determina che il risultato abbia il subset di colonne comuni a tutte le tabelle di input. outer determina che il risultato abbia tutte le colonne che si verificano in uno degli input. Le celle non definite da una riga di input sono impostate su null. Il valore predefinito è outer.

Con outer, il risultato include tutte le colonne che si verificano in uno degli input, una colonna per ogni nome e occorrenze di tipo. Ciò significa che se una colonna viene visualizzata in più tabelle e ha più tipi, ha una colonna corrispondente per ogni tipo nel risultato dell'unione. Questo nome di colonna è suffisso con un tipo di colonna '_' seguito dal tipo di colonna di origine.
withsource=Columnname string Se specificato, l'output include una colonna denominata ColumnName il cui valore indica quale tabella di origine ha contribuito a ogni riga. Se la query fa riferimento in modo efficace alle tabelle da più database, incluso il database predefinito, il valore di questa colonna ha un nome di tabella qualificato con il database. le qualifiche del cluster e del database sono presenti nel valore se viene fatto riferimento a più cluster.
isfuzzy bool Se impostato su true, consente la risoluzione fuzzy delle gambe dell'unione. Il set di origini di unione viene ridotto al set di riferimenti di tabella esistenti e accessibili al momento durante l'analisi della query e la preparazione per l'esecuzione. Se è stata trovata almeno una tabella di questo tipo, qualsiasi errore di risoluzione restituisce un avviso nei risultati dello stato della query, ma non impedirà l'esecuzione della query. Se non sono state eseguite risoluzioni, la query restituisce un errore. Il valore predefinito è false.

isfuzzy=true si applica solo alla fase di risoluzione delle origini union. Dopo aver determinato il set di tabelle di origine, eventuali errori di query aggiuntivi non verranno eliminati.
Tabelle string Uno o più riferimenti di tabella delimitati da virgole, un'espressione di query racchiusa tra parentesi o un set di tabelle specificate con un carattere jolly. Ad esempio, E* forma l'unione di tutte le tabelle del database i cui nomi iniziano con E.

Parametri di unione supportati

Nome Tipo Obbligatoria Descrizione
hint.concurrency int Suggerisce al sistema il numero di sottoquery simultanee dell'operatore union che devono essere eseguite in parallelo. Il valore predefinito è il numero di core CPU nel singolo nodo del cluster (da 2 a 16).
hint.spread int Suggerisce al sistema il numero di nodi che devono essere usati dall'esecuzione di sottoquery union simultanee. Il valore predefinito è 1.
Nome Tipo Obbligatoria Descrizione
T string Espressione tabulare di input.
kind string inner o outer. inner determina che il risultato abbia il subset di colonne comuni a tutte le tabelle di input. outer determina che il risultato abbia tutte le colonne che si verificano in uno degli input. Le celle non definite da una riga di input sono impostate su null. Il valore predefinito è outer.

Con outer, il risultato include tutte le colonne che si verificano in uno degli input, una colonna per ogni nome e occorrenze di tipo. Ciò significa che se una colonna viene visualizzata in più tabelle e ha più tipi, ha una colonna corrispondente per ogni tipo nel risultato dell'unione. Questo nome di colonna è suffisso con un tipo di colonna '_' seguito dal tipo di colonna di origine.
withsource=Columnname string Se specificato, l'output include una colonna denominata ColumnName il cui valore indica quale tabella di origine ha contribuito a ogni riga. Se la query fa riferimento in modo efficace alle tabelle da più database, incluso il database predefinito, il valore di questa colonna ha un nome di tabella qualificato con il database. le qualifiche del cluster e del database sono presenti nel valore se viene fatto riferimento a più cluster.
isfuzzy bool Se impostato su true, consente la risoluzione fuzzy delle gambe dell'unione. Il set di origini di unione viene ridotto al set di riferimenti di tabella esistenti e accessibili al momento durante l'analisi della query e la preparazione per l'esecuzione. Se è stata trovata almeno una tabella di questo tipo, qualsiasi errore di risoluzione restituisce un avviso nei risultati dello stato della query, ma non impedirà l'esecuzione della query. Se non sono state eseguite risoluzioni, la query restituisce un errore. Tuttavia, nelle query tra aree di lavoro e tra app, se non viene trovata alcuna delle aree di lavoro o delle app, la query avrà esito negativo. Il valore predefinito è false.

isfuzzy=true si applica solo alla fase di risoluzione delle origini union. Dopo aver determinato il set di tabelle di origine, eventuali errori di query aggiuntivi non verranno eliminati.
Tabelle string Uno o più riferimenti di tabella delimitati da virgole, un'espressione di query racchiusa tra parentesi o un set di tabelle specificate con un carattere jolly. Ad esempio, E* forma l'unione di tutte le tabelle del database i cui nomi iniziano con E.

Ogni volta che l'elenco di tabelle è noto, evitare di usare caratteri jolly. Alcune aree di lavoro contengono un numero molto elevato di tabelle, il che comporterebbe un'esecuzione inefficiente. Nel corso del tempo è inoltre possibile che vengano aggiunte tabelle, generando risultati imprevisti.

Nota

  • L'ambito union può includere istruzioni let se attributi con la view parola chiave.
  • L'ambito union non includerà funzioni. Per includere una funzione, definire un'istruzione let con la view parola chiave.
  • Non c'è garanzia dell'ordine in cui verranno visualizzate le gambe dell'unione, ma se ogni gamba ha un order by operatore, ogni gamba verrà ordinata.

Restituisce

Una tabella con un numero di righe corrispondente a quello delle righe di tutte le tabelle di input.

Esempio

Tabelle con stringa in nome o colonna

union K* | where * has "Kusto"

Restituisce le righe di tutte le tabelle del database il cui nome inizia con K e in cui qualsiasi colonna include la parola Kusto.

Conteggio distinto

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

Numero di utenti distinti che hanno generato un evento Query o un evento Command nel giorno precedente. Nel risultato la colonna "SourceTable" indicherà "Query" o "Command".

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

Questa versione più efficiente genera lo stesso risultato. Filtra ogni tabella prima di creare l'unione.

Uso di 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 

Output

Conteggio
2

Osservando lo stato della query, viene restituito l'avviso seguente: 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 

Output

Conteggio
3

Osservando lo stato della query, viene restituito l'avviso seguente: Failed to resolve entity 'SomeView*'

Tipi di colonne di origine non corrispondenti

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

Output

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 

Output

TableName x_long1 x_int x_long
View_1 1
View_2 2
View_3 3

La colonna x di View_1 ha ricevuto il suffisso _long e poiché nello schema del risultato esiste già una colonna denominata x_long, i nomi delle colonne sono stati deduplicati, generando una nuova colonna x_long1