Suchoperator
Erweitert die Spalten einer Fakttabelle mit Werten, die in einer Dimensionstabelle gesucht werden.
FactTable | lookup kind=leftouter (DimensionTable) on CommonColumn, $left.Col1 == $right.Col2
Das Ergebnis ist eine Tabelle, die FactTable ($left) mit Daten aus DimensionTable (referenziert durch $right) erweitert, indem eine Suche nach jedem Paar (CommonColumn,Col) aus der ersten Tabelle mit jedem Paar (CommonColumn1,Col2) in der zweiten Tabelle ausgeführt wird. Informationen zu den Unterschieden zwischen Fakt-und Dimensionstabellen finden Sie unter Fakt-und Dimensionstabellen.
Der Operator lookup führt eine Operation ähnlich dem Joinoperator mit den folgenden Unterschieden aus:
- Das Ergebnis wiederholt keine Spalten aus der Tabelle
$right, die die Basis für die Joinoperation sind. - Es werden nur zwei Arten von Suchen unterstützt,
leftouterundinner, wobeileftouterdie Standardeinstellung ist. - Im Hinblick auf die Leistung geht das System standardmäßig davon aus, dass die Tabelle
$leftdie größere Tabelle (Faktentabelle) und die Tabelle$rightdie kleinere Tabelle (Dimensionstabelle) ist. Dies ist genau das Gegenteil von der Annahme, die vom Operatorjoinverwendet wird. - Der Operator
lookupsendet die Tabelle$rightautomatisch an die Tabelle$left(verhält sich im Wesentlichen so, als wärehint.broadcastangegeben). Beachten Sie, dass dadurch die Größe der Tabelle$rightbegrenzt wird.
Anmerkung:
Wenn die rechte Seite der Suche 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 Byte zu schätzen:
rightSide
| summarize sum(estimate_data_size(*))
Syntax
LeftTable | lookup [kind = (leftouter|inner)] ( RightTable ) on Attribute
Argumente
LeftTable: Der Tabellen-oder Tabellenausdruck, der als Basis für die Suche dient. Als
$leftbezeichnet.RightTable: Der Tabellen-oder Tabellenausdruck, der zum "Füllen" neuer Spalten in der Fakttabelle verwendet wird. Als
$rightbezeichnet.Attribute: Eine durch Kommas begrenzte Liste mit mindestens einer Regel, die beschreibt, wie Zeilen aus LeftTable mit Zeilen aus RightTableabgeglichen werden. Mehrere Regeln werden mit dem logischen Operator
andausgewertet. Eine Regel kann eine der folgenden sein:
| Regelart | Syntax | Prädikat |
|---|---|---|
| Gleichheit nach Namen | ColumnName | where LeftTable.ColumnName == RightTable.ColumnName |
| Gleichheit nach Wert | $left.LeftColumn == $right.RightColumn |
where $left.LeftColumn == $right.*RightColumn |
Anmerkung
Bei 'Gleichheit nach Wert' müssen die Spaltennamen mit der zutreffenden Eignertabelle qualifiziert werden, die durch $left -und $right -Notationen angegeben wird.
kind: Eine optionale Anweisung zum Behandeln von Zeilen in LeftTable ohne Übereinstimmung in RightTable. Standardmäßig wirdleftouterverwendet. Dies bedeutet, dass alle diese Zeilen in der Ausgabe mit Nullwerten angezeigt werden, die für die fehlenden Werte von RightTable -Spalten verwendet werden, die vom Operator hinzugefügt werden. Wenninnerverwendet wird, werden solche Zeilen aus der Ausgabe ausgeschlossen. (Andere Jointypen werden vom Operatorlookupnicht unterstützt.)
Retouren
Eine Tabelle mit:
Eine Spalte für jede Spalte in jeder der beiden Tabellen, einschließlich der übereinstimmenden Schlüssel Die Spalten auf der rechten Seite werden automatisch umbenannt, wenn Namenskonflikte auftreten.
Eine Zeile für jede Übereinstimmung zwischen den Eingabetabellen Eine Übereinstimmung ist eine aus einer Tabelle ausgewählte Zeile, die denselben Wert für alle
on-Felder hat wie eine Zeile in der anderen Tabelle.Die Attribute (Suchschlüssel) werden nur einmal in der Ausgabetabelle angezeigt.
kindnicht angegeben,kind=leftouterZusätzlich zu den inneren Übereinstimmungen gibt es eine Zeile für jede Zeile links (und/oder rechts), auch wenn es keine Übereinstimmung gibt. In diesem Fall enthalten die Ausgabezellen ohne Entsprechung Nullwerte.
kind=innerDie Ausgabe enthält eine Zeile für jede Kombination von übereinstimmenden Zeilen von links und rechts.
Beispiel
events_all
| project
event_uuid,
data_source_id,
original_time
| where original_time > ago(24h) and isnotempty(data_source_id)
| lookup datasources on $left.data_source_id == $right.data_source_id
| summarize EventCount=count_distinct(event_uuid) by DataSourceName=data_source_name
| order by EventCount desc
| take 10
Die Ergebnisse
| datasourceName | EventCount |
|---|---|
| Cisco ACE Firewall@ test.abc.acd | 112346 |
| test-UseCase0lookupDataSource | 9123 |
| MicroStWindows@Test3 | 123 |