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 ] by
SpaltentransformationSubQuery(
)
T|
partition
[ hint.strategy=legacy
] [ Hinweise ] by
Column{
SubQueryWithSource}
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Typ | 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 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 true festgelegt 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:
- count
- distinct
- extend
- make-series
- mv-apply
- mv-expand
- parse
- parse-where
- project
- project-away
- project-keep
- project-rename
- project-reorder
- reduce
- Beispiel
- sample-distinct
- scan
- search
- serialize
- sort
- summarize
- take
- top
- Top-Hitter
- top-nested
- where
Hinweis
- Operatoren, die auf eine andere Tabellenquelle als die untergeordneten Partitionen verweisen, sind nicht mit den
native
Strategien undshuffle
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 W
beginnt: "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 == 1
gibt die Abfrage alle Zeilen von zurückStormEvents
, die enthaltenInjuriesIndirect == 1
. - Wenn
x == 2
gibt die Abfrage alle Zeilen von zurückStormEvents
, die enthaltenInjuriesIndirect == 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))
)
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