Об этом проекте

duckbridge представляет собой плагин-коннектор для Trino, который позволяет выполнять SQL-запросы к базам данных DuckDB — либо к встроенным файлам, либо к удаленным серверам, использующим протокол Quack RPC — с пробросом проекций, доменных предикатов, LIMIT/ORDER BY … LIMIT и широкого спектра скалярных функций. В отличие от типичных коннекторов на базе JDBC, duckbridge переносит поддерживаемые операции в DuckDB, а не извлекает данные в Trino для вычисления, и обеспечивает корректность, проверяя, что DuckDB вычисляет выражения идентично Trino (включая NULL, Unicode и правила даты/часового пояса). Коннектор упакован как стандартный плагин Trino для развертывания на координаторе и воркерах. **Ключевые особенности:** - **Связанность:** Встроенный DuckDB через JDBC (`jdbc:duckdb:`) или удаленный DuckDB через протокол Quack (`jdbc:quack://`). Удаленные серверы просто запускают `CALL quack_serve(…)`; установка на стороне коннектора не требуется. - **Проброс (Pushdown):** Проброс проекций и предикатов всегда включен. LIMIT, TopN и большой каталог скалярных функций пробрасываются как нативный SQL DuckDB. Небольшой набор функций (например, ICU case folding, криптографические хеши), которые DuckDB не может реализовать нативно, поддерживается опциональным расширением DuckDB `trino_parity`. - **Режимы проброса строк:** Конфигурируемый параметр управляет тем, как обрабатываются строковые предикаты — от отсутствия проброса (`NULL_ONLY`) до полного проброса с проверкой во время выполнения (`PARITY`). Режим `PARITY` по умолчанию проверяет бинарную сортировку DuckDB и доступность расширений при первом подключении, выдавая ошибку при обнаружении расхождений. - **Расширение:** Расширение `trino_parity` опубликовано в репозитории community-extensions DuckDB. Для встроенного режима подписанные бинарные файлы для Linux включены в релиз; на других платформах вы можете установить его один раз или запустить в режиме `GUARDED`. Удаленные серверы должны загружать расширение при запуске (или предоставить путь на стороне сервера). - **Опциональное сканирование данных:** Экспериментальные табличные функции для наборов данных Lance и файлов Vortex, включая векторный, полнотекстовый и гибридный поиск, могут быть включены для каждого каталога. - **Динамическое управление каталогами:** Каталоги могут быть созданы во время выполнения с помощью `CREATE CATALOG … USING duckbridge`, если в Trino включено динамическое управление каталогами. - **Маппинг типов:** Безпотерьное отображение типов DuckDB, включая UUID, `TIMESTAMPTZ`, `UBIGINT` (как `DECIMAL(20,0)`) и `VARBINARY`. Неподдерживаемые типы, такие как `HUGEINT`, отклоняются. Duckbridge разработан для Trino 483 и использует DuckDB 1.5.5. Проект включает экспериментальный columnar-движок на базе Arrow для прямой передачи данных, а будущие планы включают проброс агрегатов и вариант, совместимый с Doris.