Freigeben über


partition-Operator

Der Partitionsoperator partitioniert die Datensätze seiner Eingabetabelle in mehrere Untertabellen gemäß den Werten in einer Schlüsselspalte. Der Operator führt eine Unterabfrage für jede Untertabelle aus und erzeugt eine einzelne Ausgabetabelle, die die Union der Ergebnisse aller Unterabfragen darstellt.

Dieser Operator ist nützlich, wenn Sie eine Unterabfrage nur für eine Teilmenge von Zeilen ausführen müssen, die zum gleichen Partitionsschlüssel gehören, und nicht für das gesamte Dataset. Diese Unterabfragen können Aggregatfunktionen, Fensterfunktionen, top N und andere enthalten.

Der Partitionsoperator unterstützt mehrere Strategien des Unterabfragevorgangs:

  • nativ : Verwenden Sie mit einer impliziten Datenquelle mit Tausenden von Schlüsselpartitionswerten.
  • Shuffle : Verwenden Sie mit einer impliziten Quelle mit Millionen von Schlüsselpartitionswerten.
  • Legacy : Verwenden Sie mit einer impliziten oder expliziten Quelle für 64 oder weniger Schlüsselpartitionswerte.

Syntax

T|partition [ hint.strategy=Strategie ] [ Hinweise ] bySpaltentransformationSubQuery()

T|partition [ hint.strategy=legacy ] [ Hinweise ] byColumn{SubQueryWithSource}

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Typ Erforderlich Beschreibung
T string ✔️ Die tabellarische Eingabequelle.
Strategie string Der Wert legacy, shuffleoder native. Dieser Hinweis definiert die Ausführungsstrategie des Partitionsoperators.

Wenn keine Strategie angegeben ist, wird die legacy Strategie verwendet. Weitere Informationen finden Sie unter Strategien.
Spalte string ✔️ Der Name einer Spalte in T , deren Werte die Partitionierung der Eingabetabellenquelle bestimmen.
TransformationSubQuery string ✔️ Ein tabellarischer Transformationsausdruck. Die Quelle ist implizit die Untertabellen, die durch partitionieren der Datensätze von T erzeugt werden. Jede Untertabelle ist für den Wert von Column homogen.

Der Ausdruck darf nur ein tabellarisches Ergebnis bereitstellen und darf keine anderen Typen von Anweisungen wie Anweisungen let aufweisen.
SubQueryWithSource string ✔️ Ein tabellarischer Ausdruck, der eine eigene tabellarische Quelle enthält, z. B. einen Tabellenverweis. Diese Syntax wird nur mit der Legacystrategie unterstützt. Die Unterabfrage kann nur auf die Schlüsselspalte Column aus T verweisen. Verwenden Sie die Syntax toscalar(Column), um auf die Spalte zu verweisen.

Der Ausdruck darf nur ein tabellarisches Ergebnis bereitstellen und darf keine anderen Typen von Anweisungen wie Anweisungen let aufweisen.
Hinweise string Null oder mehr durch Leerzeichen getrennte Parameter in Form von: HintName-Wert=, der das Verhalten des Operators steuert. Sehen Sie sich die unterstützten Hinweise pro Strategietyp an.

Unterstützte Hinweise

Hinweisname Typ Strategie BESCHREIBUNG
hint.shufflekey string Shuffle Der Partitionsschlüssel, der zum Ausführen des Partitionsoperators mit der shuffle Strategie verwendet wird.
hint.materialized bool Hinterlassenschaft Wenn auf truefestgelegt ist, materialisiert die Quelle des partition -Operators. Standardwert: false.
hint.concurrency int Hinterlassenschaft Bestimmt, wie viele Partitionen parallel ausgeführt werden sollen. Standardwert: 16.
hint.spread int Hinterlassenschaft Bestimmt, wie die Partitionen auf Clusterknoten verteilt werden. Standardwert: 1.

Wenn beispielsweise N-Partitionen vorhanden sind und der Spreadhinweis auf P festgelegt ist, werden die N-Partitionen je nach Parallelitätshinweis von verschiedenen Clusterknoten von P gleichmäßig parallel/sequenziell verarbeitet.

Gibt zurück

Der Operator gibt eine Union der Ergebnisse der einzelnen Unterabfragen zurück.

Strategien

Der Partitionsoperator unterstützt mehrere Strategien des Unterabfragevorgangs: native, shuffle und Legacy.

Hinweis

Die Unterscheidung zwischen den native Strategien und shuffle ermöglicht es dem Aufrufer, die Kardinalität und Ausführungsstrategie der Unterabfrage anzugeben. Diese Wahl kann sich darauf auswirken, wie lange die Unterabfrage dauert, bis sie abgeschlossen ist, aber das Endergebnis wird nicht geändert.

Native Strategie

Diese Strategie sollte angewendet werden, wenn die Anzahl der unterschiedlichen Werte des Partitionsschlüssels nicht groß ist, etwa in Tausender.

Die Unterabfrage muss eine tabellarische Transformation sein, die keine tabellarische Quelle angibt. Die Quelle ist implizit und wird entsprechend den Untertabellenpartitionen zugewiesen. In der Unterabfrage können nur bestimmte unterstützte Operatoren verwendet werden. Die Anzahl der Partitionen ist nicht eingeschränkt.

Um diese Strategie zu verwenden, geben Sie an hint.strategy=native.

Shuffle-Strategie

Diese Strategie sollte angewendet werden, wenn die Anzahl der unterschiedlichen Werte des Partitionsschlüssels in Millionenhöhe groß ist.

Die Unterabfrage muss eine tabellarische Transformation sein, die keine tabellarische Quelle angibt. Die Quelle ist implizit und wird entsprechend den Untertabellenpartitionen zugewiesen. In der Unterabfrage können nur bestimmte unterstützte Operatoren verwendet werden. Die Anzahl der Partitionen ist nicht eingeschränkt.

Um diese Strategie zu verwenden, geben Sie an hint.strategy=shuffle. Weitere Informationen zur Shuffle-Strategie und -Leistung finden Sie unter Shuffle-Abfrage.

Unterstützte Operatoren für native Und Shuffle-Strategien

Die folgende Liste von Operatoren kann in Unterabfragen mit den nativen Oder Shuffle-Strategien verwendet werden:

Hinweis

  • Operatoren, die auf eine andere Tabellenquelle als die untergeordneten Partitionen verweisen, sind nicht mit den native Strategien und shuffle kompatibel. Beispiel: join, union, externaldata und evaluate (Plug-Ins). Greifen Sie für solche Szenarien auf die Legacystrategie zurück.
  • Der Fork-Operator wird für keinen Strategietyp unterstützt, da die Unterabfrage ein einzelnes tabellarisches Ergebnis zurückgeben muss.

Legacystrategie

Aus historischen Gründen ist die legacy Strategie die Standardstrategie. Es wird jedoch empfohlen, die nativen Oder Shuffle-Strategien zu bevorzugen, da der legacy Ansatz auf 64 Partitionen beschränkt ist und weniger effizient ist.

In einigen Szenarien kann die legacy Strategie aufgrund ihrer Unterstützung für das Einschließen einer tabellarischen Quelle in die Unterabfrage erforderlich sein. In solchen Fällen kann die Unterabfrage nur auf die Schlüsselspalte Column aus der tabellarischen Eingabequelle T verweisen. Verwenden Sie die Syntax toscalar(Column), um auf die Spalte zu verweisen.

Wenn die Unterabfrage eine tabellarische Transformation ohne tabellarische Quelle ist, ist die Quelle implizit und basiert auf den untergeordneten Partitionen.

Um diese Strategie zu verwenden, geben Sie andere Strategiehinweise an hint.strategy=legacy oder lassen sie aus.

Hinweis

Ein Fehler tritt auf, wenn die Partitionsspalte Column mehr als 64 verschiedene Werte enthält.

Beispiele

Suchen nach den obersten Werten

In einigen Fällen ist es performanter und einfacher, eine Abfrage mit dem partition Operator zu schreiben als mit dem top-nested Operator. Die folgende Abfrage führt eine Unterabfrage aus, die summarize und für jede State berechnet, die mit Wbeginnt: "WYOMING", "WASHINGTON", "WEST VIRGINIA" und top "WISCONSIN".

StormEvents
| where State startswith 'W'
| partition hint.strategy=native by State 
    (
    summarize Events=count(), Injuries=sum(InjuriesDirect) by EventType, State
    | top 3 by Events 
    ) 

Ausgabe

EventType State Ereignisse Verletzungen
Hagel WYOMING 108 0
Starker Wind WYOMING 81 5
Wintersturm WYOMING 72 0
Starker Schnee WASHINGTON 82 0
Starker Wind WASHINGTON 58 13
Wildfire WASHINGTON 29 0
Sturm WEST VIRGINIA 180 1
Hagel WEST VIRGINIA 103 0
Winterwetter WEST VIRGINIA 88 0
Sturm WISCONSIN 416 1
Wintersturm WISCONSIN 310 0
Hagel WISCONSIN 303 1

Native Strategie

Die folgende Abfrage gibt die obersten 2 EventType Werte für jeden State wert zurückTotalInjuries, der mit "W" beginnt:

StormEvents
| where State startswith 'W'
| partition hint.strategy = native by State
    (
    summarize TotalInjueries = sum(InjuriesDirect) by EventType
    | top 2 by TotalInjueries
    )

Ausgabe

EventType TotalInjueries
Tornado 4
Hagel 1
Sturm 1
Übermäßige Hitze 0
Starker Wind 13
Lightning 5
Starker Wind 5
Lawine 3

Shuffle-Strategie

Die folgende Abfrage gibt die obersten 3 DamagedProperty Werte foreach EpisodeId und die Spalten EpisodeId und zurück State.

StormEvents
| partition hint.strategy=shuffle by EpisodeId
    (
    top 3 by DamageProperty
    | project EpisodeId, State, DamageProperty
    )
| count

Ausgabe

Anzahl
22345

Legacystrategie mit expliziter Quelle

Die folgende Abfrage führt zwei Unterabfragen aus:

  • Wenn x == 1gibt die Abfrage alle Zeilen von zurück StormEvents , die enthalten InjuriesIndirect == 1.
  • Wenn x == 2gibt die Abfrage alle Zeilen von zurück StormEvents , die enthalten InjuriesIndirect == 2.

Das Endergebnis ist die Vereinigung dieser beiden Unterabfragen.

range x from 1 to 2 step 1
| partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}
| count 

Ausgabe

Anzahl
113

Partitionsreferenz

Das folgende Beispiel zeigt, wie Sie den as-Operator verwenden, um jeder Datenpartition einen "Namen" zu geben und diesen Namen dann in der Unterabfrage wiederzuverwenden. Dieser Ansatz ist nur für die legacy Strategie relevant.

T
| partition by Dim
(
    as Partition
    | extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)