Настройки IBM Db2
Требования к экземпляру
Для использования IBM Db2 с адаптером ibm-dbt-db2 убедитесь, что к экземпляру подключена база данных, которая поддерживает создание, переименование, изменение и удаление таких объектов, как таблицы и представления. Пользователь, подключающийся к экземпляру через адаптер ibm-dbt-db2, должен иметь необходимые права доступа к целевой базе данных и схеме.
Подробнее см. в официальной документации IBM Db2
Поддерживаемые платформы Db2
Адаптер ibm-dbt-db2 поддерживает следующие платформы IBM Db2:
- Db2 for Linux, Unix, and Windows (LUW) — версия 9.7 и выше
- Db2 for z/OS — версия 11 и выше
- Db2 for iSeries — совместимые версии
Seed-файлы и типы данных
Адаптер ibm-dbt-db2 обеспечивает полную поддержку всех типов данных Db2 в seed-файлах. Чтобы воспользоваться этой возможностью, необходимо явно определить тип данных каждого столбца в конфигурации seed.
Типы данных столбцов можно настроить в файле dbt_project.yml или в файлах свойств — dbt поддерживает оба варианта. Подробнее о настройке seed и рекомендуемых подходах см. в документации по настройке seed в dbt.
Пример настройки seed
В файле dbt_project.yml:
seeds:
my_project:
raw_customers:
+column_types:
id: INTEGER
name: VARCHAR(100)
email: VARCHAR(255)
created_at: TIMESTAMP
is_active: BOOLEAN
Поддерживаемые типы данных Db2
| Тип данных Db2 | Описание | Пример использования |
|---|---|---|
| INTEGER | 32-битное целое число | id: INTEGER |
| BIGINT | 64-битное целое число | large_id: BIGINT |
| SMALLINT | 16-битное целое число | status_code: SMALLINT |
| DECIMAL(p,s) | Десятичное число с фиксированной точкой | price: DECIMAL(10,2) |
| FLOAT | Число с плавающей точкой | rate: FLOAT |
| DOUBLE | Число с плавающей точкой двойной точности | measurement: DOUBLE |
| VARCHAR(n) | Строка переменной длины | name: VARCHAR(100) |
| CHAR(n) | Строка фиксированной длины | code: CHAR(10) |
| CLOB | Большой символьный объект | description: CLOB |
| BLOB | Большой двоичный объект | image_data: BLOB |
| DATE | Значение даты | birth_date: DATE |
| TIME | Значение времени | start_time: TIME |
| TIMESTAMP | Дата и время | created_at: TIMESTAMP |
| BOOLEAN | Логическое значение | is_active: BOOLEAN |
| XML | XML-документ | config: XML |
| GRAPHIC(n) | Строка двухбайтовых символов фиксированной длины | unicode_text: GRAPHIC(50) |
| VARGRAPHIC(n) | Строка двухбайтовых символов переменной длины | unicode_name: VARGRAPHIC(100) |
| DBCLOB | Большой объект с двухбайтовыми символами | large_unicode: DBCLOB |
Стратегии материализации
Адаптер ibm-dbt-db2 поддерживает все стандартные материализации dbt:
Материализация table
Создаёт физическую таблицу в базе данных. Эта материализация используется по умолчанию, если не указана другая.
{{ config(materialized='table') }}
SELECT * FROM source_table
Материализация view
Создаёт представление в базе данных. Представления — это виртуальные таблицы, которые не хранят данные физически.
{{ config(materialized='view') }}
SELECT * FROM source_table
Инкрементальная материализация
Формирует таблицы инкрементально, обрабатывая только новые или изменённые записи. Адаптер ibm-dbt-db2 поддерживает две инкрементальные стратегии:
Стратегия merge (по умолчанию)
Использует оператор MERGE в Db2 для эффективного выполнения вставок и обновлений:
{{
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 %}
Стратегия delete+insert
Удаляет совпадающие записи, затем вставляет новые:
{{
config(
materialized='incremental',
unique_key='id',
incremental_strategy='delete+insert'
)
}}
SELECT * FROM source_table
{% if is_incremental() %}
WHERE updated_at > (SELECT MAX(updated_at) FROM {{ this }})
{% endif %}
Материализация ephemeral
Создаёт общее табличное выражение (CTE), которое существует только в течение одного запуска dbt:
{{ config(materialized='ephemeral') }}
SELECT * FROM source_table
Снимки
Адаптер ibm-dbt-db2 поддерживает снимки dbt для отслеживания медленно изменяющихся измерений (SCD типа 2). Снимки фиксируют состояние данных в разные моменты времени.
Пример снимка:
{% snapshot customers_snapshot %}
{{
config(
target_schema='snapshots',
unique_key='id',
strategy='timestamp',
updated_at='updated_at'
)
}}
SELECT * FROM {{ source('raw', 'customers') }}
{% endsnapshot %}
Ограничения
Адаптер ibm-dbt-db2 поддерживает определение ограничений в моделях, но степень обеспечения их соблюдения различается:
| Тип ограничения | Уровень поддержки | Примечания |
|---|---|---|
| NOT NULL | ✅ Соблюдение обеспечивается | Полностью поддерживается, соблюдение обеспечивается Db2 |
| CHECK | ⚠️ Соблюдение не обеспечивается | Определяется, но соблюдение не обеспечивается в контексте dbt |
| UNIQUE | ⚠️ Соблюдение не обеспечивается | Определяется, но соблюдение не обеспечивается в контексте dbt |
| PRIMARY KEY | ⚠️ Соблюдение не обеспечивается | Определяется, но соблюдение не обеспечивается в контексте dbt |
| FOREIGN KEY | ⚠️ Соблюдение не обеспечивается | Определяется, но соблюдение не обеспечивается в контексте dbt |
Пример с ограничениями:
{{
config(
materialized='table'
)
}}
SELECT
id,
name,
email,
created_at
FROM source_table
Определите ограничения в YAML-файле схемы:
models:
- name: customers
columns:
- name: id
constraints:
- type: not_null
- type: primary_key
- name: email
constraints:
- type: not_null
Оптимизация производительности
Индексирование
Хотя dbt не управляет индексами напрямую, их можно создавать с помощью post-hook:
{{
config(
materialized='table',
post_hook=[
"CREATE INDEX idx_customer_email ON {{ this }} (email)",
"CREATE INDEX idx_customer_created ON {{ this }} (created_at)"
]
)
}}
SELECT * FROM source_table
Организация таблиц
Db2 поддерживает различные типы организации таблиц. Их можно задать с помощью post-hook:
{{
config(
materialized='table',
post_hook=[
"ALTER TABLE {{ this }} ORGANIZE BY ROW"
]
)
}}
SELECT * FROM source_table
Управление правами доступа
Адаптер ibm-dbt-db2 поддерживает управление правами доступа к объектам базы данных:
{{
config(
materialized='table',
grants={
'select': ['reporting_role', 'analyst_user'],
'insert': ['etl_role'],
'update': ['etl_role']
}
)
}}
SELECT * FROM source_table
Чувствительность к регистру
По умолчанию Db2 переводит идентификаторы без кавычек в верхний регистр. Адаптер обрабатывает это автоматически, но учитывайте следующее:
- Имена таблиц и столбцов без кавычек будут переведены в верхний регистр
- Используйте двойные кавычки для сохранения регистра:
"MyTable"в отличие отMYTABLE - Адаптер автоматически выполняет преобразование регистра при операциях dbt
Рекомендации
- Изучайте документацию SQL: ознакомьтесь со справочником SQL IBM Db2, чтобы понимать особенности и ограничения платформы.
- Используйте инкрементальные модели: для больших наборов данных используйте инкрементальную материализацию со стратегией
merge, чтобы обеспечить оптимальную производительность. - Явно задавайте типы данных: всегда явно определяйте типы данных в конфигурациях seed, чтобы обеспечить корректную загрузку данных.
- Используйте пул соединений: задавайте подходящее количество потоков в профиле, чтобы сбалансировать параллелизм и накладные расходы на соединения.
- Используйте SSL/TLS в производственной среде: включите защиту SSL/TLS для производственных баз данных, чтобы защитить данные при передаче.
- Отслеживайте производительность: используйте встроенные средства мониторинга Db2 для отслеживания производительности запросов и оптимизации моделей.
- Тестируйте инкрементальные модели: при разработке инкрементальных моделей тестируйте их на небольших выборках данных, прежде чем запускать на полных наборах данных.