Condividi tramite


Operatore lookup

Si applica a: ✅Microsoft Fabric

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

Ad esempio, la query seguente restituisce una tabella che estende il FactTable ($left) con i dati del DimensionTable ($right) eseguendo una ricerca. La ricerca corrisponde a ogni coppia (CommonColumn, Col1) da FactTable con ogni coppia (CommonColumn, Col2) nel DimensionTable. Per le differenze tra tabelle dei fatti e delle dimensioni, vedere tabelle dei fatti e delle dimensioni.

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

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

  • Il risultato non ripete le colonne della $right tabella che costituiscono 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 che 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 [ ()] AttributiRightTable

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Digita Obbligatorio Descrizione
LeftTable string ✔️ Tabella o espressione tabulare che rappresenta la base per la ricerca. Indicata come $left.
RightTable string ✔️ Tabella o espressione tabulare utilizzata per "popolare" nuove colonne nella tabella dei fatti. Indicata come $right.
Attributi string ✔️ Elenco delimitato da virgole di una o più regole che descrivono il modo in cui le righe di LeftTable corrispondono alle righe di RightTable. Vengono valutate più regole mediante l'operatore logico and. Vedere Regole.
kind string Determina come trattare le righe in LeftTable che non hanno corrispondenze in RightTable. Per impostazione predefinita, viene usato leftouter, ovvero tutte le righe vengono visualizzate nell'output con valori Null usati per i valori mancanti di RightTable colonne 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 where LeftTable.ColumnName==RightTable.ColumnName
Uguaglianza in base al valore $left. LeftColumn==$right.RightColumn where $left. LeftColumn==$right.*RightColumn

Nota

In caso di "uguaglianza per valore", i nomi delle colonne devono essere qualificati con la tabella proprietaria applicabile indicata dalle $left notazioni e $right .

Valori restituiti

Una tabella con:

  • Una colonna per ogni colonna in ognuna delle due tabelle, incluse le chiavi corrispondenti. Le colonne del lato destro vengono rinominate automaticamente in caso di conflitti di nomi.
  • 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.
  • I attributi (chiavi di ricerca) vengono 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 corrispondenze. In tal caso, le celle di output senza corrispondenza contengono valori Null.
  • Se kind=inner, nell'output è presente una riga per ogni combinazione di righe corrispondenti da sinistra e destra.

Esempi

Nell'esempio seguente viene illustrato come eseguire un left outer join tra il FactTable e DimTable, in base ai valori corrispondenti nelle colonne Personal e Family.

let FactTable=datatable(Row:string,Personal:string,Family:string) [
  "1", "Rowan",   "Murphy",
  "2", "Ellis",   "Turner",
  "3", "Ellis",   "Turner",
  "4", "Maya",  "Robinson",
  "5", "Quinn",    "Campbell"
];
let DimTable=datatable(Personal:string,Family:string,Alias:string) [
  "Rowan",  "Murphy",   "rowanm",
  "Ellis",  "Turner", "ellist",
  "Maya", "Robinson", "mayar",
  "Quinn",   "Campbell",    "quinnc"
];
FactTable
| lookup kind=leftouter DimTable on Personal, Family

output

Riga Personal Famiglia Alias
1 Sorba Murphy rowanm
2 Ellis Tornitore ellist
3 Ellis Tornitore ellist
4 Maya Robinson mayar
5 Quinn Campbell quinnc