Прочитать SQL-запрос из БД V3 | Read Query DB
В релизе 1.15.0 DVT в настройки ноды добавлено контекстное автодополнение SQL, оно учитывает структуру базы и подсказывает таблицы, колонки, ключевые слова и сниппеты с учётом диалекта БД и алиасов в запросе.


Пример использования ноды
Для использования ноды Read Query from DB необходимо соединить ее с нодой подключения Get Existing DB Connection, а затем настроить ноду Read Query from DB: для этого нажимаем
в левом верхнем углу.

В появившемся окне производим настройку. Обратите внимание, что настройка данной ноды происходит в два этапа:
ввод SQL-запроса;
настройка сегментации (она используется для того, чтобы параллельно в несколько потоков, прочитать в датафрейм большой запрос, разбив его на части — «сегменты»).
Ввод SQL-запроса
При успешном подключении к предыдущей ноде, оно автоматически отобразится здесь в поле «Connection string» (1), а в поле ниже необходимо написать текст SQL-запрос (2). Затем нажимаем «Продолжить» (3).

Настройка сегментации
Настройка параметров сегментации здесь такая же, как и в ноде ReadTable from DB: выбираем колонку (в данном случае, «ID товара»), по которой будет произведена сегментация, указываем для нее вариант группировки ((в данном случае мы используем вариант группировки «Range»). Обратите внимание, что поле «Partition column» является обязательным для заполнения, а поле «Partition grouping» — опциональным, если Вы не укажете в нем вариант группировки, то она будет выбрана автоматически. Нажимаем «Сохранить».

Обычно оставляйте поле «npartitions» пустым для автоматического расчёта. Для маленьких таблиц количество партиций оправдано задать вручную. Поле «мах_row_per_partition» оставляйте пустым.

Проверка полученных данных
Теперь проверим какие данные в итоге получились. Для этого включаем «Кэширование» в ноде (кликаем правой кнопкой мыши на ноду и активируем соответствующий переключатель), после чего нажимам «Запустить с этой ноды».

После выполнения сценария по правой кнопке мыши снова заходим в контекстное меню ноды и открываем датафреймы («Показать датафреймы»).

Наша таблица загрузилась.

Использование переменных в запросе
Вместо постоянного значения в условии можно использовать переменную:
SELECT id, amount FROM sales WHERE amount >= {{ project_variables.min_amount }}
Создайте числовую переменную проекта min_amount, например со значением 1000. Для значения, полученного от другой ноды, используйте {{ input_variables.min_amount }} и передайте переменные через VARIABLE-порт.
После настройки SQL укажите параметры сегментации как для обычного запроса. Колонка сегментации должна присутствовать в результате запроса; в этом примере ею может быть id, если она подходит для вашего источника.
Имена таблицы и колонок замените на свои. Правила подстановки строк и другие примеры приведены в инструкции по переменным.
Партиции и нагрузка
Каждая партиция читается отдельным запросом. Для разбиения по диапазонам выбирайте индексированную колонку с равномерным распределением значений. Перекос значений может привести к разным размерам частей и долгому выполнению одной из них.
Рекомендации по разбиению приведены в Read Table from DB V3. Число одновременно обрабатываемых частей задаётся количеством потоков проекта; подробнее — параллельная обработка и производительность.
Служебное чтение и метаданные
При построении Dask-датафрейма нода запрашивает максимум одну строку, используя LIMIT 1 или аналог СУБД.
В отдельном режиме получения метаданных применяется другой механизм: LIMIT 0, TOP 0 или WHERE 1=0, а для ClickHouse — DESCRIBE. Он позволяет получить структуру результата без чтения строк данных.
Для подготовки автоматического разбиения возможны дополнительные запросы, включая выборку до 1000 строк для оценки размера строки. Поэтому ограничение LIMIT 1 не относится ко всем служебным запросам.
Подробнее: ленивые вычисления и служебные запросы.