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 einner
, conleftouter
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'operatorejoin
. - L'operatore
lookup
trasmette automaticamente la$right
tabella alla$left
tabella (essenzialmente, si comporta come sehint.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
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 okind=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 |
Contenuto correlato
- join broadcast
- leftouter join
- inner join
- operatore join