Инструменты и интеграции сообщества
Помимо СУБД и аналитических платформ (урок 2), экосистема DataFusion включает инструменты для разработчиков, интеграционные стандарты и проекты сообщества.
datafusion-dft: CLI, TUI и сервер
datafusion-dft (DataFusion Desktop/Terminal) — «batteries-included» инструмент для работы с DataFusion. Три режима:
Возможности
datafusion-dft — не просто обёртка над SessionContext. Инструмент добавляет:
- Автоматическое определение формата: Parquet, CSV, JSON, Avro — по расширению файла
- S3/GCS/Azure Blob: чтение из облачных хранилищ
- Результаты в таблице/JSON/CSV: выбор формата вывода
- История запросов: сохранение и поиск
- Flight SQL сервер: подключение BI-инструментов (DBeaver, Tableau, Superset)
# Установка
cargo install datafusion-dft
# CLI: запрос к Parquet-файлу
dft -c "SELECT count(*), avg(price) FROM 'sales.parquet' WHERE year = 2025"
# TUI: интерактивный режим с автодополнением
dft
# Server: Flight SQL на порту 50051
dft serve --port 50051
datafusion-dft — отличный инструмент для быстрого исследования данных. Вместо написания Rust-программы или Python-скрипта можно выполнить SQL-запрос к Parquet-файлу одной командой.
Для кого
- Аналитики: ad-hoc запросы к файлам без настройки СУБД
- Разработчики: прототипирование SQL-логики перед встраиванием в приложение
- DevOps: проверка Parquet/CSV-данных в пайплайнах
dbt Fusion: нативный SQL engine для dbt
dbt (data build tool) — стандарт в data engineering для SQL-трансформаций. dbt Fusion — новый engine на Rust с нативным пониманием SQL, в отличие от классического dbt, который делегирует выполнение целевой СУБД.
Что даёт DataFusion в dbt Fusion
- Статический анализ SQL: DataFusion парсит SQL и строит план, что позволяет dbt Fusion обнаруживать ошибки до отправки в СУБД
- Локальное выполнение тестов: unit-тесты моделей выполняются в DataFusion без обращения к production-хранилищу
- Оптимизация pipeline: DataFusion анализирует зависимости между моделями и строит оптимальный DAG выполнения
dbt Fusion — коммерческий продукт компании dbt Labs. DataFusion используется как компонент, но сам dbt Fusion не является open-source. Тем не менее, это значимый сигнал adoption: ведущая компания в data engineering выбрала DataFusion как основу для следующего поколения движка.
Auron: ускоритель Spark и Flink
Auron — проект, ускоряющий существующие Spark и Flink нагрузки через DataFusion, по аналогии с Comet (модуль 7).
Auron расширяет идею Comet на Flink — платформу, для которой нативных DataFusion-ускорителей раньше не было. Подробное сравнение Comet с другими стратегиями распределения — в уроке по выбору стратегии.
Auron — более ранний проект, чем Comet. Для production-использования с Spark рекомендуется Comet (0.14.0). Auron интересен как эксперимент по ускорению Flink через DataFusion.
Substrait: кросс-системный обмен планами
Substrait — стандарт для сериализации query plans, не привязанный к конкретному движку. DataFusion поддерживает Substrait для обмена планами с другими системами.
Зачем Substrait
Без Substrait каждая пара систем изобретает свой формат обмена. С Substrait:
- Планировщик одной системы строит оптимальный план
- Executor другой системы выполняет этот план
- Формат стандартизирован — Protobuf-схема, поддерживаемая комьюнити
Практические сценарии:
- dbt Fusion строит план, Spark выполняет его
- Аналитический инструмент генерирует план, DataFusion или DuckDB выполняет
- Федеративная система передаёт фрагмент плана удалённому движку
// DataFusion → Substrait (produce)
use datafusion_substrait::logical_plan::producer;
let plan = ctx.sql("SELECT a, sum(b) FROM t GROUP BY a").await?.into_optimized_plan()?;
let substrait_plan = producer::to_substrait_plan(&plan, &ctx)?;
// Сериализация в Protobuf
let bytes = substrait_plan.encode_to_vec();
// Substrait → DataFusion (consume)
use datafusion_substrait::logical_plan::consumer;
let restored_plan = consumer::from_substrait_plan(&ctx, &substrait_plan).await?;
Поддержка Substrait в DataFusion находится в crate datafusion-substrait. Покрытие операторов постоянно растёт — базовые Scan/Filter/Project/Aggregate/Join поддерживаются, но некоторые сложные конструкции (window functions, lateral joins) могут быть ещё не реализованы.
WASM: DataFusion в браузере
DataFusion компилируется в WebAssembly (WASM), что позволяет запускать SQL-запросы прямо в браузере или в Edge-функциях.
WASM-компиляция DataFusion — одно из направлений GSoC (Google Summer of Code) 2025. Основные задачи:
- Компиляция
datafusioncrate вwasm32-wasitarget - Асинхронный I/O через WASI filesystem API
- Оптимизация размера WASM-модуля (исключение неиспользуемых features)
WASM-компиляция DataFusion пока на стадии активной разработки. Для production-использования в браузере на данный момент более зрелой альтернативой является DuckDB-WASM. Но направление перспективное — DataFusion в WASM откроет уникальные сценарии благодаря расширяемости (кастомные UDF и TableProvider в браузере).
Contrib-репозитории
Экосистема DataFusion организована в несколько уровней:
Ключевые contrib-проекты
| Репозиторий | Назначение |
|---|---|
datafusion-contrib/datafusion-dft | CLI/TUI/Server для DataFusion (описан выше) |
apache/datafusion-sqlparser-rs | SQL-парсер, используемый DataFusion (и PostgreSQL-совместимые проекты) |
apache/datafusion-substrait | Substrait producer/consumer (описан выше) |
datafusion-contrib/datafusion-objectstore-* | Интеграция с S3, GCS, Azure Blob |
datafusion-contrib/datafusion-table-providers | Готовые TableProvider для PostgreSQL, MySQL, SQLite, DuckDB, ClickHouse, ODBC, FlightSQL |
datafusion-contrib/datafusion-federation | Cross-engine query federation с pushdown SQL/Substrait во внешние движки |
datafusion-contrib/datafusion-functions-json | JSON-функции (jsonb_extract, json_array и др.) |
datafusion-table-providers — готовые провайдеры данных
datafusion-contrib/datafusion-table-providers — отдельный субпроект, реализующий TableProvider для популярных систем хранения. Вместо того чтобы писать свой TableProvider (как в модуле 5), можно подключить готовые: PostgreSQL, MySQL, SQLite, DuckDB, ClickHouse, FlightSQL, ODBC. Большинство этих провайдеров изначально были донатированы Spice AI и теперь поддерживаются сообществом. Каждый провайдер реализует scan + filter pushdown в нативный SQL-диалект соответствующей СУБД.
// Пример: PostgreSQL TableProvider
use datafusion_table_providers::postgres::PostgresTableFactory;
let factory = PostgresTableFactory::new(connection_pool);
let provider = factory.table_provider("my_table".into()).await?;
ctx.register_table("orders", provider)?;
datafusion-federation — cross-engine federation
datafusion-contrib/datafusion-federation — отдельный crate, дополняющий table-providers. Federation позволяет DataFusion делегировать часть query plan удалённому движку (Postgres, MySQL, ClickHouse, ещё одна DataFusion-инстанция) и склеивать результаты локально. Каждый FederationProvider определяет собственное оптимизаторное правило, которое анализирует, какой sub-plan можно «протолкнуть» вниз — push down целиком JOIN между таблицами одной СУБД, оставив верхние агрегации DataFusion. Поддерживается передача SQL и Substrait. Это де-факто стандартный путь к multi-source SQL в DataFusion 2026.
Связка table-providers + federation — рекомендуемый стек для построения federated query layer без написания собственного planner-а.
Contrib-экосистема даёт возможность переиспользовать готовые компоненты вместо написания с нуля. Если вы строите систему на DataFusion — проверьте contrib-репозитории перед тем, как реализовывать свой TableProvider или UDF.
Полная картина инструментов
Итоги
- datafusion-dft: CLI/TUI/Server для интерактивной работы с DataFusion и Flight SQL
- dbt Fusion: нативный Rust-движок для dbt, использующий DataFusion для парсинга, анализа и выполнения SQL
- Auron: ускорение Spark/Flink через DataFusion (ранняя стадия, ср. с Comet в модуле 7)
- Substrait: стандарт обмена query plans между системами, DataFusion поддерживает produce/consume
- WASM: DataFusion компилируется в WebAssembly для браузера и Edge-функций (в разработке)
- Contrib-экосистема: готовые TableProvider, UDF, object store integration для переиспользования
- datafusion-table-providers + datafusion-federation — отдельные субпроекты для multi-source SQL и cross-engine pushdown