Condividi tramite


Operatore union

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

Sintassi

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

Altre informazioni sulle convenzioni di sintassi.

Nota

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

Parametri

Nome Digita Obbligatorio Descrizione
T string Espressione tabulare di input.
UnionParameters string zero o più parametri separati da spazi sotto forma di Name = Value che controllano il comportamento dell'operazione di corrispondenza righe e il piano di esecuzione. Vedere i parametri di unione supportati.
kind string inner o outer. inner fa sì che il risultato abbia il subset di colonne comuni a tutte le tabelle di input. outer fa sì che il risultato abbia tutte le colonne che si verificano in uno degli input. Le celle non definite da una riga di input vengono 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 del 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 '_' 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 ogni riga. Se la query fa effettivamente riferimento a tabelle di 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 di 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 genera un avviso nei risultati dello stato della query, ma non impedisce 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 Digita Obbligatorio 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 Digita Obbligatorio Descrizione
T string Espressione tabulare di input.
kind string inner o outer. inner fa sì che il risultato abbia il subset di colonne comuni a tutte le tabelle di input. outer fa sì che il risultato abbia tutte le colonne che si verificano in uno degli input. Le celle non definite da una riga di input vengono 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 del 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 '_' 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 ogni riga. Se la query fa effettivamente riferimento a tabelle di 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 di 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 genera un avviso nei risultati dello stato della query, ma non impedisce 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 vengono trovate aree di lavoro o 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 attribuiti 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 appariranno le gambe unione, ma se ogni gamba ha un order by operatore, ogni gamba verrà ordinata.

Valori restituiti

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

Esempi

tabelle con una stringa nel nome o nella 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.

valori distinti

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*'

Mancata corrispondenza dei tipi di colonne di origine

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