Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ 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. Дополнительные сведения о стратегии перетасовки и производительности см. в статье "Перетасовка запросов".
Поддерживаемые операторы для собственных и перетасовок стратегий
Следующий список операторов можно использовать в вложенных запросах с собственными стратегиями или стратегиями перетасовки:
- count
- distinct
- extend
- make-series (частично поддерживается, см. примечание)
- mv-apply
- mv-expand
- parse
- parse-where
- project
- project-away
- project-keep
- project-rename
- project-reorder
- reduce
- sample
- sample-distinct
- scan
- search
- serialize
- sort
- summarize
- take
- top
- top-hitters
- top-nested
- where
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))
)