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

Настройки 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ОписаниеПример использования
INTEGER32-битное целое числоid: INTEGER
BIGINT64-битное целое числоlarge_id: BIGINT
SMALLINT16-битное целое число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
XMLXML-документ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 для отслеживания производительности запросов и оптимизации моделей.
  • Тестируйте инкрементальные модели: при разработке инкрементальных моделей тестируйте их на небольших выборках данных, прежде чем запускать на полных наборах данных.

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

0
Loading