Поделиться через


Оператор разделения

Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel

Оператор секционирования секционирует записи входной таблицы в несколько вложенных таблиц в соответствии со значениями в ключевом столбце. Оператор запускает вложенный запрос для каждой подсети и создает одну выходную таблицу, которая является объединением результатов всех вложенных запросов.

Оператор секции полезен, если необходимо выполнить вложенный запрос только в подмножестве строк, принадлежащих одному ключу секции, а не запросу всего набора данных. Эти вложенные запросы могут включать агрегатные функции, функции окна, верхние N и другие.

Оператор секционирования поддерживает несколько стратегий операции вложенных запросов:

  • Native — используется с неявным источником данных с тысячами значений разделов ключей.
  • Перетасовка — использование с неявным источником с миллионами ключевых значений секций.
  • Устаревшая версия — используется с неявным или явным источником для 64 или меньше значений разделов ключей.

Syntax

T|partition [ hint.strategy= ] [ подсказки ] byстолбцаSubQuery()

T|partition [ [ hint.strategy=legacyподсказки ] byСтолбец{SubQueryWithSource}

Дополнительные сведения о соглашениях синтаксиса.

Parameters

Name Type Required Description
T string ✔️ Входной табличный источник.
Strategy string Значение legacy, shuffleили native. Это указание определяет стратегию выполнения оператора секционирования.

Если стратегия не указана legacy , используется стратегия. Дополнительные сведения см. в разделе "Стратегии".
Column string ✔️ Имя столбца в T , значения которого определяют, как секционировать входной табличный источник.
TransformationSubQuery string ✔️ Табличное выражение преобразования. Источник неявно представляет собой вложенные таблицы, созданные путем секционирования записей T. Каждая подкатабельная имеет однородное значение столбца.

Выражение должно предоставлять только один табличный результат и не должно иметь других типов операторов, таких как let операторы.
SubQueryWithSource string ✔️ Табличное выражение, включающее собственный табличный источник, например ссылку на таблицу. Этот синтаксис поддерживается только с устаревшей стратегией. Вложенный запрос может ссылаться только на ключевой столбец, столбец из T. Чтобы ссылаться на столбец, используйте синтаксис toscalar(столбца).

Выражение должно предоставлять только один табличный результат и не должно иметь других типов операторов, таких как let операторы.
Hints string Ноль или больше разделенных пробелами параметров в виде: HintName=Value , которые управляют поведением оператора. См. поддерживаемые подсказки для каждого типа стратегии.

Поддерживаемые подсказки

Имя подсказки Type Strategy Description
hint.shufflekey string shuffle Ключ секции, используемый для запуска оператора секции с shuffle помощью стратегии.
hint.materialized bool legacy Если задано значение true, материализует источник оператора partition. Значение по умолчанию — false.
hint.concurrency int legacy Определяет количество секций, выполняемых параллельно. Значение по умолчанию — 16.
hint.spread int legacy Определяет, как распределять секции между узлами кластера. Значение по умолчанию — 1.

Например, если для разделов N задано значение P, то N-секции обрабатываются разными узлами кластера P одинаково, параллельно или последовательно в зависимости от указания параллелизма.

Returns

Оператор возвращает объединение результатов отдельных вложенных запросов.

Strategies

Оператор секционирования поддерживает несколько стратегий операций вложенных запросов: собственные, перетасовки и устаревшие версии.

Note

Различие между nativeshuffle и стратегиями позволяет вызывающей стороне указывать кратность и стратегию выполнения вложенного запроса. Этот выбор может повлиять на время завершения вложенного запроса, но не изменяет конечный результат.

Собственная стратегия

Эта стратегия должна применяться, если количество различных значений ключа секции не имеет большого размера, примерно в тысячах.

Вложенный запрос должен быть табличным преобразованием, которое не указывает табличный источник. Источник неявен и назначается в соответствии с вложенными секциями. В подзапросе можно использовать только определенные поддерживаемые операторы . Нет ограничений на количество секций.

Чтобы использовать эту стратегию, укажите hint.strategy=native.

Стратегия перетасовки

Эта стратегия должна применяться, если число различных значений ключа секции большое, в миллионах.

Вложенный запрос должен быть табличным преобразованием, которое не указывает табличный источник. Источник неявен и назначается в соответствии с вложенными секциями. В подзапросе можно использовать только определенные поддерживаемые операторы . Нет ограничений на количество секций.

Чтобы использовать эту стратегию, укажите hint.strategy=shuffle. Дополнительные сведения о стратегии перетасовки и производительности см. в статье "Перетасовка запросов".

Поддерживаемые операторы для собственных и перетасовок стратегий

Следующий список операторов можно использовать в вложенных запросах с собственными стратегиями или стратегиями перетасовки:

Note

  • Операторы, ссылающиеся на источник таблицы, отличные от вложенных секций, несовместимы с native и shuffle стратегиями. Например, присоединение, объединение, внешние данные и оценка (подключаемые модули). Для таких сценариев прибегите к устаревшей стратегии.
  • Оператор вилки не поддерживается для любого типа стратегии, так как вложенный запрос должен возвращать один табличный результат.
  • Оператор make-series поддерживается только частично в операторе partition by . Она поддерживается только в том случае, если from указаны оба to параметра.

Устаревшая стратегия

По историческим причинам legacy стратегия является стратегией по умолчанию. Однако мы рекомендуем использовать собственные или перетасовки стратегии, так как legacy подход ограничен 64 секциями и менее эффективен.

В некоторых сценариях legacy стратегия может потребоваться из-за ее поддержки включения табличного источника в вложенный запрос. В таких случаях вложенный запрос может ссылаться только на ключевой столбец, столбец из входного табличного источника , T. Чтобы ссылаться на столбец, используйте синтаксис toscalar(столбца).

Если вложенный запрос является табличным преобразованием без табличного источника, источник неявен и основан на вложенных секциях.

Чтобы использовать эту стратегию, укажите или опустите hint.strategy=legacy любое другое указание стратегии.

Note

Ошибка возникает, если столбец секции, столбец, содержит более 64 различных значений.

Examples

В примерах этого раздела показано, как использовать синтаксис для начала работы.

Примеры, приведенные в этой статье, используют общедоступные таблицы в кластере справки, например StormEvents таблицу в базе данных Samples .

В примерах этой статьи используются общедоступные таблицы, такие как Weather таблица в коллекции примеров Weather Analytics. Возможно, потребуется изменить имя таблицы в примере запроса, чтобы она соответствовала таблице в рабочей области.

Поиск верхних значений

В некоторых случаях более производительно и проще писать запрос с помощью оператора, чем с помощью partitiontop-nested оператора. Следующий запрос выполняет вычисление вложенных запросов summarize и top для каждого State запуска с W: WYOMING, "ВАШИНГТОН", "ЗАПАДНАЯ ВИРДЖИНИЯ" и "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
Высокий ветер WYOMING 81 5
Зимний шторм WYOMING 72 0
Метель WASHINGTON 82 0
Высокий ветер WASHINGTON 58 13
Wildfire WASHINGTON 29 0
Ураганный ветер ЗАПАДНАЯ ВИРДЖИНИЯ 180 1
Hail ЗАПАДНАЯ ВИРДЖИНИЯ 103 0
Холод ЗАПАДНАЯ ВИРДЖИНИЯ 88 0
Ураганный ветер WISCONSIN 416 1
Зимний шторм WISCONSIN 310 0
Hail WISCONSIN 303 1

Собственная стратегия

Следующий запрос возвращает первые 2 EventType значения TotalInjuries для каждого State из них, начинающегося с W:

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
Ураганный ветер 1
Чрезмерное тепло 0
Высокий ветер 13
Lightning 5
Высокий ветер 5
Avalanche 3

Стратегия перетасовки

Следующий запрос возвращает первые 3 DamagedProperty значения для кэширования EpisodeId и столбцов EpisodeId и State.

StormEvents
| partition hint.strategy=shuffle by EpisodeId
    (
    top 3 by DamageProperty
    | project EpisodeId, State, DamageProperty
    )
| count

Output

Count
22345

Устаревшая стратегия с явным источником

Следующий запрос выполняет два вложенных запроса:

  • Когда x == 1запрос возвращает все строки из StormEvents них InjuriesIndirect == 1.
  • Когда x == 2запрос возвращает все строки из StormEvents них InjuriesIndirect == 2.

Окончательный результат — объединение этих двух вложенных запросов.

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

Output

Count
113

Справочник по секциям

В следующем примере показано, как использовать оператор as для предоставления имени каждому разделу данных, а затем повторно использовать это имя в вложенных запросах. Этот подход относится только к legacy стратегии.

T
| partition by Dim
(
    as Partition
    | extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)