Udostępnij za pośrednictwem


operator partycji

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, shufflelub 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:

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 == 1zapytanie zwraca wszystkie wiersze z StormEvents tych elementów o wartości InjuriesIndirect == 1.
  • Gdy x == 2zapytanie zwraca wszystkie wiersze z StormEvents tych elementów o wartości InjuriesIndirect == 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))
)