Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Развертывает динамические массивы с несколькими значениями или контейнеры свойств в несколько записей.
mv-expand Можно описать как противоположность операторам агрегирования, которые упаковывают несколько значений в один динамически типизированный массив или контейнер свойств, например summarize ... make-list() и make-series.
Каждый элемент в (скалярном) массиве или контейнере свойств создает новую запись в выходных данных оператора. Все неразвернутые столбцы входных данных дублируются для всех записей в выходных данных.
Syntax
T|mv-expand [(kind=bag | )] [arraywith_itemindex=IndexColumnName] ColumnName [to typeof(Typename)] [,ColumnName ...] [limitRowlimit]
T|mv-expand [(kind=bag | )] [arrayИмя=] ArrayExpression [to typeof(Typename)] [,Имя=] ArrayExpressionto typeof( [Typename)] ...] [limitRowlimit]
Дополнительные сведения о соглашениях синтаксиса.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| ColumnName, ArrayExpression | string |
✔️ | Ссылка на столбец или скалярное выражение со значением типа dynamic , в котором содержится массив или контейнер свойств. Отдельные элементы верхнего уровня в массиве или контейнере свойств развертываются в несколько записей.Если используется ArrayExpression и Имя не равно имени входного столбца, развернутое значение расширяется в новый столбец в выходных данных. В противном случае заменяется существующее имя столбца . |
| Name | string |
Имя нового столбца. | |
| Typename | string |
✔️ | указывает базовый тип элементов массива, который станет типом столбца, созданного оператором mv-expand. Операция применения типа предназначена только для приведения и не включает синтаксический анализ или преобразование типа. Элементы массива, которые не соответствуют объявленному типу, становятся null значениями. |
| RowLimit | int |
Максимальное количество строк, созданных из каждой исходной строки. Значение по умолчанию — 2147483647.
mvexpand является прежней версией и устаревшей формой оператора mv-expand. В прежней версии по умолчанию используется ограничение в 128 строк. |
|
| IndexColumnName | string |
Если with_itemindex задано, выходные данные включают другой столбец с именем IndexColumnName , содержащий индекс, начиная с 0 элемента в исходной развернутой коллекции. |
Returns
Для каждой записи во входных данных оператор возвращает в выходных данных нуль, одну или несколько записей в соответствии со следующим определением:
Неразвернутые входные столбцы отображаются в выходных данных с исходными значениями. Если одна входная запись развертывается в несколько выходных записей, значение дублируется во всех записях.
Для каждого развернутого объекта ColumnName или ArrayExpression количество выходных записей определяется для каждого значения, как описано в режимах расширения. Для каждой входной записи вычисляется максимальное число выходных записей. Все массивы или контейнеры свойств развертываются параллельно, чтобы отсутствующие значения (если они есть) заменялись значениями NULL. Элементы развертываются в строки в том порядке, в котором они отображаются в исходном массиве или контейнере.
Если динамическое значение равно NULL, то для этого значения создается одна запись (NULL). Если динамическое значение — пустой массив или контейнер свойств, запись для этого значения не создается. В противном случае создается количество записей, равное количеству элементов в динамическом значении.
Развернутые столбцы имеют тип dynamic, если тип не указан явно с помощью предложения to typeof().
Режимы развертывания
Поддерживаются два режима развертывания контейнера свойств.
-
kind=bagилиbagexpansion=bag: пакеты свойств расширяются в пакеты свойств с одним входом. Этот режим используется по умолчанию. -
kind=arrayилиbagexpansion=array: пакеты свойств расширяются в структуры массива[ключей двух элементов,, что позволяет обеспечить универсальный доступ к ключам]и значениям. Кроме того, этот режим позволяет выполнять, например, подсчет различных значений в именах свойств.
Examples
Примеры, приведенные в этой статье, используют общедоступные таблицы в кластере справки, например
StormEventsтаблицу в базе данных Samples .
В примерах этой статьи используются общедоступные таблицы, такие как
Weatherтаблица в коллекции примеров Weather Analytics. Возможно, потребуется изменить имя таблицы в примере запроса, чтобы она соответствовала таблице в рабочей области.
В примерах этого раздела показано, как использовать синтаксис для начала работы.
Один столбец — расширение массива
datatable (a: int, b: dynamic)
[
1, dynamic([10, 20]),
2, dynamic(['a', 'b'])
]
| mv-expand b
Output
| a | b |
|---|---|
| 1 | 10 |
| 1 | 20 |
| 2 | a |
| 2 | b |
Один столбец — расширение контейнера
Простое развертывание одного столбца:
datatable (a: int, b: dynamic)
[
1, dynamic({"prop1": "a1", "prop2": "b1"}),
2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand b
Output
| a | b |
|---|---|
| 1 | {"prop1": "a1"} |
| 1 | {"prop2": "b1"} |
| 2 | {"prop1": "a2"} |
| 2 | {"prop2": "b2"} |
Один столбец — расширение пакета до пар "ключ-значение"
Простое расширение пакета к парам "ключ-значение":
datatable (a: int, b: dynamic)
[
1, dynamic({"prop1": "a1", "prop2": "b1"}),
2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand kind=array b
| extend key = b[0], val=b[1]
Output
| a | b | key | val |
|---|---|---|---|
| 1 | ["prop1","a1"] |
prop1 | a1 |
| 1 | ["prop2","b1"] |
prop2 | b1 |
| 2 | ["prop1","a2"] |
prop1 | a2 |
| 2 | ["prop2","b2"] |
prop2 | b2 |
Сжатые два столбца
Разверните два столбца сначала "zip" применимые столбцы, а затем разверните их:
datatable (a: int, b: dynamic, c: dynamic)[
1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 4, 3])
]
| mv-expand b, c
Output
| a | b | c |
|---|---|---|
| 1 | {"prop1":"a"} | 5 |
| 1 | {"prop2":"b"} | 4 |
| 1 | 3 |
Декартово произведение двух столбцов
Если вы хотите получить декартово произведение для развертывания двух столбцов, разверните по очереди:
datatable (a: int, b: dynamic, c: dynamic)
[
1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 6])
]
| mv-expand b
| mv-expand c
Output
| a | b | c |
|---|---|---|
| 1 | { "prop1": "a"} | 5 |
| 1 | { "prop1": "a"} | 6 |
| 1 | { "prop2": "b"} | 5 |
| 1 | { "prop2": "b"} | 6 |
Преобразование вывода
Чтобы принудительно развернуть выходные данные mv-expand до определенного типа (по умолчанию — динамический), используйте to typeof:
datatable (a: string, b: dynamic, c: dynamic)[
"Constant", dynamic([1, 2, 3, 4]), dynamic([6, 7, 8, 9])
]
| mv-expand b, c to typeof(int)
| getschema
Output
| ColumnName | ColumnOrdinal | DateType | ColumnType |
|---|---|---|---|
| a | 0 | System.String |
string |
| b | 1 | System.Object |
dynamic |
| c | 2 | System.Int32 |
int |
Обратите внимание: столбец b возвращается как столбец типа dynamic, а c — как столбец типа int.
Использование with_itemindex
Расширение массива с помощью with_itemindex:
range x from 1 to 4 step 1
| summarize x = make_list(x)
| mv-expand with_itemindex=Index x
Output
| x | Index |
|---|---|
| 1 | 0 |
| 2 | 1 |
| 3 | 2 |
| 4 | 3 |
Связанный контент
- Оператор mv-apply.
- Для противоположности оператора mv-expand см. сводку make_list().
- Сведения о расширении динамических объектов JSON в столбцах с помощью ключей контейнера свойств см. в разделе bag_unpack() подключаемый модуль.
- функция parse_json
- функция array_iff