Поделиться через


Подключаемый модуль 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