Обзор DuckDB

Обзор

DuckDB — это аналитическая реляционная система управления базами данных, предназначенная для быстрой обработки данных и выполнения аналитических нагрузок.

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

DuckDB оптимизирован для выполнения аналитических запросов и может обрабатывать данные из локальных файлов и внешних источников данных.

Например, Airflow может использовать DuckDB для:

  • чтения данных из внешнего хранилища;

  • выполнения SQL-запросов непосредственно над данными в формате Parquet и другими;

  • преобразования и агрегации наборов данных;

  • записи результатов аналитической обработки;

  • проверки доступности необходимых данных;

  • объединения данных из локальных файлов и внешних источников.

Сервис DuckDB в ADO предоставляет управляемую среду выполнения DuckDB для создания аналитических SQL-запросов. Сервис поставляется в виде среды выполнения командной строки и может использоваться в DAG и другими компонентами ADO. Сервис не является постоянно работающим демоном и не предоставляет сетевой эндпоинт или веб-интерфейс.

Сервис DuckDB предоставляет:

  • предварительно установленный DuckDB CLI на выбранных хостах ADO;

  • централизованное управление конфигурацией через ADCM;

  • интеграцию с внешними источниками данных и системами хранения через расширения DuckDB;

  • интеграцию с Airflow через провайдер DuckDB;

  • общую среду выполнения DuckDB и конфигурацию.

Архитектура

DuckDB использует внутрипроцессную архитектуру. При отправке запроса в DuckDB CLI механизм DuckDB выполняет разбор, связывание, построение плана, оптимизацию и выполнение запроса в рамках одного процесса.

Основные этапы обработки запроса:

  • Парсер — преобразует SQL-запрос во внутреннее представление. На этом этапе DuckDB еще не сопоставляет таблицы и столбцы с объектами базы данных и не определяет типы данных.

  • Binder — сопоставляет таблицы и столбцы с использованием каталога, определяет типы данных и извлекает агрегатные функции и оконные функции.

  • Логический планировщик — создает логическое дерево запроса на основе связанного запроса.

  • Оптимизатор — преобразует логическое дерево запроса в оптимизированный план запроса. Среди прочего, DuckDB может упрощать выражения, перемещать фильтры ближе к источнику данных (filters pushdown), изменять порядок соединений и устранять общие подвыражения.

  • Механизм сопоставления привязки столбцов — сопоставляет ссылки на столбцы с их позициями в структурах данных, используемых при выполнении запроса.

  • Генератор физического плана — преобразует оптимизированный логический план в дерево физических операторов.

  • Механизм выполнения — выполняет физические операторы и формирует результат запроса. DuckDB использует векторизованное выполнение и обрабатывает данные блоками.

DuckDB может работать как с файлами базы данных .duckdb, так и с данными, к которым осуществляется прямой доступ из внешних источников. Механизм расширений предоставляет поддержку дополнительных форматов данных, систем хранения и интеграций.

Компоненты

Сервис DuckDB включает компонент DuckDB CLI, который предоставляет среду выполнения DuckDB в командной строке, используемую для выполнения SQL-запросов.

ADCM устанавливает DuckDB CLI на выбранных хостах по пути /usr/bin/duckdb. Исполняемый файл является оболочкой ADO, которая применяет конфигурацию сервиса перед запуском DuckDB CLI.

Сервис DuckDB использует следующие конфигурационные файлы:

  • /etc/duckdb/conf/duckdb-env.sh — определяет среду DuckDB и пути к установке DuckDB, расширениям и внешним средам выполнения.

  • /etc/duckdb/conf/duckdb-conf.sql — содержит глобальную конфигурацию DuckDB в формате SQL.

Обработка запросов

Запросы DuckDB в ADO выполняются локально на хосте, на котором установлен DuckDB CLI.

Процесс выполнения запроса выглядит следующим образом:

  1. Пользователь или приложение отправляет SQL-запрос DuckDB.

  2. Оболочка DuckDB CLI запускает среду выполнения DuckDB.

  3. Оболочка применяет переменные окружения и глобальную конфигурацию SQL.

  4. DuckDB выполняет разбор и связывание запроса.

  5. DuckDB создает логический план запроса и применяет оптимизацию запроса.

  6. Оптимизированный логический план преобразуется в физический план выполнения.

  7. DuckDB выполняет физические операторы с использованием векторизованного механизма выполнения.

  8. Сервис возвращает результат выполнения запроса.

Провайдер DuckDB использует тот же исполняемый файл /usr/bin/duckdb для DAG . Провайдер выполняет SQL через DuckDB CLI и предоставляет доступ к выполнению через стандартный интерфейс Airflow.

Провайдер включает:

  • DuckDBHook — для выполнения SQL через среду выполнения DuckDB;

  • DuckDBOperator — для выполнения SQL, заданного непосредственно в DAG, или SQL-файлов в задачах DAG;

  • DuckDBSqlSensor — для ожидания, пока запрос DuckDB не вернет валидное значение.

Соединение DuckDB в Airflow может определять путь к базе данных, альтернативный исполняемый файл DuckDB и дополнительные параметры CLI. Настройки уровня оператора могут переопределять значения уровня соединения, если это предусмотрено.

Интеграция с сервисами ADO

Основная интеграция выполняется с Airflow. Воркеры Airflow могут использовать сервис DuckDB для выполнения аналитических SQL-запросов в рамках рабочих процессов DAG. Это позволяет включать операции DuckDB в конвейеры обработки данных без ручного вызова CLI через BashOperator.

DuckDB также может получать доступ к данным, хранящимся за пределами локальных файлов базы данных, через поддерживаемые расширения. В зависимости от установленных расширений и их конфигурации DuckDB могут работать с внешним объектным хранилищем и платформами данных, включая S3-совместимые хранилища, Arenadata Hyperwave (ADH), HDFS, Ozone и Hive Metastore.

Конфигурация

Сервис DuckDB настраивается через ADCM. Конфигурация включает среду DuckDB, глобальные настройки SQL, ограничения ресурсов, параметры хранения и ввода-вывода, настройки расширений, параметры совместимости с SQL, а также настройки выполнения и оптимизации.

Полный список доступных параметров приведен в статье Конфигурационные параметры DuckDB.

Провайдер DuckDB для Airflow

DuckDB CLI доступен после установки компонента DuckDB на хосте по адресу:

$ /usr/bin/duckdb

CLI можно использовать непосредственно на хосте или через компоненты ADO, интегрированные с DuckDB.

В Airflow для выполнения SQL-запросов в DAG через DuckDB используйте провайдер DuckDB. Провайдер использует DuckDB CLI в качестве серверной части выполнения и применяет ту же среду DuckDB и глобальную конфигурацию.

Более подробно о провайдере читайте в статье Провайдер DuckDB.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней