Оператор partition
Оператор секционирования разделяет записи входной таблицы на несколько вложенных таблиц в соответствии со значениями в ключевом столбце. Оператор запускает вложенный запрос для каждой подтаблицы и создает одну выходную таблицу, которая является объединением результатов всех вложенных запросов.
Этот оператор полезен, если требуется выполнить вложенный запрос только для подмножества строк, принадлежащих одному ключу секции, а не запрашивать весь набор данных. Эти вложенные запросы могут включать агрегатные функции, оконные функции, первые N и другие.
Оператор секционирования поддерживает несколько стратегий операций вложенных запросов:
- Native — используется с неявным источником данных с тысячами значений секций ключей.
- Shuffle — использование с неявным источником с миллионами значений секций ключей.
- Устаревшая версия — используется с неявным или явным источником для 64 или менее значений секции ключа.
Синтаксис
T|
partition
[ hint.strategy=
Стратегия ] [ Указания ] by
Преобразование столбцаSubQuery(
)
T|
partition
[ hint.strategy=legacy
] [ Hints ] by
Column{
SubQueryWithSource}
Дополнительные сведения о соглашениях о синтаксисе.
Параметры
Имя | Тип | Обязательно | Описание |
---|---|---|---|
T | string |
✔️ | Входной табличный источник. |
Стратегия | string |
Значение legacy , shuffle или native . Это указание определяет стратегию выполнения оператора секционирования.Если стратегия не указана legacy , используется стратегия. Дополнительные сведения см. в разделе Стратегии. |
|
Столбец | string |
✔️ | Имя столбца в T , значения которого определяют способ секционирования входного табличного источника. |
TransformationSubQuery | string |
✔️ | Табличное выражение преобразования. Источником неявно являются вложенные таблицы, созданные путем секционирования записей T. Каждая подтаблимая однородна по значению Column. Выражение должно предоставлять только один табличный результат и не должно содержать операторы других типов, таких как let операторы . |
SubQueryWithSource | string |
✔️ | Табличное выражение, содержащее собственный табличный источник, например ссылку на таблицу. Этот синтаксис поддерживается только в устаревшей стратегии. Вложенный запрос может ссылаться только на ключевой столбец Column из T. Чтобы сослаться на столбец, используйте синтаксис toscalar( Column) .Выражение должно предоставлять только один табличный результат и не должно содержать операторы других типов, таких как let операторы . |
Указания | string |
Ноль или несколько параметров, разделенных пробелами, в виде: HintName= Значение , которое управляет поведением оператора. См. поддерживаемые указания для каждого типа стратегии. |
Поддерживаемые указания
Имя подсказки | Тип | Стратегия | Описание |
---|---|---|---|
hint.shufflekey |
string |
shuffle | Ключ секции, используемый для запуска оператора секционирования со стратегией shuffle . |
hint.materialized |
bool |
Наследие | Если задано значение true , будет материализовать источник partition оператора . Значение по умолчанию — false . |
hint.concurrency |
int |
Наследие | Определяет, сколько секций будет выполняться параллельно. Значение по умолчанию — 16 . |
hint.spread |
int |
Наследие | Определяет способ распределения секций между узлами кластера. Значение по умолчанию — 1 .Например, если имеется N секций и для указания распределения задано значение P, то N секций будут обрабатываться разными узлами P кластера одинаково параллельно или последовательно в зависимости от указания параллелизма. |
Возвращаемое значение
Оператор возвращает объединение результатов отдельных вложенных запросов.
Стратегии
Оператор секционирования поддерживает несколько стратегий операций вложенных запросов: native, shuffle и legacy.
Примечание
Различие между native
стратегиями и shuffle
позволяет вызывающей стороне указать кратность и стратегию выполнения вложенного запроса. Этот выбор может повлиять на то, сколько времени занимает выполнение вложенного запроса, но не изменит конечный результат.
Собственная стратегия
Эту стратегию следует применять, если количество уникальных значений ключа секции не велико, примерно в тысячах.
Вложенный запрос должен быть табличным преобразованием, которое не указывает табличный источник. Источник является неявным и назначается в соответствии с разделами подтаблицы. Во вложенном запросе можно использовать только определенные поддерживаемые операторы . Нет ограничений на количество секций.
Чтобы использовать эту стратегию, укажите 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-distinct
- scan
- search
- serialize
- sort
- summarize
- take
- В начало
- топ-нападающий
- top-nested
- where
Примечание
- Операторы, ссылающиеся на источник таблицы, отличный от секций с вложенными таблицами, несовместимы со
native
стратегиями иshuffle
. Например, присоединение, объединение, внешние данные и оценка (подключаемые модули). Для таких сценариев прибегите к устаревшей стратегии. - Оператор fork не поддерживается ни для одного типа стратегии, так как вложенный запрос должен возвращать один табличный результат.
Устаревшая стратегия
По историческим причинам legacy
стратегия является стратегией по умолчанию. Однако мы рекомендуем использовать собственные стратегии или стратегии перемешивание , так как legacy
этот подход ограничен 64 секциями и менее эффективен.
В некоторых сценариях legacy
эта стратегия может потребоваться из-за поддержки включения табличного источника во вложенный запрос. В таких случаях вложенный запрос может ссылаться только на ключевой столбец Column из входного табличного источника T. Для ссылки на столбец используйте синтаксис toscalar(
Column)
.
Если вложенный запрос представляет собой табличное преобразование без табличного источника, источник является неявным и основан на разделах подсети.
Чтобы использовать эту стратегию, укажите hint.strategy=legacy
или опустите любое другое указание стратегии.
Примечание
Ошибка возникает, если столбец секции Столбец содержит более 64 различных значений.
Примеры
Поиск верхних значений
В некоторых случаях создание запроса с помощью partition
оператора является более производительным и более простым, чем с помощью top-nested
оператора . Следующий запрос выполняет вычисление summarize
вложенных запросов и top
для каждого из них State
, начиная с W
: "WYOMING", "WASHINGTON", "WEST VIRGINIA" и "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
)
Выходные данные
EventType | Состояние | События | Травм |
---|---|---|---|
Град | ВАЙОМИНГ | 108 | 0 |
Очень сильный ветер | ВАЙОМИНГ | 81 | 5 |
Метель | ВАЙОМИНГ | 72 | 0 |
Сильный снег | ВАШИНГТОН | 82 | 0 |
Очень сильный ветер | ВАШИНГТОН | 58 | 13 |
Wildfire | ВАШИНГТОН | 29 | 0 |
Шквалистый ветер | ЗАПАДНАЯ ВИРДЖИНИЯ | 180 | 1 |
Град | ЗАПАДНАЯ ВИРДЖИНИЯ | 103 | 0 |
Зимняя погода | ЗАПАДНАЯ ВИРДЖИНИЯ | 88 | 0 |
Шквалистый ветер | ВИСКОНСИН | 416 | 1 |
Метель | ВИСКОНСИН | 310 | 0 |
Град | ВИСКОНСИН | 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
)
Выходные данные
EventType | TotalInjueries |
---|---|
Ураган | 4 |
Град | 1 |
Шквалистый ветер | 1 |
Чрезмерное тепло | 0 |
Очень сильный ветер | 13 |
Lightning | 5 |
Очень сильный ветер | 5 |
Лавина | 3 |
Стратегия тасовки
Следующий запрос возвращает три DamagedProperty
первых значения foreach EpisodeId
и столбцы EpisodeId
и State
.
StormEvents
| partition hint.strategy=shuffle by EpisodeId
(
top 3 by DamageProperty
| project EpisodeId, State, DamageProperty
)
| count
Выходные данные
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
Выходные данные
Count |
---|
113 |
Справочник по секциям
В следующем примере показано, как использовать оператор as для присвоения имени каждой секции данных, а затем повторного использования этого имени во вложенном запросе. Этот подход относится только к legacy
стратегии.
T
| partition by Dim
(
as Partition
| extend MetricPct = Metric * 100.0 / toscalar(Partition | summarize sum(Metric))
)
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по