Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: ✅Microsoft Fabric✅Azure Data Explorer
Подключаемый bag_unpack
модуль распаковывает один столбец типа dynamic
, обрабатывая каждый слот пакета свойств верхнего уровня как столбец. Подключаемый модуль вызывается оператором evaluate
.
Синтаксис
T|
evaluate
bag_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.
Возвраты
Подключаемый 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)
Выходные данные
Возраст | Имя (название) |
---|---|
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)
[
'Old_name', dynamic({"Name": "John", "Age":20}),
'Old_name', dynamic({"Name": "Dave", "Age":40}),
'Old_name', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='replace_source') // Use new name
Выходные данные
Возраст | Имя (название) |
---|---|
20 | Джон |
40 | Дэйв |
30 | Жасмин |
datatable(Name:string, d:dynamic)
[
'Old_name', dynamic({"Name": "John", "Age":20}),
'Old_name', dynamic({"Name": "Dave", "Age":40}),
'Old_name', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='keep_source') // Keep old name
Выходные данные
Возраст | Имя (название) |
---|---|
20 | Old_name |
40 | Old_name |
30 | Old_name |
Разверните контейнер и используйте 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']))
Выходные данные
Имя (название) |
---|
Джон |
Дэйв |
Жасмин |
Разверните контейнер и используйте параметр OutputSchema:
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d) : (Name:string, Age:long)
Выходные данные
Имя (название) | Возраст |
---|---|
Джон | 20 |
Дэйв | 40 |
Жасмин | 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)
Выходные данные
Описание | Имя (название) | Возраст |
---|---|---|
Студент | Джон | 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 строк выходных данных.
Канада | Британская Колумбия | 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 |
... | ... | ... |