Прочитать таблицу из БД | Read Table DB V3

Нода позволяет осуществлять чтение таблиц из Базы данных.

Подробнее о Denvic Visual Transformer (DVT)

Источником может быть: PostgreSQL, Clickhouse, MySQL, Oracle, Microsoft SQL

С помощью данной ноды можно:

  1. Выбрать таблицу для чтения данных из БД;

  2. Указать поле индекса (сортировки датафрейма);

  3. Указать сегментирование. Сегментация используется для того, чтобы паралельно в несколько потоков, прочитать в датафрейм большой запрос, порезав его на «сегменты».

Начиная с релиза 1.10.3 DVT, на замену Read Table from DB V2 сделана третья версия данной ноды. Здесь было улучшено партицирование чтения: ридер из таблиц/запросов может читать данные из СУБД в любом объеме за счет распараллеливания чтения в разрезе «сегментов-партиций».

Начиная с релиза 1.14.0 DVT, в ноду Read Table from DB V3 добавлена поддержка системных переменных, встроенных запросов, улучшено партицирование и группировка.

Комментарии к таблице и колонкам

В предварительном релизе 1.22.1-rc1 добавлена поддержка комментариев из базы данных.

При выборе колонок рядом с именами полей отображаются их комментарии из исходной таблицы БД. Используйте эти описания, чтобы определить назначение полей и выбрать нужные данные для загрузки.

  1. Откройте настройки Read Table DB V3 и выберите базу данных и таблицу.

  2. Перейдите на шаг «Колонки» в левой панели.

  3. В списке «Выбор колонок» прочитайте описания справа от имён полей, после тире. Например, на скриншоте для Nomenklatura показан комментарий «Номенклатура», а для Sklad — «Склад».

  4. Отметьте колонки, которые нужно прочитать, и нажмите «Сохранить» после завершения настройки ноды.

Комментарии колонок исходной таблицы в настройках Read Table DB V3

На скриншоте справа открыт «Предпросмотр» на вкладке «Схема»: здесь видны имена колонок, типы и признаки NULL. Комментарии отображаются в центральном списке «Выбор колонок».

Read Table DB V3 сохраняет комментарии исходной таблицы и колонок в метаданных выходного датафрейма. Они также сохраняются при восстановлении результата из кэша. Описания колонок можно затем использовать при настройке комментариев целевой таблицы в Write DataFrame to DB V4.

Для ранее настроенных проектов обновите метаданные или повторно выполните ноду, чтобы получить комментарии источника.

Чтение комментариев поддержано для PostgreSQL, MySQL/MariaDB, SQL Server, Oracle и ClickHouse. Доступность описаний зависит от возможностей источника и наличия комментариев в базе данных.

Пример использования ноды

Подключение к ClickHouse и чтение таблицы

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

В появившемся окне производим настройку.

При успешном подключении к предыдущей ноде, оно автоматически отобразится здесь в поле «Соединение» (1). Далее выбираем нужную таблицу из базы данных — «Выбор таблицы» (2) и в поле «Выбор колонок» по умолчанию будут отображены все колонки выбранной ранее таблицы, при необходимости Вы можете сбросить фильтр и вручную выбрать нужные колонки (3).

Особенности настройки сегментации

Перейдем к настройкам параметров в разделе «Параметры». Выберем «Колонку сегментации». Сегментирование необходимо для чтения больших таблиц, таким образом таблица будет разбита на части-сегменты и загрузка будет происходить быстрее.

Сегментация по текстовому полю (String)

Рассмотрим настройку сегментации на примере текстового поля «Наименование товара». В поле «Кастомная группировка для сегментации» предлагаются следующие варианты:

  • Hash. Группировка по хэш-функции подходит для nullable/строковых/сложных ключей. При выборе данного варианта программа автоматически выберет на какое количество сегментов делить весь запрос. При этом Вы можете самостоятельно указать в поле «Buckets» свое количество сегментов.

  • Prefix. Группировка по первым N-символам строки. В поле «Length» указывается N-количество символов.

  • Explicit Values. Значение для группировки задается вручную. При выборе данного варианта в поле «Values» в квадратных скобках необходимо перечислить нужные значения для сегментирования. Остальные значения опционально группируются в колонку «Other» при установке значения «True» в соответствующем поле.

Сегментация по полю формата DateTime

Рассмотрим настройку сегментации на примере поля «Дата продажи» (формат DateTime). В поле «Кастомная группировка для сегментации» предлагаются следующие варианты:

  • Range. Программа самостоятельно выбирает количество диапазонов.

  • Hash. Группировка по хэш-функции подходит для nullable/строковых/сложных ключей. При выборе данного варианта программа автоматически выберет на какое количество сегментов делить весь запрос. При этом Вы можете самостоятельно указать в поле «Buckets» свое количество сегментов.

  • Ranges. Группировка по явным диапазонам [начало, конец]. Для дат используйте ISO формат "2024-01-01"

  • Step. Группировка по интервалам равного размера (для datetime: шаг в секундах, для date: шаг в днях).

  • Granularity. Группировка по календарным единицам: час, день, неделя, месяц, год. В поле «Granularity» можно выбрать по какому параметру будут объединены данные.

Сегментация по числовому значению (Int)

Рассмотрим настройку сегментации по числовому значению на примере поля «ID Товара». В поле «Кастомная группировка для сегментации» предлагаются следующие варианты:

  • Range. Программа самостоятельно выбирает количество диапазонов.

  • Hash. Группировка по хэш-функции подходит для nullable/строковых/сложных ключей. При выборе данного варианта программа автоматически выберет на какое количество сегментов делить весь запрос. При этом Вы можете самостоятельно указать в поле «Buckets» свое количество сегментов.

  • Quantiles. Разбивает данные на k-квантилей, необходимое количество частей указывается в поле «K».

  • Percentiles. Аналогично квантилям, но использует значения от 0 до 1 (исключая границы)

  • Ranges. Группировка по явным диапазонам [начало, конец]. Для дат используйте ISO формат "2024-01-01"

  • Step. Группировка по интервалам равного размера (для datetime: шаг в секундах, для date: шаг в днях).

Примечание:

При возникновении ошибки при выборе варианта группировки для сегментирования рекомендуется заполнить поле «Количество партиций».

После настройки ноды нажимаем кнопку «Сохранить».

Проверка полученных данных

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

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

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

Автоматическое разбиение и выбор колонки

Партиция — часть строк, читаемая отдельным запросом. При диапазонном разбиении нода использует выбранную колонку либо первичный ключ, оценивает диапазон значений, число строк и размер строки и подбирает количество частей. Другие варианты группировки описаны выше.

Целевой размер части — ориентир: реальный размер зависит от распределения строк и выбранной группировки. Например, для 10 миллионов строк примерно по 400 байт исходные данные занимают около 4 ГБ; с накладными расходами оценка может достигать 7 ГБ. При ориентире 16 МБ это порядка 450 частей примерно по 22 000 строк.

Для диапазонов выбирайте индексированную колонку с равномерным распределением. Если 90% строк относятся к последнему месяцу, разбиение по дате может создать одну большую часть и много маленьких. Числовой ключ с более равномерным распределением может оказаться лучше. Без подходящего индекса каждый запрос может просматривать значительную часть таблицы.

Обычно оставляйте автоматический расчёт количества партиций. Для маленьких таблиц оправдано ручное задание количества частей. Лимит строк удобен для пробного запуска на небольшой выборке.

Количество партиций и количество потоков — разные параметры: первое задаёт разбиение данных, второе — число частей, обрабатываемых одновременно. См. параллельную обработку и производительность.

Служебное чтение и метаданные

При построении Dask-датафрейма нода запрашивает максимум одну строку для подготовки метаданных. Это отличается от отдельного режима получения метаданных: в нём структура таблицы и комментарии считываются через SQLAlchemy Inspector.

Для автоматического разбиения могут выполняться дополнительные запросы, в том числе выборка до 1000 строк для оценки размера строки. Ограничение одной строкой относится к подготовке метаданных Dask, а не ко всем служебным запросам.

Основная обработка набора выполняется по накопленному плану; см. ленивые вычисления и служебные запросы.