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

Подключение SQLite к dbt v1

Плагин сообщества

Некоторая основная функциональность может быть ограничена. Если вы заинтересованы в участии, ознакомьтесь с исходным кодом для каждого из перечисленных ниже репозиториев.

  • Поддерживается: Community
  • Авторы: Jeff Chiu (https://github.com/codeforkjeff)
  • Репозиторий GitHub: codeforkjeff/dbt-sqlite
  • Пакет PyPI: dbt-sqlite
  • Канал Slack: n/a
  • Поддерживаемая версия dbt: v1.1.0 и новее
  • Поддержка dbt: Not Supported
  • Минимальная версия платформы данных: SQlite Version 3.0

Установка dbt-sqlite

Установите адаптер с помощью `pip`: python -m pip install dbt-sqlite

Настройка dbt-sqlite

Конфигурацию, специфичную для SQLite, см. на странице настроек SQLite.

Начиная с выпуска dbt 1.0.0, старшая и младшая части версии dbt-sqlite совпадают с соответствующими частями версии dbt v1.

  • версии 1.1.x этого адаптера работают с dbt 1.1.x

  • версии 1.0.x этого адаптера работают с dbt 1.0.x

  • версии 1.1.x этого адаптера работают с dbt v1 1.1.x

  • версии 1.0.x этого адаптера работают с dbt v1 1.0.x

Подключение к SQLite с помощью dbt-sqlite​

Цели SQLite должны быть настроены с использованием следующей конфигурации в вашем файле profiles.yml.

Пример:

~/.dbt/profiles.yml
your_profile_name:
target: dev
outputs:
dev:
type: sqlite
threads: 1
database: 'database'
schema: 'main'
schemas_and_paths:
main: 'file_path/database_name.db'
schema_directory: 'file_path'
#optional fields
extensions:
- "/path/to/sqlean/crypto.so"

Описание полей профиля SQLite​

ПолеОписание
typeОбязательный параметр. Должен иметь значение sqlite.
threadsОбязательный параметр. Должен иметь значение 1. SQLite блокирует всю базу данных при записи, поэтому значение > 1 не даст преимуществ.
databaseОбязательный параметр, но его значение может быть произвольным, поскольку в SQLite имена отношений не содержат компонента 'database', поэтому он удаляется из результата ref() и из SQL во всех случаях. Этот параметр всё равно необходимо задать в конфигурации: dbt использует его для внутренних нужд.
schemaЗначение 'schema' должно быть определено ниже в schema_paths. В большинстве случаев это должно быть main.
schemas_and_pathsСопоставляет схемы с путями: хотя бы одна из схем должна называться 'main'.
schema_directoryКаталог, в котором все файлы *.db подключаются как схемы, причём имя файла без расширения используется в качестве имени схемы, и в котором создаются новые схемы. Этот каталог может совпадать с каталогами файлов, указанных в schemas_and_paths, если это не вызывает конфликтов.
extensionsНеобязательный параметр. Список путей к файлам расширений SQLite, которые нужно загрузить. Для работы снимков необходим crypto.so; см. раздел «Расширения SQLite» ниже.

Ограничения​

  • Схемы реализованы как подключенные файлы баз данных. (SQLite объединяет базы данных и схемы.)

    • SQLite автоматически присваивает 'main' файлу, к которому вы изначально подключаетесь, поэтому это должно быть определено в вашем профиле. Другие схемы, определенные в вашем профиле, подключаются при создании соединения с базой данных.

    • Если dbt нужно создать новую схему, она будет создана в schema_directory как schema_name.db. Удаление схемы приводит к удалению всех ее отношений и отсоединению файла базы данных от сессии.

    • Имена схем хранятся в определениях представлений, поэтому, когда вы обращаетесь к файлу базы данных, отличному от 'main', вне dbt, вам нужно будет подключить его с тем же именем, иначе представления не будут работать.

    • SQLite не позволяет представлениям в одной схеме (т.е. файле базы данных) ссылаться на объекты в другой схеме. Вы получите эту ошибку от SQLite: "view [someview] cannot reference objects in database [somedatabase]". Вы должны установить materialized='table' в моделях, которые ссылаются на другие схемы.

  • Материализации упрощены: они удаляют и пересоздают модель, вместо выполнения резервного копирования и замены новой модели, которую поддерживают другие адаптеры баз данных dbt. Этот выбор был сделан, потому что SQLite не поддерживает DROP ... CASCADE или ALTER VIEW и не предоставляет информацию о зависимостях отношений в чем-то похожем на information_schema. Эти ограничения делают действительно сложным правильную работу функции резервного копирования и замены. Учитывая, как SQLite агрессивно блокирует базу данных, вероятно, это не стоит усилий.

Расширения SQLite​

Для работы снимков вам понадобится модуль crypto от SQLean, чтобы получить функцию md5(). Рекомендуется установить все модули SQLean, так как они предоставляют многие общие SQL-функции, отсутствующие в SQLite.

Предварительно скомпилированные бинарные файлы доступны для загрузки на странице репозитория SQLean на GitHub. Вы также можете скомпилировать их самостоятельно, если хотите.

Укажите на эти файлы модулей в конфигурации вашего профиля, как показано в примере выше.

Mac OS, по всей видимости, поставляется с библиотеками SQLite, скомпилированными без поддержки загрузки расширений, поэтому это не будет работать «из коробки». Соответственно, снимки (snapshots) тоже не будут работать. Если вам нужна функциональность снимков, вам потребуется скомпилировать SQLite/python или найти дистрибутив python для Mac OS с такой поддержкой.

Нашли ошибку?

0
Loading