Operatore lookup

Estende le colonne di una tabella dei fatti con valori ricercati in una tabella delle dimensioni.

FactTable | lookup kind=leftouter (DimensionTable) on CommonColumn, $left.Col1 == $right.Col2

In questo caso, il risultato è una tabella che estende i FactTable$leftdati DimensionTable () da (a cui fa riferimento $right) eseguendo una ricerca di ogni coppia (,Col) dalla tabella precedente con ogni coppia (CommonColumnCommonColumn1,Col2) nella seconda tabella. Per le differenze tra le tabelle dei fatti e delle dimensioni, vedere tabelle dei fatti e delle dimensioni.

L'operatore lookup esegue un'operazione simile all'operatore join con le differenze seguenti:

  • Il risultato non ripete colonne dalla $right tabella che sono la base per l'operazione di join.
  • Sono supportati leftouter solo due tipi di ricerca e inner, con leftouter l'impostazione predefinita.
  • In termini di prestazioni, il sistema presuppone per impostazione predefinita che la $left tabella sia la tabella più grande (fatti) e la $right tabella sia la tabella più piccola (dimensioni). Questo è esattamente opposto al presupposto usato dall'operatore join .
  • L'operatore lookup trasmette automaticamente la $right tabella alla $left tabella (essenzialmente, si comporta come se hint.broadcast fosse stato specificato). Ciò limita le dimensioni della $right tabella.

Nota

Se il lato destro della ricerca è maggiore di diverse decine di MB, la query avrà esito negativo.

È possibile eseguire la query seguente per stimare le dimensioni del lato destro in byte:

rightSide
| summarize sum(estimate_data_size(*))

Sintassi

LeftTable|lookup [kind= (leftouter|inner)] (Condizionidi rightTable)on

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Tipo Obbligatoria Descrizione
LeftTable string ✔️ Espressione tabella o tabulare che rappresenta la base per la ricerca. Indicata come $left.
RightTable string ✔️ Espressione tabella o tabulare usata per "popolare" nuove colonne nella tabella dei fatti. Indicata come $right.
Attributes (Attributi) string ✔️ Elenco delimitato da virgole di una o più regole che descrivono la corrispondenza delle righe da LeftTable alle righe da RightTable. Vengono valutate più regole mediante l'operatore logico and. Vedere Regole.
kind string Determina come trattare le righe in LeftTable senza corrispondenza in RightTable. Per impostazione predefinita, leftouter viene usato, il che significa che tutte le righe verranno visualizzate nell'output con valori Null usati per i valori mancanti delle colonne RightTable aggiunte dall'operatore. Se inner viene usato, tali righe vengono omesse dall'output. Altri tipi di join non sono supportati dall'operatore lookup .

Regole

Tipo di regola Sintassi Predicate
Uguaglianza in base al nome ColumnName whereLeftTable. Columnname==RightTable. Columnname
Uguaglianza in base al valore $left.LeftColumn==$right.RightColumn where$left.LeftColumn==$right.*RightColumn

Nota

Nel caso di "uguaglianza per valore", i nomi di colonna devono essere qualificati con la tabella proprietario applicabile denotata da $left e $right notazioni.

Restituisce

Una tabella con:

  • Una colonna per ogni colonna in ognuna delle due tabelle, incluse le chiavi corrispondenti. Le colonne del lato destro verranno rinominate automaticamente se sono presenti conflitti di nome.
  • Una riga per ogni corrispondenza tra le tabelle di input. Una corrispondenza è una riga selezionata da una tabella che ha lo stesso valore per tutti i campi on di una riga nell'altra tabella.
  • Gli attributi (chiavi di ricerca) verranno visualizzati una sola volta nella tabella di output.
  • Se kind non è specificato o kind=leftouter, oltre alle corrispondenze interne, è presente una riga per ogni riga a sinistra (e/o destra), anche se non ha corrispondenza. In tal caso, le celle di output senza corrispondenza contengono valori Null.
  • Se kind=inner, è presente una riga nell'output per ogni combinazione di righe corrispondenti da sinistra e destra.

Esempio

let FactTable=datatable(Row:string,Personal:string,Family:string) [
  "1", "Bill",   "Gates",
  "2", "Bill",   "Clinton",
  "3", "Bill",   "Clinton",
  "4", "Steve",  "Ballmer",
  "5", "Tim",    "Cook"
];
let DimTable=datatable(Personal:string,Family:string,Alias:string) [
  "Bill",  "Gates",   "billg",
  "Bill",  "Clinton", "billc",
  "Steve", "Ballmer", "steveb",
  "Tim",   "Cook",    "timc"
];
FactTable
| lookup kind=leftouter DimTable on Personal, Family
Riga Personal Famiglia Alias
1 Bill Attività di controllo fatturag
2 Bill Clinton fattura
3 Bill Clinton fattura
4 Steve Ballmer Steveb
5 Tm Cucinare timc