Freigeben über


partition operator

Applies to: ✅Microsoft FabricAzure 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.

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:

Note

  • Operatoren, die auf eine andere Tabellenquelle als die Untertabellenpartitionen verweisen, sind nicht mit den native und shuffle Strategien 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 by operator. Sie wird nur unterstützt, wenn sowohl die Parameter from als auch die to Parameter 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 StormEvents table in the Samples database.

The examples in this article use publicly available tables, such as the Weather table 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, 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 

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))
)