Freigeben über


partition-Operator

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Der Partitionsoperator partitioniert die Datensätze seiner Eingabetabelle in mehrere Untertabellen gemäß Werten in einer Schlüsselspalte. Der Operator führt eine Unterabfrage für jede Untertabelle aus und erzeugt eine einzelne Ausgabetabelle, die die Vereinigung 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 das gesamte Dataset abfragen. Diese Unterabfragen können Aggregatfunktionen, Fensterfunktionen, top N und andere umfassen.

Der Partitionsoperator unterstützt mehrere Strategien des Unterabfragevorgangs:

  • Systemeigene Verwendung mit einer impliziten Datenquelle mit Tausenden von Schlüsselpartitionswerten.
  • Shuffle – Wird mit einer impliziten Quelle mit Millionen von Schlüsselpartitionswerten verwendet.
  • Legacy – Wird mit einer impliziten oder expliziten Quelle für 64 oder weniger Schlüsselpartitionswerte verwendet.

Syntax

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

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

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Type Erforderlich Beschreibung
T string ✔️ Die Tabellarische Eingabequelle.
Strategie string Der Wert legacy, shuffle, oder 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 bestimmen, wie die Eingabe tabellarische Quelle partitionieren soll.
TransformationSubQuery string ✔️ Ein Tabellarischer Transformationsausdruck. Die Quelle ist implizit die Untertabellen, die durch Partitionieren der Datensätze von T erzeugt werden. Jede Untertabelle ist homogen für den Wert von Spalte.

Der Ausdruck darf nur ein tabellarisches Ergebnis bereitstellen und darf keine anderen Arten von Anweisungen aufweisen, z let . B. Anweisungen.
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 "Spalte" von T verweisen. Verwenden Sie die Syntaxspaltetoscalar(), um auf die Spalte zu verweisen.

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

Unterstützte Hinweise

Hinweisname type 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 Bei Festlegung auf true, wird die Quelle des partition Operators materialisiert. Der Standardwert ist false.
hint.concurrency int Hinterlassenschaft Bestimmt, wie viele Partitionen parallel ausgeführt werden sollen. Der Standardwert ist 16.
hint.spread int Hinterlassenschaft Bestimmt, wie die Partitionen auf Clusterknoten verteilt werden. Der Standardwert ist 1.

Wenn z. B. N-Partitionen vorhanden sind und der Spread-Hinweis auf P festgelegt ist, werden die N-Partitionen von P unterschiedlichen Clusterknoten gleichmäßig parallel/sequenziell verarbeitet, abhängig von der Parallelitätshinweis.

Gibt zurück

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

Strategien

Der Partitionsoperator unterstützt mehrere Strategien des Unterabfragevorgangs: systemeigene, shuffle und legacy.

Hinweis

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

Systemeigene Strategie

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

Die Unterabfrage muss eine tabellarische Transformation sein, die keine tabellarische Quelle angibt. Die Quelle ist implizit und wird entsprechend den Untertabellenpartitionen zugewiesen. Nur bestimmte unterstützte Operatoren können in der Unterabfrage verwendet werden. Es gibt keine Einschränkung für die Anzahl der Partitionen.

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

Shuffle-Strategie

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

Die Unterabfrage muss eine tabellarische Transformation sein, die keine tabellarische Quelle angibt. Die Quelle ist implizit und wird entsprechend den Untertabellenpartitionen zugewiesen. Nur bestimmte unterstützte Operatoren können in der Unterabfrage verwendet werden. Es gibt keine Einschränkung für die Anzahl der Partitionen.

Um diese Strategie zu verwenden, geben Sie hint.strategy=shufflean. Weitere Informationen zur Shuffle-Strategie und -Leistung finden Sie in der Shuffle-Abfrage.

Unterstützte Operatoren für die systemeigenen und shuffle-Strategien

Die folgende Liste der Operatoren kann in Unterabfragen mit den systemeigenen oder shuffle-Strategien verwendet werden:

Hinweis

  • Operatoren, die auf eine andere Tabellenquelle als die Untertabellenpartitionen verweisen, sind nicht mit den native und shuffle Strategien kompatibel. Beispiel: Join, union, externaldata, and evaluate (plugins). Für solche Szenarien greifen Sie auf die Legacystrategie zurück.
  • Der Verzweigungsoperator wird für keinen Strategietyp unterstützt, da die Unterabfrage ein einzelnes tabellarisches Ergebnis zurückgeben muss.

Legacystrategie

Aus historischen Gründen ist die Strategie die legacy Standardstrategie. Es wird jedoch empfohlen, die systemeigenen 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 der Unterstützung für die Aufnahme einer tabellarischen Quelle in die Unterabfrage erforderlich sein. In solchen Fällen kann die Unterabfrage nur auf die Schlüsselspalte "Spalte" aus der Tabellarischen Eingabequelle T verweisen. Verwenden Sie die Syntaxspaltetoscalar(), um auf die Spalte zu verweisen.

Wenn es sich bei der Unterabfrage um eine tabellarische Transformation ohne tabellarische Quelle handelt, ist die Quelle implizit und basiert auf den Untertabellenpartitionen.

Um diese Strategie zu verwenden, geben Oder weglassen Sie hint.strategy=legacy andere Strategieanzeigen.

Hinweis

Wenn die Partitionsspalte " Column" mehr als 64 unterschiedliche Werte enthält, tritt ein Fehler auf.

Beispiele

Auffinden der obersten Werte

In einigen Fällen ist es leistungsfähiger und einfacher, eine Abfrage mit dem partition Operator zu schreiben, als den top-nested Operator zu verwenden. Die folgende Abfrage führt eine Berechnete summarize Unterabfrage aus und top beginnt mit State W: "WYOMING", "WASHINGTON", "WEST VIRGINIA" und "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
Winter Storm WYOMING 72 0
Heavy Snow 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
Winter Storm WISCONSIN 310 0
Hagel WISCONSIN 303 1

Systemeigene Strategie

Die folgende Abfrage gibt die obersten 2 EventType Werte TotalInjuries für jede State zurück, die 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
Excessive Heat 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 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 == 1die Abfrage alle Zeilen zurückgibt, aus StormEvents denen dies der Wert ist InjuriesIndirect == 1.
  • Wenn x == 2die Abfrage alle Zeilen zurückgibt, aus StormEvents denen dies der Wert ist 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

Im folgenden Beispiel wird gezeigt, wie Sie den Operator als Operator verwenden, um jeder Datenpartition einen "Namen" zuzuweisen und diesen Namen dann innerhalb 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))
)