Подключение 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.
Пример:
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 с такой поддержкой.