SQL

Виртуальная таблица

Виртуальная таблица - таблица со всеми пакетами, которые пришли в SQL узел из определенного предыдущего узла.

Имя таблицы соответствует имени этого предыдущего узла.

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

Если в SQL узел входят пакеты из разных узлов, то для каждого узла будет собственная виртуальная таблица.

Запрос SQL узла

SQL узел должен содержать SQL запрос выбора данных. Общие правила создания запроса должны соответствовать требованиям использования SQL команды (SELECTopen in new window) на диалекте СУБД PostgreSQLopen in new window.

Выбор данных производится из виртуальных таблиц.

Используйте SQL мастер для создания запроса.

Правила формирования запроса

  1. Результат запроса должен возвращать столбец с массивом идентификаторов пакетов, которые участвовали в формировании результата.

    Массив используется в служебных целях (не отображается пользователю при обработке пакета в скрипте расчетного узла ) для формирования истории создания пакета и для идентификации уникальности результата запроса.

  2. Остальные столбцы результата запроса преобразуются в переменные типа поле или файл или массив пакетов пакета. Тип переменной задается в выходной спецификации SQL узла.

  3. Если столбец должен представлять переменную типа массив пакетов, то он должен формироваться как JSON массив JSON объектов. Для каждого JSON объекта создается новый "вложенный" пакет, а каждое поле JSON объекта преобразуется в переменную типа поле или файл "вложенного" пакета. Тип переменной задается в выходной спецификации SQL узла.

Пример формирования простого пакета

SQL example

Объединение двух пакетов по одинаковому полю.

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);

    Официальная документацияopen in new window на функцию 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 ...

Здесь:

SQL мастер

SQL мастер - используется для быстрого построения шаблона для SQL запроса.

Для вызова SQL мастера необходимо нажать на иконку на панели SQL узла

SQL Master

Структура:

  • Панели виртуальных таблиц

    • Название таблицы

    • Описание таблицы

    • Переключатель добавления таблицы в запрос

    • Выпадающее меню столбцов таблицы

      • Тип столбца
      • Имя и описание
      • Переключатель добавления столбца в запрос

      SQL Master

  • Результат - тип выходного пакета

  • Псевдонимы столбцов - переключатель добавления псевдонимов столбцов в запросе

  • Имена таблиц в псевдонимах - использовать имена виртуальных таблиц при формировании псевдонимов столбцов в запросе

  • Кнопка "ПОСТРОИТЬ ЗАПРОС" - перегенерировать запрос

  • SQL запрос - редактор сгенерированного запроса

  • Кнопка "ЗАМЕНИТЬ" - заменить существующий запрос узла новым запросом

  • Кнопка "ДОБАВИТЬ" - добавить запрос к существующему запросу узла

  • Кнопка "ОТМЕНА" - выйти из мастера