Перейти к основному содержимому

Компоненты движка dbt Fusion и то, как они сочетаются друг с другом

· 9 мин. чтения
Jason Ganz
Developer Experience at dbt Labs
Joel Labes
Senior Developer Experience Advocate at dbt Labs

Сегодня мы анонсировали движок dbt Fusion.

Fusion — это не какая‑то одна вещь. Это набор взаимосвязанных компонентов, которые вместе обеспечивают работу следующего поколения аналитической инженерии.

В этом посте мы разберём каждый элемент архитектуры Fusion, объясним, как они сочетаются друг с другом, и проясним, что именно доступно вам в зависимости от того, компилируете ли вы Fusion из исходного кода, используете наши готовые бинарные сборки или разрабатываете внутри продукта, построенного на dbt Fusion.

От движка на Rust до расширения VS Code, от новых адаптеров на базе Arrow до базовых технологий под лицензией Apache — мы подробно разберём, что делает каждый компонент, под какой лицензией он распространяется (о причинах см. сопутствующий пост Тристана), а также как вы можете начать использовать Fusion и принять участие уже сегодня.

Этот пост описывает состояние системы на момент, когда Fusion достигнет General Availability. О пути к GA читайте в этом посте.

Существует несколько способов получить доступ к движку dbt Fusion

Одно из ключевых отличий между движком dbt Fusion и dbt Core — язык реализации. Core написан на Python, Fusion — на Rust. Это важно не только из‑за прироста производительности, но и потому, что это создаёт для нас новый способ распространения функциональности в сообществе.

Чтобы распространять Python‑программу, необходимо распространять и её исходный код. Rust же — компилируемый язык, а значит мы можем делиться либо исходным кодом, либо только скомпилированными бинарными файлами, полученными из этого кода.

Это означает, что функции, которые по соображениям защиты интеллектуальной собственности раньше должны были оставаться полностью проприетарными, теперь могут широко распространяться в виде бинарных файлов. При этом существует и полностью source-available версия dbt Fusion, которая к моменту GA превзойдёт возможности dbt Core.

Какие варианты движка dbt Fusion существуют?

Source-available версия движка dbt Fusion

Тип артефакта: код

Где доступно: https://github.com/dbt-labs/dbt-fusion
(Примечание: на данный момент репозиторий содержит только код, необходимый для dbt parse и dbt deps — продолжение следует!)

Лицензия: ELv2

Это фундамент движка Fusion — код, который позволяет:

  • выполнять dbt seed/run/test/build
  • рендерить Jinja и строить DAG
  • подключаться к адаптерам, которые превращают ваш dbt‑проект в DDL и DML для хранилища данных
  • формировать артефакты вашего dbt‑проекта

Важно отметить: доступный сегодня бинарник, собранный самостоятельно, пока что умеет немного. К моменту выхода нового движка в General Availability его source-available компоненты превзойдут совокупные возможности dbt Core. Если вы — команда данных, использующая dbt Core, то простой запуск самостоятельно собранной версии dbt Fusion станет для вас чистым апгрейдом.

Этот репозиторий также будет включать код, необходимый для SQL Comprehension уровня 1 (возможность разбирать SQL в синтаксическое дерево).

При соблюдении трёх ограничений ELv2:

  • ✅ вы можете использовать бинарный файл в своих дата‑процессах без участия dbt Labs
  • ✅ вы можете просматривать и модифицировать код

Предсобранный бинарник движка dbt Fusion

Тип артефакта: предсобранный бинарный файл

Как получить доступ: скачать, следуя инструкциям здесь

Лицензия: ELv2

Когда вы скачиваете предсобранный бинарник, созданный dbt Labs, он включает:

  • всю функциональность Source-available версии Fusion
  • дополнительные возможности, основанные на проприетарном коде (например, SQL Comprehension уровня 2, необходимый для компиляции и типовой проверки SQL)

При соблюдении трёх ограничений ELv2:

  • ✅ вы можете использовать бинарник в своих дата‑процессах без участия dbt Labs
  • ❌ но вы не можете просматривать или изменять сам код

Подавляющему большинству существующих пользователей dbt Core, которые переходят на свободно распространяемые компоненты Fusion, стоит использовать именно бинарник, а не собирать его из исходного кода. У бинарника те же разрешения, но больше возможностей (и он избавляет вас от необходимости компиляции). Вы можете бесплатно использовать его внутри своей компании, даже если вы не являетесь клиентом dbt Labs.

Использование движка dbt Fusion по коммерческому соглашению

Тип артефакта: предсобранный бинарник и управляемый сервис

Где доступно: скачать бинарник и зарегистрироваться в сервисе

Лицензия: ELv2 (бинарник) и проприетарная (сервис)

Организации, имеющие коммерческое соглашение, получают доступ к ещё большему набору возможностей, при этом используя тот же самый публично распространяемый бинарник, о котором говорилось выше. Если вы хотите начать использовать платформенные функции, например dbt Mesh, всё, что нужно — это скачать конфигурационный файл. (Комментарий Джоэла: как человек, который последние пару лет совмещал dbt Cloud CLI и dbt Core, я не могу передать, насколько я этому рад.)

Разумеется, для предоставления платформенных возможностей, таких как State-Aware Orchestration, необходимы дополнительные облачные сервисы. Этот код является проприетарным и регулируется вашим соглашением с dbt Labs.

Другие элементы мозаики

Движок dbt Fusion — это главный герой, но лежащие в его основе технологии можно комбинировать самыми разными способами.

Расширение dbt для VS Code и Language Server

Тип артефакта: предсобранные бинарники

Как получить доступ: установить из VS Code marketplace

Лицензия: проприетарная

Расширение dbt для VS Code — один из первых продуктовых интерфейсов, построенных поверх Fusion. Оно не является частью Fusion, но работает на базе Fusion и входит в более широкое предложение платформы dbt (с щедрым бесплатным тарифом). В частности, расширение VS Code взаимодействует с ещё одним совершенно новым бинарником — dbt Language Server.

Language Server построен на подмножестве технологий, лежащих в основе расширенного движка Fusion. Например, он может быстро компилировать SQL и взаимодействовать с базами данных, но когда приходит время реально запускать модель, он передаёт управление dbt‑бинарнику.

Расширение VS Code взаимодействует с Language Server для понимания SQL и с бинарником Fusion для выполнения SQL.Расширение VS Code взаимодействует с Language Server для понимания SQL и с бинарником Fusion для выполнения SQL.

Authoring Layer dbt

Тип артефакта: определения JSON Schema

Где доступно: Git‑репозитории для входных файлов и выходных артефактов

Лицензия: Apache 2.0

Когда вы думаете о dbt, вы, скорее всего, представляете комбинацию движка (описанного выше) и Authoring Layer.

Authoring Layer включает всё необходимое для описания что именно представляет собой dbt‑проект: YAML‑спецификации, спецификации артефактов, команды и флаги CLI, а также сигнатуры макросов. Как пользовательский интерфейс dbt, authoring layer является общим как для Core, так и для Fusion, хотя движок Fusion не поддерживает ряд поведений и функций, объявленных устаревшими в более ранних версиях dbt Core.

Впервые мы публикуем серию канонических JSON‑схем, подкреплённых кодом dbt Core и Fusion, которые описывают допустимое содержимое различных YAML‑файлов dbt. Эти схемы распространяются под лицензией Apache 2.0 и будут особенно полезны для других инструментов, интегрирующихся с dbt‑проектами.

Это дополняет уже существующие JSON‑схемы, описывающие формат выходных артефактов dbt (например, manifest.json). По мере стабилизации метаданных Fusion (логирования и артефактов) на пути к GA мы будем обновлять опубликованные схемы.

Адаптеры движка dbt Fusion

Тип артефакта: исходный код

Где доступно: начальный код в репозитории dbt-fusion, дальнейшие дополнения — позже

Лицензия: Apache 2.0 (позже в этом году)

Адаптеры отвечают за две ключевые задачи:

  • знание того, как создавать корректные SQL‑команды (через макросы и материализации) для конкретной платформы данных
  • подключение к целевой платформе данных и отправку ей SQL‑команд

Так же как Fusion является движком следующего поколения для dbt, нам потребовались и адаптеры следующего поколения. Эти адаптеры написаны на Rust и построены на стандарте Apache Arrow.

Шаблонизация SQL‑команд в значительной степени наследует подход с макросами из адаптеров dbt Core. А вот подключение к базам данных — совсем другая история: движок dbt Fusion не может использовать Python‑классы, присутствующие в каждом адаптере, по практическим причинам и соображениям производительности.

Здесь на сцену выходит экосистема Apache Arrow в целом и новый ADBC API в частности. ADBC — это ориентированная на будущее платформа для подключения к базам данных, и мы активно используем её в адаптерах Fusion.

Поскольку стандарт ADBC очень новый, не все базы данных пока с ним совместимы, а использование ADBC из Rust‑клиента — непростая задача. Чтобы решить обе проблемы, мы создали Rust‑библиотеку XDBC, которая:

  • поддерживает ODBC‑подключения к базам данных, где Arrow пока не доступен в качестве формата вывода
  • предоставляет обобщённые методы для создания и управления подключениями к базам данных
  • полезна всем, кто хочет создавать инструменты для работы с данными на Rust — как внутри, так и за пределами экосистемы dbt

Всё это будет выложено в open source под лицензией Apache 2.0 позже в этом году, а именно:

  • адаптеры Fusion, созданные нами
  • библиотека XDBC
  • а также дальнейшие улучшения, которые мы будем отправлять upstream в проект Apache Arrow ADBC

Грамматики ANTLR

Тип артефакта: файлы g4

Где доступно: (репозиторий появится позже; пока что обсуждение доступно в канале #dbt-fusion-engine в Slack‑сообществе dbt)

Лицензия: Apache 2.0 (позже в этом году)

Грамматики ANTLR — это формальные спецификации языков, которые позволяют Fusion разбирать SQL‑запросы во множестве диалектов. ANTLR принимает эти декларативные грамматики высокого уровня и на их основе генерирует парсер. Такие грамматики полезны везде, где требуется разбор SQL, — не только в Fusion, — поэтому мы публикуем их под лицензией Apache 2.0, чтобы сообщество и другие участники экосистемы данных могли использовать их в своих проектах.

Большинство грамматик ANTLR применимы только к одному диалекту, но команда SDF создала систему, позволяющую определить общую базовую грамматику и затем генерировать из неё g4‑файлы для каждого хранилища. Это сокращает объём работы по поддержке нового диалекта вдвое при сохранении необходимого уровня точности и надёжности.

dbt-jinja

Тип артефакта: исходный код

Где доступно: подкаталог репозитория dbt-fusion
(хотя ещё требуется работа, прежде чем его будет удобно использовать вне репозитория Fusion)

Лицензия: Apache 2.0

Поскольку Fusion полностью написан на Rust, а Jinja — это Python‑проект, нам понадобился совершенно новый способ рендеринга Jinja, используемой в пользовательских проектах. Мы начали с перехода на minijinja — Rust‑порт подмножества оригинального проекта Jinja, написанный его первоначальным автором.

Этого подмножества оказалось недостаточно для поддержки существующих dbt‑проектов, поэтому мы реализовали на Rust большую часть недостающих возможностей. В результате мы получили лучшее из двух миров: значительный прирост производительности при сохранении совместимости с существующими кодовыми базами пользователей.

dbt-jinja — самая функционально полная реализация Jinja на Rust. Она уже доступна под лицензией Apache 2.0, а более формальный релиз (документация и т. д.) запланирован на конец этого года. Она полезна как для создания инструментов поверх dbt‑проектов, так и для совершенно других задач, где просто требуется быстрый рендеринг Jinja.

Как можно взаимодействовать с этими компонентами?

Наши принципы для контрибьюторов остаются прежними: разработка dbt — это командный спорт.

  • Если вы хотите открыть PR к публично доступному коду — вы можете это сделать.
  • Если вы хотите заводить issues с описанием багов в период беты движка Fusion — вы можете это сделать. (Это, пожалуй, один из самых ценных способов помочь!)
  • Если вы хотите открыть обсуждение и предложить новый способ более эффективного использования dbt в нашем новом SQL‑осознанном мире — вы можете это сделать.
  • Если вы хотите двигаться «вверх по стеку» и вносить вклад в стандарты, лежащие в основе движка dbt Fusion, такие как Arrow, ADBC, Iceberg или DataFusion — вы можете это сделать. Там вы можете встретить знакомые лица!
  • Если вы просто хотите, чтобы dbt становился всё лучше в фоновом режиме — это тоже нормально.
  • Хотите присоединиться к команде, которая всё это создаёт? Если описанные здесь компоненты вам особенно интересны, напишите на careers.fusion@dbtlabs.com.

Если вам нужна помощь, чтобы разобраться во всех этих новых компонентах, заглядывайте в канал #dbt-fusion-engine в Slack‑сообществе — будем рады пообщаться.

Comments

Loading