partition-Operator
Gilt für: ✅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.
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=native
an.
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=shuffle
an. 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:
- 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-hitters
- top-nested
- where
Hinweis
- Operatoren, die auf eine andere Tabellenquelle als die Untertabellenpartitionen verweisen, sind nicht mit den
native
undshuffle
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 == 1
die Abfrage alle Zeilen zurückgibt, ausStormEvents
denen dies der Wert istInjuriesIndirect == 1
. - Wenn
x == 2
die Abfrage alle Zeilen zurückgibt, ausStormEvents
denen 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
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))
)