operator partycji

Operator partycji partycjonuje rekordy tabeli wejściowej na wiele podtables zgodnie z wartościami w kolumnie klucza. Operator uruchamia podquery dla każdej podtable i tworzy pojedynczą tabelę danych wyjściowych, która jest związkiem wyników wszystkich podquerii.

Ten operator jest przydatny, gdy musisz wykonać podquery tylko w podzestawie wierszy należących do tego samego klucza partycji, a nie wykonywać zapytań względem całego zestawu danych. Te podquery mogą obejmować funkcje agregujące, funkcje okien, top N i inne.

Operator partycji obsługuje kilka strategii operacji podquery:

  • Natywny — użyj niejawnego źródła danych z tysiącami wartości partycji klucza.
  • Shuffle — użyj niejawnego źródła z milionami wartości partycji klucza.
  • Starsza wersja — użyj niejawnego lub jawnego źródła dla wartości partycji klucza 64 lub mniejszej.

Składnia

T|partition [ Strategia ] [ hint.strategy=Wskazówki ] byPrzekształcenia kolumnYPodquery()

T|partition [ ] [ hint.strategy=legacyWskazówki ] bySubQueryWithSourcekolumny{}

Dowiedz się więcej o konwencjach składniowych.

Parametry

Nazwa Typ Wymagane 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 źródła tabelarycznego danych wejściowych.
TransformationSubQuery string ✔️ Wyrażenie przekształcenia tabelarycznego. Źródło jest niejawnie tabelami podrzędnymi utworzonymi 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 zawierać innych typów instrukcji, takich jak let instrukcje.
SubQueryWithSource string ✔️ Wyrażenie tabelaryczne zawierające własne źródło tabelaryczne, takie jak odwołanie do tabeli. Ta składnia jest obsługiwana tylko w przypadku starszej strategii. Podqueria 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 zawierać innych typów instrukcji, takich jak let instrukcje.
Wskazówki string Zero lub więcej parametrów rozdzielanych spacjami w postaci: HintName=Value , która kontroluje zachowanie operatora. Zobacz obsługiwane wskazówki dotyczące typu strategii.

Obsługiwane wskazówki

Nazwa wskazówki Typ Strategia Opis
hint.shufflekey string losowo Klucz partycji używany do uruchamiania operatora partycji ze strategią shuffle .
hint.materialized bool Starszych Jeśli ustawiono wartość true, zmaterializuje źródło partition operatora. Wartość domyślna to false.
hint.concurrency int Starszych Określa liczbę partycji, które mają być uruchamiane równolegle. Wartość domyślna to 16.
hint.spread int Starszych Określa sposób dystrybucji partycji między węzłami klastra. Wartość domyślna to 1.

Jeśli na przykład istnieje N partycji, a wskazówka rozkładu jest ustawiona na P, partycje N będą przetwarzane przez różne węzły klastra P równocześnie równolegle/sekwencyjnie w zależności od wskazówki współbieżności.

Zwraca

Operator zwraca związek wyników poszczególnych podquerii.

Strategie

Operator partycji obsługuje kilka strategii operacji podquery: natywnej, shuffle i starszej wersji.

Uwaga

Rozróżnienie między strategiami native i shuffle umożliwia obiektowi wywołującego wskazanie kardynalności i strategii wykonywania podquery. Ten wybór może mieć wpływ na czas ukończenia podquerii, 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.

Podquery muszą być przekształceniem tabelarycznym, które nie określa źródła tabelarycznego. Źródło jest niejawne i jest przypisywane zgodnie z partycjami podrzędnymi. W podquery 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.

Podquery muszą być przekształceniem tabelarycznym, które nie określa źródła tabelarycznego. Źródło jest niejawne i jest przypisywane zgodnie z partycjami podrzędnymi. W podquery 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 shuffle

Poniższa lista operatorów może być używana w podquery ze strategiami natywnymi lub shuffle:

Uwaga

  • Operatory odwołujące się do źródła tabeli innego niż partycje podrzędne nie są zgodne ze strategiami native i shuffle . Na przykład sprzężenia, unii, danych externaldata i oceny (wtyczki). W takich scenariuszach należy skorzystać ze 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 preferowanie 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 w podzapytaniu. 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 jest oparte 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 obliczeń summarize i 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 
    ) 

Dane wyjściowe

Typ zdarzenia Stan Zdarzenia Obrażeń
Grad WYOMING 108 0
Silny wiatr WYOMING 81 5
Burza zimowa WYOMING 72 0
Ciężki śnieg WASHINGTON 82 0
Silny wiatr WASHINGTON 58 13
Pożary lasów WASHINGTON 29 0
Burza z piorunami WEST VIRGINIA 180 1
Grad WEST VIRGINIA 103 0
Pogoda zimowa WEST VIRGINIA 88 0
Burza z piorunami WISCONSIN 416 1
Burza zimowa 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
    )

Dane wyjściowe

Typ zdarzenia TotalInjueries
Tornado 4
Grad 1
Burza z piorunami 1
Nadmierne ciepło 0
Silny wiatr 13
Lightning 5
Wysoki wiatr 5
Avalanche 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

Dane wyjściowe

Liczba
22345

Starsza strategia z jawnym źródłem

Następujące zapytanie uruchamia dwa podquery:

  • 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.

Ostatecznym wynikiem jest związek tych dwóch podkwadek.

range x from 1 to 2 step 1
| partition hint.strategy=legacy by x {StormEvents | where x == InjuriesIndirect}
| count 

Dane wyjściowe

Liczba
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 podquery. 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))
)