lookup-Operator
Erweitert die Spalten einer Faktentabelle mit Werten, die in einer Dimensionstabelle nachgeschlagen werden.
FactTable | lookup kind=leftouter (DimensionTable) on CommonColumn, $left.Col1 == $right.Col2
Hier ist das Ergebnis eine Tabelle, die (FactTable
$left
) mit Daten von DimensionTable
erweitert (auf die verwiesen wird$right
), indem eine Suche jedes Paars (CommonColumn
,Col
) aus der vorherigen Tabelle mit jedem Paar (CommonColumn1
,Col2
) in der letzteren Tabelle durchgeführt wird.
Die Unterschiede zwischen Fakten- und Dimensionstabellen finden Sie unter Fakten- und Dimensionstabellen.
Der lookup
Operator führt einen Vorgang aus, der dem Joinoperator ähnelt, mit den folgenden Unterschieden:
- Das Ergebnis wiederholt keine Spalten aus der Tabelle, die
$right
die Grundlage für den Joinvorgang bilden. - Es werden nur zwei Arten von Nachschlagevorgängen unterstützt,
leftouter
undinner
, wobeileftouter
die Standardeinstellung ist. - In Bezug auf die Leistung geht das System standardmäßig davon aus, dass die
$left
Tabelle die größere Tabelle (Faktentabelle) und die$right
Tabelle die kleinere Tabelle (Dimensionen) ist. Dies ist das genaue Gegenteil zu der Annahme, die vomjoin
-Operator verwendet wird. - Der
lookup
Operator überträgt die$right
Tabelle automatisch in die$left
Tabelle (verhält sich im Wesentlichen so, als obhint.broadcast
angegeben wurde). Dadurch wird die Größe der$right
Tabelle begrenzt.
Hinweis
Wenn die rechte Seite des Nachschlagevorgangs größer als mehrere zehn MB ist, schlägt die Abfrage fehl.
Sie können die folgende Abfrage ausführen, um die Größe der rechten Seite in Bytes zu schätzen:
rightSide
| summarize sum(estimate_data_size(*))
Syntax
LeftTable|
lookup
[kind
=
(leftouter
|inner
)] (
RightTable-Bedingungen)
on
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Typ | Erforderlich | BESCHREIBUNG |
---|---|---|---|
LeftTable | string |
✔️ | Die Tabelle oder der tabellarische Ausdruck, der die Grundlage für die Suche ist. Wird als $left bezeichnet. |
RightTable | string |
✔️ | Die Tabelle oder der tabellarische Ausdruck, der zum "Auffüllen" neuer Spalten in der Faktentabelle verwendet wird. Wird als $right bezeichnet. |
Attribute | string |
✔️ | Eine durch Trennzeichen getrennte Liste einer oder mehrerer Regeln, die beschreiben, wie Zeilen aus LeftTable mit Zeilen aus RightTable abgeglichen werden. Mehrere Regeln werden mithilfe des logischen Operators and ausgewertet. Siehe Regeln. |
kind |
string |
Bestimmt, wie Zeilen in LeftTable behandelt werden, die keine Übereinstimmung in RightTable aufweisen. Standardmäßig wird verwendet, was bedeutet, dass alle diese Zeilen in der Ausgabe mit NULL-Werten angezeigt werden, leftouter die für die fehlenden Werte von RightTable-Spalten verwendet werden, die vom Operator hinzugefügt wurden. Wenn inner verwendet wird, werden solche Zeilen in der Ausgabe weggelassen. Andere Join-Arten werden vom lookup Operator nicht unterstützt. |
Regeln
Regelart | Syntax | Predicate |
---|---|---|
Gleichheit nach Name | ColumnName | where LeftTable.ColumnName== RightTable.ColumnName |
Gleichheit nach Wert | $left. LeftColumn== $right. RightColumn |
where $left. LeftColumn== $right. *RightColumn |
Hinweis
Im Fall von "Gleichheit nach Wert" müssen die Spaltennamen mit der entsprechenden Besitzertabelle qualifiziert werden, die durch $left
und $right
Notationen gekennzeichnet ist.
Gibt zurück
Eine Tabelle mit:
- Eine Spalte für jede Spalte in jeder der beiden Tabellen, einschließlich der übereinstimmenden Schlüssel. Die Spalten der rechten Seite werden automatisch umbenannt, wenn Namenskonflikte auftreten.
- Einer Zeile für jede Übereinstimmung zwischen den Eingabetabellen. Eine Übereinstimmung ist eine ausgewählte Zeile in einer Tabelle, die in allen
on
-Feldern denselben Wert wie eine Zeile in der anderen Tabelle aufweist. - Die Attribute (Nachschlageschlüssel) werden nur einmal in der Ausgabetabelle angezeigt.
- Wenn
kind
nicht angegebenkind=leftouter
oder ist, gibt es zusätzlich zu den inneren Übereinstimmungen eine Zeile für jede Zeile links (und/oder rechts), auch wenn sie keine Übereinstimmung aufweist. In diesem Fall enthalten die Ausgabezellen ohne Übereinstimmung NULL-Werte. - Gibt
kind=inner
an, gibt es eine Zeile in der Ausgabe für jede Kombination von übereinstimmenden Zeilen von links und rechts.
Beispiele
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
Zeile | Persönlich | Familie | Alias |
---|---|---|---|
1 | Bill | Gates | billg |
2 | Bill | Clinton | Billc |
3 | Bill | Clinton | Billc |
4 | Steve | Ballmer | Steveb |
5 | Tim | Kochen | timc |
Verwandte Inhalte
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für