Подключаемый модуль bag_unpack

Подключаемый bag_unpack модуль распаковывает один столбец типа dynamic, рассматривая каждый слот верхнего уровня контейнера свойств как столбец. Подключаемый модуль вызывается с evaluate помощью оператора .

Синтаксис

T|evaluatebag_unpack(Column [,OutputColumnPrefix ] [,columnsConflict ] [,ignoredProperties ] ) [:OutputSchema]

Дополнительные сведения о соглашениях о синтаксисе.

Параметры

Имя Тип Обязательно Описание
T string ✔️ Табличные входные данные, столбец которого должен быть распаковывлен.
Столбец dynamic ✔️ Столбец T для распаковки.
OutputColumnPrefix string Общий префикс, добавляемый во все столбцы, созданные подключаемым модулем.
columnsConflict string Направление разрешения конфликтов столбцов. Допустимые значения:
error — Запрос выдает ошибку (по умолчанию)
replace_source - Исходный столбец заменен
keep_source — Исходный столбец сохранен
ignoredProperties dynamic Необязательный набор свойств контейнера, которые следует игнорировать. }
OutputSchema Имена и типы ожидаемых столбцов выходных данных подключаемого bag_unpack модуля. Указание ожидаемой схемы оптимизирует выполнение запроса, не выполняя сначала фактический запрос для изучения схемы. Сведения о синтаксисе см. в разделе Синтаксис выходной схемы.

Синтаксис выходной схемы

(Имя столбца:ColumnType [, ...] )

Чтобы добавить все столбцы входной таблицы в выходные данные подключаемого модуля, используйте подстановочный знак * в качестве первого параметра следующим образом:

(*,Имя столбца:ColumnType [, ...] )

Возвращаемое значение

Подключаемый bag_unpack модуль возвращает таблицу с таким же количеством записей, как и табличные входные данные (T). Схема таблицы аналогична схеме ее табличных входных данных со следующими изменениями:

  • Указанный входной столбец (столбец) удаляется.
  • Схема расширяется с таким количеством столбцов, как есть отдельные слоты в значениях контейнера свойств верхнего уровня T. Имя каждого столбца соответствует имени каждого слота, при необходимости с префиксом OutputColumnPrefix. Его типом является либо тип слота, если все значения одного слота имеют один и тот же тип, либо dynamic, если значения отличаются по типу.

Примечание

Если OutputSchema не указан, схема вывода подключаемого модуля зависит от значений входных данных. Таким образом, несколько выполнений подключаемого модуля с использованием разных входных данных могут привести к по-разному.

Примечание

Входные данные для подключаемого модуля должны быть такими, чтобы выходная схема следовали всем правилам для табличной схемы. В частности:

  • Имя выходного столбца не может совпадать с именем существующего столбца в табличном входе T, если только это не распаковываемый столбец (Столбец), так как это приведет к получению двух столбцов с одинаковым именем.

  • Все имена слотов с префиксом OutputColumnPrefix должны быть допустимыми именами сущностей и соответствовать правилам именования идентификаторов.

Примеры

Развернуть сумку

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 Jasmine

Развертывание контейнера с помощью 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 Данил
30 Jasmine

Развертывание контейнера с помощью столбцов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 Данил
30 Jasmine
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

Разверните контейнер и используйте параметр , 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']))

Выходные данные

Имя
Джон
Данил
Jasmine

Развертывание контейнера с помощью определяемого запросом 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
Данил 40
Jasmine 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)

Выходные данные

Описание Имя возраст;
Учащийся Джон 20
Учитель Данил 40
Учащийся Jasmine 30