Learning Platform
Глоссарий Troubleshooting
Урок 10.03 · 14 мин
Средний
datafusion-dftdbt FusionAuronSubstraitWASMcontribcommunity tools

Инструменты и интеграции сообщества

Помимо СУБД и аналитических платформ (урок 2), экосистема DataFusion включает инструменты для разработчиков, интеграционные стандарты и проекты сообщества.

datafusion-dft: CLI, TUI и сервер

datafusion-dft (DataFusion Desktop/Terminal) — «batteries-included» инструмент для работы с DataFusion. Три режима:

datafusion-dft: три режима
CLIРежим командной строки — запуск SQL-запросов к файлам из скриптов и CI-пайплайнов
TUIИнтерактивный терминал с автодополнением — удобное исследование данных
ServerFlight SQL сервер — подключение BI-инструментов (DBeaver, Tableau, Superset) через JDBC

Возможности

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
TIP

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, который делегирует выполнение целевой СУБД.

dbt Classic vs dbt Fusion
dbt ClassicКлассический dbt — компилирует Jinja-шаблоны в SQL и делегирует выполнение целевой СУБД
dbt FusionNативный Rust engine — DataFusion для парсинга SQL, статического анализа и локального выполнения тестов

Что даёт DataFusion в dbt Fusion

  • Статический анализ SQL: DataFusion парсит SQL и строит план, что позволяет dbt Fusion обнаруживать ошибки до отправки в СУБД
  • Локальное выполнение тестов: unit-тесты моделей выполняются в DataFusion без обращения к production-хранилищу
  • Оптимизация pipeline: DataFusion анализирует зависимости между моделями и строит оптимальный DAG выполнения
NOTE

dbt Fusion — коммерческий продукт компании dbt Labs. DataFusion используется как компонент, но сам dbt Fusion не является open-source. Тем не менее, это значимый сигнал adoption: ведущая компания в data engineering выбрала DataFusion как основу для следующего поколения движка.

Auron — проект, ускоряющий существующие Spark и Flink нагрузки через DataFusion, по аналогии с Comet (модуль 7).

Auron vs Comet
CometSpark-плагин от Apple — columnar-to-native выполнение, production-ориентирован (v0.14)
AuronУскоритель и для Spark, и для Flink через DataFusion runtime — ранняя стадия разработки

Auron расширяет идею Comet на Flink — платформу, для которой нативных DataFusion-ускорителей раньше не было. Подробное сравнение Comet с другими стратегиями распределения — в уроке по выбору стратегии.

WARNING

Auron — более ранний проект, чем Comet. Для production-использования с Spark рекомендуется Comet (0.14.0). Auron интересен как эксперимент по ускорению Flink через DataFusion.

Substrait: кросс-системный обмен планами

Substrait — стандарт для сериализации query plans, не привязанный к конкретному движку. DataFusion поддерживает Substrait для обмена планами с другими системами.

Substrait: обмен планами между системами
DataFusionDataFusion как producer — сериализует LogicalPlan в Substrait Protobuf
produce
Substrait Plan (Protobuf)Стандартизированное представление query plan — Scan, Filter, Aggregate в Protobuf
consume
Другая системаConsumer — любая система, понимающая Substrait, может выполнить план
Substrait PlanProtobuf-схема — стандарт описания query plans для обмена между движками

Зачем 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?;
NOTE

Поддержка Substrait в DataFusion находится в crate datafusion-substrait. Покрытие операторов постоянно растёт — базовые Scan/Filter/Project/Aggregate/Join поддерживаются, но некоторые сложные конструкции (window functions, lateral joins) могут быть ещё не реализованы.

WASM: DataFusion в браузере

DataFusion компилируется в WebAssembly (WASM), что позволяет запускать SQL-запросы прямо в браузере или в Edge-функциях.

DataFusion WASM: сценарии
БраузерSQL-аналитика прямо в клиентском приложении — Parquet-файлы загружаются через HTTP
Edge FunctionsSQL-обработка на edge (Cloudflare Workers, Deno Deploy) — минимальная latency

WASM-компиляция DataFusion — одно из направлений GSoC (Google Summer of Code) 2025. Основные задачи:

  • Компиляция datafusion crate в wasm32-wasi target
  • Асинхронный I/O через WASI filesystem API
  • Оптимизация размера WASM-модуля (исключение неиспользуемых features)
TIP

WASM-компиляция DataFusion пока на стадии активной разработки. Для production-использования в браузере на данный момент более зрелой альтернативой является DuckDB-WASM. Но направление перспективное — DataFusion в WASM откроет уникальные сценарии благодаря расширяемости (кастомные UDF и TableProvider в браузере).

Contrib-репозитории

Экосистема DataFusion организована в несколько уровней:

Уровни экосистемы DataFusion
apache/datafusion (ядро)Основной репозиторий — SQL-парсер, оптимизатор, executor; строгий review и стабильный API
apache/datafusion-* (подпроекты)Ballista, Comet, Ray, Python — собственные релизы под Apache governance
datafusion-contrib/* (сообщество)Community-проекты — менее строгий review, экспериментальные расширения и утилиты

Ключевые contrib-проекты

РепозиторийНазначение
datafusion-contrib/datafusion-dftCLI/TUI/Server для DataFusion (описан выше)
apache/datafusion-sqlparser-rsSQL-парсер, используемый DataFusion (и PostgreSQL-совместимые проекты)
apache/datafusion-substraitSubstrait 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-federationCross-engine query federation с pushdown SQL/Substrait во внешние движки
datafusion-contrib/datafusion-functions-jsonJSON-функции (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
Категории инструментовПолная картина инструментов экосистемы DataFusion по функциональным категориям

Итоги

  • 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

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 5. datafusion-dft поддерживает три режима работы. Какой режим позволяет подключить BI-инструменты (DBeaver, Tableau, Superset) к DataFusion?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4