Подключаемый модуль bag_unpack
Область применения: ✅Microsoft Fabric✅Azure Data Explorer
Подключаемый bag_unpack
модуль распаковывает один столбец типа dynamic
, обрабатывая каждый слот пакета свойств верхнего уровня как столбец. Подключаемый модуль вызывается оператором evaluate
.
Синтаксис
T |
bag_unpack(
evaluate
Column [,
OutputColumnPrefix ] [,
columnConflict ] [,
ignoredProperties ] )
[:
OutputSchema]
Дополнительные сведения о соглашениях синтаксиса.
Параметры
Имя (название) | Type | Обязательно | Описание |
---|---|---|---|
T | string |
✔️ | Табличные входные данные, столбец которых должен быть распакован. |
Столбец | dynamic |
✔️ | Столбец T для распаковки. |
OutputColumnPrefix | string |
Общий префикс для добавления ко всем столбцам, созданным подключаемым модулем. | |
columnsConflict | string |
Направление разрешения конфликтов столбцов. Допустимые значения: error — Запрос создает ошибку (по умолчанию)replace_source — исходный столбец замененkeep_source — исходный столбец хранится |
|
игнорироватьproperties | dynamic |
Необязательный набор свойств контейнера, которые следует игнорировать. } | |
OutputSchema | Имена и типы ожидаемых столбцов выходных данных подключаемого bag_unpack модуля. Указание ожидаемой схемы оптимизирует выполнение запроса, не выполняя фактический запрос для изучения схемы. Сведения о синтаксисе см. в разделе "Синтаксис выходной схемы". |
Синтаксис схемы вывода
(
ColumnName :
ColumnType [,
...])
Чтобы добавить все столбцы входной таблицы в выходные данные подключаемого модуля, используйте подстановочный знак *
в качестве первого параметра, как показано ниже.
(
*
,
ColumnName :
ColumnType [,
...])
Возвраты
Подключаемый bag_unpack
модуль возвращает таблицу с таким количеством записей, как табличные входные данные (T). Схема таблицы совпадает со схемой табличных входных данных со следующими изменениями:
- Указанный входной столбец (столбец) удаляется.
- Схема расширяется с большим количеством столбцов, так как существуют отдельные слоты в значениях контейнера свойств верхнего уровня T. Имя каждого столбца соответствует имени каждого слота, при необходимости префиксированного OutputColumnPrefix. Его тип — это либо тип слота, если все значения одного и того же слота имеют одинаковый тип или
dynamic
, если значения отличаются в типе.
Примечание.
Если 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 | Dave |
30 | Жасмин |
Разверните контейнер с помощью OutputColumnPrefix
Разверните контейнер и используйте OutputColumnPrefix
параметр для создания имен столбцов, начинающихся с префикса "Property_".
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 | Dave |
30 | Жасмин |
Разверните контейнер со столбцамиConflict
Разверните контейнер и используйте columnsConflict
параметр для разрешения конфликтов между существующими столбцами и столбцами, созданными оператором bag_unpack()
.
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 | Dave |
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 |
Разверните сумку с игнорируемойproperties
Разверните контейнер и используйте ignoredProperties
параметр, чтобы игнорировать определенные свойства в контейнере свойств.
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']))
Выходные данные
Имя. |
---|
Джон |
Dave |
Жасмин |
Разверните контейнер с определяемым запросом OutputSchema
Разверните контейнер и используйте 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 |
Dave | 40 |
Жасмин | 30 |
Разверните контейнер и используйте OutputSchema
параметр, чтобы можно было оценить различные оптимизации перед выполнением фактического запроса. Используйте подстановочный знак *
для возврата всех столбцов входной таблицы.
datatable(d:dynamic, Description: string)
[
dynamic({"Name": "John", "Age":20}), "Student",
dynamic({"Name": "Dave", "Age":40}), "Teacher",
dynamic({"Name": "Jasmine", "Age":30}), "Student",
]
| evaluate bag_unpack(d) : (*, Name:string, Age:long)
Выходные данные
Description | Имя. | Возраст |
---|---|---|
Студент | Джон | 20 |
Преподаватель | Dave | 40 |
Студент | Жасмин | 30 |