Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ Microsoft Fabric ✅ Azure Data Explorer
Подключаемый bag_unpack модуль распаковывает один столбец типа dynamic, обрабатывая каждый слот пакета свойств верхнего уровня как столбец. Подключаемый модуль вызывается оператором evaluate .
Синтаксис
T|evaluatebag_unpack( Column [,OutputColumnPrefix ] [,columnConflict ] [,ignoredProperties ] ) [:OutputSchema]
Дополнительные сведения о соглашениях синтаксиса.
Параметры
| Имя (название) | Тип | Обязательно | Описание |
|---|---|---|---|
| T | string |
✔️ | Табличные входные данные, столбец которых должен быть распакован. |
| Столбец | dynamic |
✔️ | Столбец T для распаковки. |
| OutputColumnPrefix | string |
Общий префикс для добавления ко всем столбцам, созданным подключаемым модулем. | |
| columnsConflict | string |
Направление разрешения конфликтов столбцов. Допустимые значения: error — Запрос создает ошибку (по умолчанию)replace_source — исходный столбец замененkeep_source — исходный столбец хранится |
|
| игнорироватьproperties | dynamic |
Необязательный набор свойств контейнера, которые следует игнорировать. } | |
| OutputSchema | Укажите имена столбцов и типы для выходных данных подключаемого bag_unpack модуля. Сведения о синтаксисе см. в разделе "Синтаксис выходной схемы" и сведения о последствиях см. в рекомендациях по производительности. |
Синтаксис схемы вывода
(
ColumnName:ColumnType [, ...])
Используйте подстановочный знак * в качестве первого параметра, чтобы включить все столбцы исходной таблицы в выходные данные следующим образом:
(
*
,
ColumnName:ColumnType [, ...])
Вопросы, связанные с производительностью
Использование подключаемого модуля без OutputSchema может иметь серьезные последствия для производительности в больших наборах данных и следует избежать.
Предоставление OutputSchema позволяет обработчику запросов оптимизировать выполнение запроса, так как он может определить схему вывода без необходимости анализировать и анализировать входные данные. OutputSchema полезно, если входные данные являются большими или сложными. Ознакомьтесь с примерами с последствиями использования подключаемого модуля и без определенного outputSchema.
Возвраты
Подключаемый bag_unpack модуль возвращает таблицу с таким количеством записей, как табличные входные данные (T). Схема таблицы совпадает со схемой табличных входных данных со следующими изменениями:
- Указанный входной столбец (столбец) удаляется.
- Имя каждого столбца соответствует имени каждого слота, при необходимости префиксированного OutputColumnPrefix.
- Тип каждого столбца — это либо тип слота, если все значения одного и того же слота имеют одинаковый тип или
dynamic, если значения отличаются в типе. - Схема расширяется с большим количеством столбцов, так как существуют отдельные слоты в значениях контейнера свойств верхнего уровня T.
Примечание.
- Если вы не указываете OutputSchema, схема выходных данных подключаемого модуля зависит от входных значений данных. Несколько выполнений подключаемого модуля с различными входными данными могут создавать разные выходные схемы.
- Если задана функция OutputSchema , подключаемый модуль возвращает только столбцы, определенные в синтаксисе схемы вывода, если не используется подстановочный знак
*. - Чтобы вернуть все столбцы входных данных и столбцы, определенные в OutputSchema, используйте подстановочный знак
*в OutputSchema.
Правила табличной схемы применяются к входным данным. В частности:
- Имя выходного столбца не может совпадать с существующим столбцом в табличном входном формате T, если только это столбец для распаковки (столбец). В противном случае выходные данные содержат два столбца с одинаковым именем.
- Все имена слотов при префиксе OutputColumnPrefix должны быть допустимыми именами сущностей и следовать правилам именования идентификаторов.
Подключаемый модуль игнорирует значения NULL.
Примеры
В примерах этого раздела показано, как использовать синтаксис для начала работы.
Разверните сумку:
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)
Выходные данные
Age |
Name |
|---|---|
| 20 | Джон |
| 40 | Дэйв |
| 30 | Жасмин |
Разверните контейнер и используйте OutputColumnPrefix параметр для создания имен столбцов с префиксом:
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, 'Property_')
Выходные данные
Property_Age |
Property_Name |
|---|---|
| 20 | Джон |
| 40 | Дэйв |
| 30 | Жасмин |
Разверните контейнер и используйте columnsConflict параметр для разрешения конфликта столбцов между динамическим столбцом и существующим столбцом:
datatable(Name:string, d:dynamic)
[
'James', dynamic({"Name": "John", "Age":20}),
'David', dynamic({ "Age":40}),
'Emily', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='replace_source') // Replace old column Name by new column
Выходные данные
Name |
Age |
|---|---|
| Джон | 20 |
| 40 | |
| Жасмин | 30 |
datatable(Name:string, d:dynamic)
[
'James', dynamic({"Name": "John", "Age":20}),
'David', dynamic({"Name": "Dave", "Age":40}),
'Emily', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='keep_source') // Keep old column Name
Выходные данные
Name |
Age |
|---|---|
| Джеймс | 20 |
| Давид | 40 |
| Эмили | 30 |
Разверните контейнер и используйте ignoredProperties параметр, чтобы игнорировать 2 свойства в контейнере свойств:
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20, "Address": "Address-1" }),
dynamic({"Name": "Dave", "Age":40, "Address": "Address-2"}),
dynamic({"Name": "Jasmine", "Age":30, "Address": "Address-3"}),
]
// Ignore 'Age' and 'Address' properties
| evaluate bag_unpack(d, ignoredProperties=dynamic(['Address', 'Age']))
Выходные данные
Name |
|---|
| Джон |
| Дэйв |
| Жасмин |
Разверните контейнер и используйте параметр OutputSchema:
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({ "Name": "Dave", "Height": 170, "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)
Выходные данные
Age |
Height |
Name |
|---|---|---|
| 20 | Джон | |
| 40 | 170 | Дэйв |
| 30 | Жасмин |
Разверните контейнер с помощью OutputSchema и используйте параметр подстановочного знака*:
Этот запрос возвращает исходное описание слота и столбцы, определенные в OutputSchema.
datatable(d:dynamic, Description: string)
[
dynamic({"Name": "John", "Age":20, "height":180}), "Student",
dynamic({"Name": "Dave", "Age":40, "height":160}), "Teacher",
dynamic({"Name": "Jasmine", "Age":30, "height":172}), "Student",
]
| evaluate bag_unpack(d) : (*, Name:string, Age:long)
Выходные данные
| Описание | Name |
Age |
|---|---|---|
| Студент | Джон | 20 |
| Преподаватель | Дэйв | 40 |
| Студент | Жасмин | 30 |
Примеры с последствиями производительности
Разверните контейнер с определенным OutputSchema и без нее, чтобы сравнить последствия производительности:
В этом примере используется общедоступная таблица в кластере справки. В базе данных ContosoSales есть таблица с именем SalesDynamic. Таблица содержит данные о продажах и содержит динамический столбец с именем Customer_Properties.
Пример без выходной схемы: первый запрос не определяет OutputSchema. Запрос занимает 5,84 секунды ЦП и сканирует 36,39 МБ данных.
SalesDynamic | evaluate bag_unpack(Customer_Properties) | summarize Sales=sum(SalesAmount) by Country, StateПример с выходной схемой: второй запрос предоставляет OutputSchema. Запрос занимает 0,45 секунды ЦП и сканирует 19,31 МБ данных. Запросу не нужно анализировать входную таблицу, сохраняя время обработки.
SalesDynamic | evaluate bag_unpack(Customer_Properties) : (*, Country:string, State:string, City:string) | summarize Sales=sum(SalesAmount) by Country, State
Выходные данные
Выходные данные одинаковы для обоих запросов. Ниже показаны первые 10 строк выходных данных.
Country/Region |
State |
Sales |
|---|---|---|
| Канада | Британская Колумбия | 56,101,083 |
| Соединенное Королевство | Англия | 77,288,747 |
| Австралия | Виктория | 31,242,423 |
| Австралия | Квинсленд | 27,617,822 |
| Австралия | Южная Австралия | 8,530,537 |
| Австралия | Новый Южный Уэльс | 54,765,786 |
| Австралия | Тасмания | 3,704,648 |
| Канада | Альберта | 375,061 |
| Канада | Онтарио | 38,282 |
| Соединенные Штаты | Вашингтон | 80,544,870 |
| ... | ... | ... |