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

Настройка SQLite

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

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

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

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

Установите адаптер с помощью pip. До версии 1.8 установка адаптера автоматически устанавливала dbt-core и любые дополнительные зависимости. Начиная с 1.8 установка адаптера не устанавливает dbt-core автоматически. Это потому, что версии адаптеров и dbt Core были развязаны, и мы больше не хотим перезаписывать существующие установки dbt-core. Используйте следующую команду для установки:

python -m pip install dbt-core dbt-sqlite

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

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

Начиная с релиза dbt Core 1.0.0, версии dbt-sqlite выровнены по тем же значениям major+minor версии, что и dbt Core.

  • версии 1.1.x этого адаптера работают с dbt Core 1.1.x
  • версии 1.0.x этого адаптера работают с dbt Core 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 необходим для работы снимков; см. ниже раздел о расширениях SQLlite.
Loading table...

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

  • Схемы реализованы как подключенные файлы баз данных. (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, которые не поддерживают загрузку расширений, поэтому это не будет работать "из коробки". Соответственно, снимки не будут работать. Если вам нужна функциональность снимков, вам нужно будет скомпилировать SQLite/python или найти дистрибутив python для Mac OS с этой поддержкой.

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

0
Loading