SQL
Виртуальная таблица
Виртуальная таблица - таблица со всеми пакетами, которые пришли в SQL узел из определенного предыдущего узла.
Имя таблицы соответствует имени этого предыдущего узла.
Столбцами таблицы являются имена переменных пакета, выходящего из предыдущего узла учетом возможных переименований, заданных во входящей связи.
Если в SQL узел входят пакеты из разных узлов, то для каждого узла будет собственная виртуальная таблица.
Запрос SQL узла
SQL узел должен содержать SQL запрос выбора данных. Общие правила создания запроса должны соответствовать требованиям использования SQL команды (SELECT) на диалекте СУБД PostgreSQL.
Выбор данных производится из виртуальных таблиц.
Используйте SQL мастер для создания запроса.
Правила формирования запроса
Результат запроса должен возвращать столбец с массивом идентификаторов пакетов, которые участвовали в формировании результата.
Массив используется в служебных целях (не отображается пользователю при обработке пакета в скрипте расчетного узла ) для формирования истории создания пакета и для идентификации уникальности результата запроса.
Остальные столбцы результата запроса преобразуются в переменные типа поле или файл или массив пакетов пакета. Тип переменной задается в выходной спецификации SQL узла.
Если столбец должен представлять переменную типа массив пакетов, то он должен формироваться как JSON массив JSON объектов. Для каждого JSON объекта создается новый "вложенный" пакет, а каждое поле JSON объекта преобразуется в переменную типа поле или файл "вложенного" пакета. Тип переменной задается в выходной спецификации SQL узла.
Пример формирования простого пакета
Объединение двух пакетов по одинаковому полю.
select
array[c.id, s.id] as packages,
s.size,
s.span,
s.x,
s.sin,
c.cos
from sin s join cos c on s.job_id = c.job_id
Здесь:
array[c.id, s.id] as packages
- получение массива с идентификаторами исходных пакетов (см. правило № 1);Официальная документация на функцию
array
.sin
исos
- имена виртуальных таблиц, которые соответствуют именам узлов, соединенные с входом SQL узла;job_id
- произвольный идентификатор, присвоенный в узле generate;s.*
иc.cos
- имена столбцов (переменные соответствующих пакетов)(см. правило № 2).
При создании запроса в качестве условных параметров можно использовать только переменные пакета типа поле. В качестве возвращаемых переменных можно использовать любые переменные пакета.
Пример формирования пакета с переменной типа "массив пакетов"
Дополнительная информация о переменной типа массив пакетов в описании пакета.
select
array_agg("cos".id order by "cos".id) || array_agg("sin".id order by "sin".id) as packages,
'merge' as label,
json_agg(json_build_object(
'cos_job_id', "cos"."job_id",
'cos_size', "cos"."size",
'cos_span', "cos"."span",
'cos_x', "cos"."x",
'cos_cos', "cos"."cos",
'sin_job_id', "sin"."job_id",
'sin_size', "sin"."size",
'sin_span', "sin"."span",
'sin_x', "sin"."x",
'sin_sin', "sin"."sin"
)) as nested_pkg
from "cos", "sin"
where ...
group by ...
Здесь:
array_agg ... as packages
- получение массива с идентификаторами исходных пакетов (см. правило № 1);Официальная документация функции
array_agg
.Дополнительные разъяснения об использовании функции
array_agg
.'merge' as label
- произвольная метка пакета;"sin"
и"сos"
- имена виртуальных таблиц, которые соответствуют именам узлов, соединенные с входом SQL узла;"sin".*
и"cos.*
- имена столбцов (переменные соответствующих пакетов)(см. правило № 2);json_agg(json_build_object(...)) as nested_pkg
- формирование вложенных пакетов (см. правило № 3).Официальная документация функции
json_agg
.Официальная документация функции
json_build_object
.Дополнительные разъяснения об использовании функции
json_agg
.
SQL мастер
SQL мастер - используется для быстрого построения шаблона для SQL запроса.
Для вызова SQL мастера необходимо нажать на иконку на панели SQL узла
Структура:
Панели виртуальных таблиц
Название таблицы
Описание таблицы
Переключатель добавления таблицы в запрос
Выпадающее меню столбцов таблицы
- Тип столбца
- Имя и описание
- Переключатель добавления столбца в запрос
Результат - тип выходного пакета
- Плоский пакет - обычный пакет
- Вложенные пакеты - пакет, в которой добавлен переменная типа массив пакетов.
Псевдонимы столбцов - переключатель добавления псевдонимов столбцов в запросе
Имена таблиц в псевдонимах - использовать имена виртуальных таблиц при формировании псевдонимов столбцов в запросе
Кнопка "ПОСТРОИТЬ ЗАПРОС" - перегенерировать запрос
SQL запрос - редактор сгенерированного запроса
Кнопка "ЗАМЕНИТЬ" - заменить существующий запрос узла новым запросом
Кнопка "ДОБАВИТЬ" - добавить запрос к существующему запросу узла
Кнопка "ОТМЕНА" - выйти из мастера