GitHubContribute in GitHub: Online bearbeiten

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, leftouter und inner, wobei leftouter die Standardeinstellung ist.
  • Im Hinblick auf die Leistung geht das System standardmäßig davon aus, dass die Tabelle $left die größere Tabelle (Faktentabelle) und die Tabelle $right die kleinere Tabelle (Dimensionstabelle) ist. Dies ist genau das Gegenteil von der Annahme, die vom Operator join verwendet wird.
  • Der Operator lookup sendet die Tabelle $right automatisch an die Tabelle $left (verhält sich im Wesentlichen so, als wäre hint.broadcast angegeben). Beachten Sie, dass dadurch die Größe der Tabelle $right begrenzt 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 and ausgewertet. 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 wird leftouter verwendet. 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. Wenn inner verwendet wird, werden solche Zeilen aus der Ausgabe ausgeschlossen. (Andere Jointypen werden vom Operator lookup nicht 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.

  • kind nicht angegeben, kind=leftouter

    Zusä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=inner

    Die 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