Подключение IBM Db2 к dbt v1
Адаптер ibm-dbt-db2 позволяет использовать dbt для преобразования данных и управления ими в IBM Db2, задействуя широкие возможности SQL на платформах LUW (Linux, Unix, Windows), z/OS и iSeries. Прежде чем продолжить, убедитесь, что у вас есть:
- Работающий экземпляр базы данных IBM Db2 (LUW, z/OS или iSeries) и сведения для подключения (хост, порт, база данных, схема и т. д.).
- Учетные данные для аутентификации: имя пользователя и пароль.
- Python 3.10, 3.11 или 3.12 (Python 3.9 не поддерживается из-за требований dbt-core 1.11+).
Примечание: этот адаптер несовместим с dbt v2.
Подробнее о получении и организации этих сведений см. в разделе Настройка ibm-dbt-db2.
- Поддерживается: IBM
- Авторы: Shubham Kapoor, Amit Kumar
- Репозиторий GitHub: IBM/db2-dbt
- Пакет PyPI:
ibm-dbt-db2 - Канал Slack:
- Поддерживаемая версия dbt: v1.11.0 и новее
- Поддержка dbt: Not Supported
- Минимальная версия платформы данных: IBM Db2 LUW 9.7+, z/OS 11+, iSeries
Установка ibm-dbt-db2
Установите адаптер с помощью `pip`:python -m pip install ibm-dbt-db2
Настройка ibm-dbt-db2
Конфигурацию, специфичную для IBM Db2, см. на странице настроек IBM Db2.
Подключение к IBM Db2
Чтобы подключить dbt к IBM Db2, необходимо настроить профиль в файле profiles.yml, расположенном в каталоге .dbt/ вашей домашней папки. Ниже приведен пример конфигурации для подключения к экземплярам IBM Db2:
my_db2_project:
outputs:
dev:
type: db2
host: [hostname]
port: 50000
database: [database name]
schema: [schema name]
username: [username]
password: [password]
threads: [1 or more]
target: dev
Подключение с использованием SSL/TLS
Для защищенного подключения можно настроить параметры SSL/TLS:
my_db2_project:
outputs:
prod:
type: db2
host: [hostname]
port: 50001
database: [database name]
schema: [schema name]
username: [username]
password: [password]
threads: [1 or more]
# Настройки SSL/TLS
security: SSL
ssl_server_certificate: /path/to/server-ca.crt
ssl_client_hostname_validation: true
retries: 3
target: prod
Подключение с использованием DSN
В качестве альтернативы можно использовать имя источника данных (DSN), настроенное в клиенте Db2:
my_db2_project:
outputs:
dev:
type: db2
dsn: MY_DB2_DSN
schema: [schema name]
threads: [1 or more]
target: dev
Параметры хоста
Используйте следующие обязательные и необязательные поля профиля для настройки подключений к IBM Db2.
| Параметр | Обязательный/необязательный | Описание | Пример |
|---|---|---|---|
type | Обязательный | Тип адаптера. Должен быть db2. | db2 |
host | Обязательный* | Имя хоста для подключения к Db2. | localhost |
port | Необязательный | Порт для подключения к Db2. | 50000 |
database | Обязательный | Имя базы данных в вашем экземпляре Db2. | SAMPLE |
schema | Обязательный | Имя схемы в базе данных вашего экземпляра Db2. | ADMIN |
username | Обязательный | Имя пользователя для аутентификации. | db2user |
password | Обязательный | Пароль для аутентификации. | password |
threads | Необязательный | Количество потоков для параллельного выполнения. | 8 |
dsn | Необязательный | Имя источника данных (альтернатива host/port/database). | MY_DB2_DSN |
*Не требуется при использовании dsn
Необязательные параметры SSL/TLS
| Параметр | Обязательный/необязательный | Описание | Пример |
|---|---|---|---|
security | Необязательный | Протокол безопасности. Используйте SSL для включения SSL/TLS. | SSL |
ssl_server_certificate | Необязательный | Путь к файлу сертификата центра сертификации сервера для проверки SSL. | /path/to/server-ca.crt |
ssl_client_keystore | Необязательный | Путь к базе данных хранилища ключей клиента (файл .kdb) для взаимной аутентификации TLS. | /path/to/client.kdb |
ssl_client_keystash | Необязательный | Путь к файлу keystash клиента (файл .sth). | /path/to/client.sth |
ssl_client_hostname_validation | Необязательный | Включение проверки имени хоста (true/false). | true |
retries | Необязательный | Количество повторных попыток подключения. | 3 |
Схемы и базы данных
При выборе базы данных и схемы убедитесь, что у вас есть доступ на чтение и запись к обеим. Этот выбор не ограничивает ваши возможности выполнять запросы к базе данных. Вместо этого они задают расположение по умолчанию, в котором материализуются таблицы и представления.
Поддерживаемые возможности
| Возможность | Поддерживается | Примечания |
|---|---|---|
| Материализация в таблицу | ✅ Да | |
| Материализация в представление | ✅ Да | |
| Инкрементальная материализация | ✅ Да | Поддерживает стратегии merge и delete+insert |
| Эфемерная материализация | ✅ Да | |
| Seeds | ✅ Да | Требуется явная настройка типов данных |
| Снимки | ✅ Да | |
| Тесты | ✅ Да | |
| Документация | ✅ Да | |
| Источники | ✅ Да | |
| Пользовательские схемы | ✅ Да | |
| Предоставление прав доступа | ✅ Да | |
| Ограничения | ⚠️ Частично | Соблюдение NOT NULL обеспечивается, остальных ограничений — нет |
Типы данных
Адаптер сопоставляет типы данных dbt с типами Db2:
| Тип dbt | Тип Db2 |
|---|---|
| string | VARCHAR |
| text | VARCHAR(max_length) |
| integer | INTEGER |
| bigint | BIGINT |
| float | FLOAT |
| numeric | DECIMAL |
| boolean | BOOLEAN |
| timestamp | TIMESTAMP |
| date | DATE |
| time | TIME |
Инкрементальные модели
Адаптер ibm-dbt-db2 поддерживает две инкрементальные стратегии:
- merge (по умолчанию) — использует оператор MERGE в Db2 для эффективного обновления существующих и вставки новых записей
- delete+insert — удаляет совпадающие записи, а затем вставляет новые
Пример инкрементальной модели:
{{
config(
materialized='incremental',
unique_key='id',
incremental_strategy='merge'
)
}}
SELECT * FROM source_table
{% if is_incremental() %}
WHERE updated_at > (SELECT MAX(updated_at) FROM {{ this }})
{% endif %}
Чувствительность к регистру
По умолчанию Db2 приводит идентификаторы без кавычек к верхнему регистру. Адаптер обрабатывает это автоматически, но учитывайте следующее:
- Имена таблиц и столбцов без кавычек будут приведены к верхнему регистру
- Используйте кавычки в SQL, чтобы сохранить регистр:
"MyTable"в отличие отMYTABLE
Примечания
- Адаптер
ibm-dbt-db2основан на драйвере Pythonibm_db(версия 3.2.8), который автоматически устанавливается вместе с адаптером. - Требования к версии Python: требуется Python 3.10, 3.11 или 3.12. Python 3.9 не поддерживается из-за требований к зависимостям dbt v1.11+. Python 3.13+ пока не тестировался.
- Ограничения: ограничения CHECK, UNIQUE, PRIMARY KEY и FOREIGN KEY определяются, но их соблюдение не обеспечивается Db2 в контексте dbt. Обеспечивается соблюдение только ограничений NOT NULL.
- Ограничение LISTAGG: функция LISTAGG в Db2 не поддерживает ограничение количества агрегируемых значений.