Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Applies to: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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.
Der Partitionsoperator 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 keine Abfrage des gesamten Datasets. These subqueries could include aggregate functions, window functions, top N and others.
Der Partitionsoperator unterstützt mehrere Strategien des Unterabfragevorgangs:
- Native - use with an implicit data source with thousands of key partition values.
- Shuffle - use with an implicit source with millions of key partition values.
- Legacy - use with an implicit or explicit source for 64 or less key partition values.
Syntax
T|partition [ hint.strategy=Strategy ] [ Hints ] byColumn(TransformationSubQuery)
T|partition [ hint.strategy=legacy ] [ Hints ] byColumn{SubQueryWithSource}
Learn more about syntax conventions.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| T | string |
✔️ | Die Tabellarische Eingabequelle. |
| Strategy | 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. For more information, see Strategies. |
|
| Column | string |
✔️ | The name of a column in T whose values determine how to partition the input tabular source. |
| TransformationSubQuery | string |
✔️ | Ein Tabellarischer Transformationsausdruck. The source is implicitly the subtables produced by partitioning the records of T. Each subtable is homogenous on the value of Column.
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. This syntax is only supported with the legacy strategy. The subquery can only reference the key column, Column, from T. To reference the column, use the syntax toscalar(Column).
Der Ausdruck darf nur ein tabellarisches Ergebnis bereitstellen und darf keine anderen Arten von Anweisungen aufweisen, z let . B. Anweisungen. |
| Hints | string |
Zero or more space-separated parameters in the form of: HintName=Value that control the behavior of the operator. See the supported hints per strategy type. |
Supported hints
| Hint name | Type | Strategy | Description |
|---|---|---|---|
hint.shufflekey |
string |
shuffle | Der Partitionsschlüssel, der zum Ausführen des Partitionsoperators mit der shuffle Strategie verwendet wird. |
hint.materialized |
bool |
legacy | Wenn diese Eigenschaft auf truefestgelegt ist, wird die Quelle des partition-Operators materialisiert. Der Standardwert ist false. |
hint.concurrency |
int |
legacy | Bestimmt, wie viele Partitionen parallel ausgeführt werden sollen. Der Standardwert ist 16. |
hint.spread |
int |
legacy | Bestimmt, wie die Partitionen auf Clusterknoten verteilt werden. Der Standardwert ist 1.
For example, if there are N partitions and the spread hint is set to P, then the N partitions are processed by P different cluster nodes equally, in parallel/sequentially depending on the concurrency hint. |
Returns
Der Operator gibt eine Vereinigung der Ergebnisse der einzelnen Unterabfragen zurück.
Strategies
The partition operator supports several strategies of subquery operation: native, shuffle, and legacy.
Note
Die Unterscheidung zwischen den und native den shuffle 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.
Native strategy
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. Only certain supported operators can be used in the subquery. Es gibt keine Einschränkung für die Anzahl der Partitionen.
Um diese Strategie zu verwenden, geben Sie hint.strategy=nativean.
Shuffle strategy
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. Only certain supported operators can be used in the subquery. Es gibt keine Einschränkung für die Anzahl der Partitionen.
Um diese Strategie zu verwenden, geben Sie hint.strategy=shufflean. For more information about shuffle strategy and performance, see shuffle query.
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:
- count
- distinct
- extend
- make-series (partially supported, see note)
- mv-apply
- mv-expand
- parse
- parse-where
- project
- project-away
- project-keep
- project-rename
- project-reorder
- reduce
- sample
- sample-distinct
- scan
- search
- serialize
- sort
- summarize
- take
- top
- top-hitters
- top-nested
- where
Note
- Operatoren, die auf eine andere Tabellenquelle als die Untertabellenpartitionen verweisen, sind nicht mit den
nativeundshuffleStrategien kompatibel. For example, join, union, externaldata, and evaluate (plugins). For such scenarios, resort to the legacy strategy. - The fork operator isn't supported for any strategy type, as the subquery must return a single tabular result.
- The make-series operator is only partially supported within the
partition byoperator. Sie wird nur unterstützt, wenn sowohl die Parameterfromals auch dietoParameter angegeben werden.
Legacy strategy
Aus historischen Gründen ist die Strategie die legacy Standardstrategie. However, we recommend favoring the native or shuffle strategies, as the legacy approach is limited to 64 partitions and is less efficient.
In einigen Szenarien kann die legacy Strategie aufgrund der Unterstützung für die Aufnahme einer tabellarischen Quelle in die Unterabfrage erforderlich sein. In such cases, the subquery can only reference the key column, Column, from the input tabular source, T. To reference the column, use the syntax toscalar(Column).
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.
Note
An error occurs if the partition column, Column, contains more than 64 distinct values.
Examples
Die Beispiele in diesem Abschnitt zeigen, wie Sie die Syntax verwenden, um Ihnen den Einstieg zu erleichtern.
The examples in this article use publicly available tables in the help cluster, such as the
StormEventstable in the Samples database.
The examples in this article use publicly available tables, such as the
Weathertable in the Weather analytics sample gallery. Möglicherweise müssen Sie den Tabellennamen in der Beispielabfrage so ändern, dass er der Tabelle in Ihrem Arbeitsbereich entspricht.
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 StateW: "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
)
Output
| EventType | State | Events | Injuries |
|---|---|---|---|
| Hail | WYOMING | 108 | 0 |
| High Wind | WYOMING | 81 | 5 |
| Winter Storm | WYOMING | 72 | 0 |
| Heavy Snow | WASHINGTON | 82 | 0 |
| High Wind | WASHINGTON | 58 | 13 |
| Wildfire | WASHINGTON | 29 | 0 |
| Thunderstorm Wind | WEST VIRGINIA | 180 | 1 |
| Hail | WEST VIRGINIA | 103 | 0 |
| Winter Weather | WEST VIRGINIA | 88 | 0 |
| Thunderstorm Wind | WISCONSIN | 416 | 1 |
| Winter Storm | WISCONSIN | 310 | 0 |
| Hail | WISCONSIN | 303 | 1 |
Native strategy
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
)
Output
| EventType | TotalInjueries |
|---|---|
| Tornado | 4 |
| Hail | 1 |
| Thunderstorm Wind | 1 |
| Excessive Heat | 0 |
| High Wind | 13 |
| Lightning | 5 |
| High Wind | 5 |
| Avalanche | 3 |
Shuffle strategy
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
Output
| Count |
|---|
| 22345 |
Legacystrategie mit expliziter Quelle
Die folgende Abfrage führt zwei Unterabfragen aus:
- Wenn
x == 1die Abfrage alle Zeilen zurückgibt, ausStormEventsdenen dies der Wert istInjuriesIndirect == 1. - Wenn
x == 2die Abfrage alle Zeilen zurückgibt, ausStormEventsdenen dies der Wert istInjuriesIndirect == 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
Output
| Count |
|---|
| 113 |
Partition reference
The following example shows how to use the as operator to give a "name" to each data partition and then reuse that name within the subquery. 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))
)