operator partycji
Dotyczy: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Operator partycji dzieli rekordy tabeli wejściowej na wiele tabel podrzędnych zgodnie z wartościami w kolumnie klucza. Operator uruchamia podzapytywanie w każdej podtabliwie i tworzy pojedynczą tabelę wyjściową, która jest unionem wyników wszystkich podzapytania.
Ten operator jest przydatny, gdy trzeba wykonać podzapytywanie tylko w podzestawie wierszy należących do tego samego klucza partycji, a nie wykonywania zapytań względem całego zestawu danych. Te podzapytania mogą obejmować funkcje agregujące, funkcje okien, pierwsze N i inne.
Operator partycji obsługuje kilka strategii operacji podzapytania:
- Natywny — jest używany z niejawnym źródłem danych z tysiącami wartości partycji klucza.
- Shuffle — użyj z niejawnym źródłem z milionami wartości partycji klucza.
- Starsza wersja — użyj z niejawnym lub jawnym źródłem dla wartości partycji klucza 64 lub mniej.
Składnia
T partition
|
[ hint.strategy=
Strategia ] [ Wskazówki ] by
Przekształcenia kolumnYPodzapytywanie (
)
T |
partition
[ ] [ hint.strategy=legacy
Wskazówki ] by
SubQueryWithSource kolumny {
}
Dowiedz się więcej na temat konwencji składni.
Parametry
Nazwisko | Type | Wymagania | opis |
---|---|---|---|
T | string |
✔️ | Źródło tabelaryczne danych wejściowych. |
Strategia | string |
Wartość legacy , shuffle lub native . Ta wskazówka definiuje strategię wykonywania operatora partycji.Jeśli żadna strategia nie zostanie określona, zostanie użyta legacy strategia. Aby uzyskać więcej informacji, zobacz Strategie. |
|
Kolumna | string |
✔️ | Nazwa kolumny w języku T , której wartości określają sposób partycjonowania wejściowego źródła tabelarycznego. |
TransformationSubQuery | string |
✔️ | Wyrażenie przekształcenia tabelarycznego. Źródło jest niejawnie tabelami podrzędnymi generowanymi przez partycjonowanie rekordów języka T. Każda podtabela jest homogeniczna dla wartości Kolumna. Wyrażenie musi zawierać tylko jeden wynik tabelaryczny i nie powinien mieć innych typów instrukcji, takich jak let instrukcje. |
SubQueryWithSource | string |
✔️ | Wyrażenie tabelaryczne, które zawiera własne źródło tabelaryczne, takie jak odwołanie do tabeli. Ta składnia jest obsługiwana tylko w przypadku starszej strategii. Podzapytywanie może odwoływać się tylko do kolumny klucza Kolumna z języka T. Aby odwołać się do kolumny, użyj składni toscalar( Kolumna) .Wyrażenie musi zawierać tylko jeden wynik tabelaryczny i nie powinien mieć innych typów instrukcji, takich jak let instrukcje. |
Wskazówki | string |
Zero lub więcej parametrów rozdzielonych spacjami w postaci: HintName = Wartość, która kontroluje zachowanie operatora. Zobacz obsługiwane wskazówki dla typu strategii. |
Obsługiwane wskazówki
Nazwa wskazówki | Typ | Strategia | opis |
---|---|---|---|
hint.shufflekey |
string |
tasować | Klucz partycji używany do uruchamiania operatora partycji ze strategią shuffle . |
hint.materialized |
bool |
spuścizna | Jeśli ustawiono wartość true , zmaterializuje źródło partition operatora. Domyślna wartość to false . |
hint.concurrency |
int |
spuścizna | Określa liczbę partycji, które mają być uruchamiane równolegle. Domyślna wartość to 16 . |
hint.spread |
int |
spuścizna | Określa sposób dystrybucji partycji między węzłami klastra. Domyślna wartość to 1 .Jeśli na przykład istnieją N partycji, a wskazówka spreadu jest ustawiona na P, partycje N będą przetwarzane przez różne węzły klastra P równo równolegle/sekwencyjnie w zależności od wskazówki współbieżności. |
Zwraca
Operator zwraca związek wyników poszczególnych podzapytania.
Strategie
Operator partycji obsługuje kilka strategii operacji podzapytania: natywne, shuffle i starsze.
Uwaga
Rozróżnienie między strategiami native
i shuffle
umożliwia obiektowi wywołującym wskazanie kardynalności i strategii wykonywania podzapytania. Ten wybór może mieć wpływ na czas ukończenia podzapytania, ale nie zmienia wyniku końcowego.
Strategia natywna
Ta strategia powinna być stosowana, gdy liczba odrębnych wartości klucza partycji nie jest duża, w przybliżeniu w tysiącach.
Podzapytywanie musi być przekształceniem tabelarycznym, które nie określa źródła tabelarycznego. Źródło jest niejawne i jest przypisywane zgodnie z partycjami w tabeli podrzędnej. W podzapytaniu można używać tylko niektórych obsługiwanych operatorów . Nie ma żadnych ograniczeń dotyczących liczby partycji.
Aby użyć tej strategii, określ wartość hint.strategy=native
.
Strategia mieszania
Ta strategia powinna być stosowana, gdy liczba odrębnych wartości klucza partycji jest duża w milionach.
Podzapytywanie musi być przekształceniem tabelarycznym, które nie określa źródła tabelarycznego. Źródło jest niejawne i jest przypisywane zgodnie z partycjami w tabeli podrzędnej. W podzapytaniu można używać tylko niektórych obsługiwanych operatorów . Nie ma żadnych ograniczeń dotyczących liczby partycji.
Aby użyć tej strategii, określ wartość hint.strategy=shuffle
. Aby uzyskać więcej informacji na temat strategii i wydajności mieszania, zobacz zapytanie mieszania.
Obsługiwane operatory dla strategii natywnych i mieszania
Poniższa lista operatorów może być używana w podzapytaniach ze strategiami natywnymi lub shuffle:
- count
- odmienny
- rozszerzyć
- seria make-series
- mv-apply
- mv-expand
- Parse
- parse-where
- projekt
- odchodzi od projektu
- utrzymanie projektu
- zmiana nazwy projektu
- zmiana kolejności projektu
- zmniejszyć
- próbka
- sample-distinct
- skanować
- search
- Serializacji
- sort
- podsumować
- brać
- Do góry
- top-hitters
- zagnieżdżone od góry
- gdzie
Uwaga
- Operatory odwołujące się do źródła tabeli innego niż partycje podrzędne nie są zgodne z strategiami
native
i .shuffle
Na przykład sprzężenia, unii, danych externaldata i oceny (wtyczki). W takich scenariuszach należy uciekać się do starszej strategii. - Operator rozwidlenia nie jest obsługiwany dla żadnego typu strategii, ponieważ podzapytywanie musi zwrócić pojedynczy wynik tabelaryczny.
Starsza strategia
Ze względów legacy
historycznych strategia jest strategią domyślną. Zalecamy jednak faworyzowanie strategii natywnych lub mieszanych , ponieważ legacy
podejście jest ograniczone do 64 partycji i jest mniej wydajne.
W niektórych scenariuszach legacy
strategia może być konieczna ze względu na obsługę dołączania źródła tabelarycznego do podzapytania. W takich przypadkach podzapytywanie może odwoływać się tylko do kolumny klucza, Kolumna, ze źródła tabelarycznego danych wejściowych, T. Aby odwołać się do kolumny, użyj składni toscalar(
Kolumna)
.
Jeśli podzapytywanie jest przekształceniem tabelarycznym bez źródła tabelarycznego, źródło jest niejawne i opiera się na partycjach podrzędnych.
Aby użyć tej strategii, określ hint.strategy=legacy
lub pomiń wszelkie inne wskazania strategii.
Uwaga
Jeśli kolumna partycji Column zawiera więcej niż 64 odrębne wartości, wystąpi błąd.
Przykłady
Znajdowanie najważniejszych wartości
W niektórych przypadkach bardziej wydajne i łatwiejsze jest pisanie zapytania przy użyciu partition
operatora niż użycie top-nested
operatora. Następujące zapytanie uruchamia podzapytywanie i summarize
top
dla każdego State
rozpoczynającego się od W
: "WYOMING", "WASHINGTON", "WEST VIRGINIA" i "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
)
Wyjście
EventType | Stan | Zdarzenia | Obrażeń |
---|---|---|---|
Grad | WYOMING | 108 | 0 |
Silny wiatr | WYOMING | 81 | 5 |
Śnieżyca | WYOMING | 72 | 0 |
Duże opady śniegu | WASZYNGTON | 82 | 0 |
Silny wiatr | WASZYNGTON | 58 | 13 |
Pożary lasów | WASZYNGTON | 29 | 0 |
Wiatr i burza | WIRGINIA ZACHODNIA | 180 | 1 |
Grad | WIRGINIA ZACHODNIA | 103 | 0 |
Zimowa pogoda | WIRGINIA ZACHODNIA | 88 | 0 |
Wiatr i burza | WISCONSIN | 416 | 1 |
Śnieżyca | WISCONSIN | 310 | 0 |
Grad | WISCONSIN | 303 | 1 |
Strategia natywna
Następujące zapytanie zwraca 2 EventType
pierwsze wartości TotalInjuries
dla każdego State
, co zaczyna się od "W":
StormEvents
| where State startswith 'W'
| partition hint.strategy = native by State
(
summarize TotalInjueries = sum(InjuriesDirect) by EventType
| top 2 by TotalInjueries
)
Wyjście
EventType | TotalInjueries |
---|---|
Tornado | 100 |
Grad | 1 |
Wiatr i burza | 1 |
Nadmierne ciepło | 0 |
Silny wiatr | 13 |
Lightning | 5 |
Silny wiatr | 5 |
Lawina | 3 |
Strategia mieszania
Poniższe zapytanie zwraca 3 DamagedProperty
pierwsze wartości foreach EpisodeId
oraz kolumny EpisodeId
i State
.
StormEvents
| partition hint.strategy=shuffle by EpisodeId
(
top 3 by DamageProperty
| project EpisodeId, State, DamageProperty
)
| count
Wyjście
Count |
---|
22345 |
Starsza strategia z jawnym źródłem
Następujące zapytanie uruchamia dwa podzapytania:
- Gdy
x == 1
zapytanie zwraca wszystkie wiersze zStormEvents
tych elementów o wartościInjuriesIndirect == 1
. - Gdy
x == 2
zapytanie zwraca wszystkie wiersze zStormEvents
tych elementów o wartościInjuriesIndirect == 2
.
Ostatnim wynikiem jest związek tych dwóch podzapytania.
range x from 1 to 2 step 1
| partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}
| count
Wyjście
Count |
---|
113 |
Dokumentacja partycji
W poniższym przykładzie pokazano, jak użyć operatora as, aby nadać każdej partycji danych nazwę "name", a następnie ponownie użyć tej nazwy w podzapytaniu. Takie podejście jest istotne tylko dla legacy
strategii.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)