среда, 12 декабря 2012 г.

Обновление таблицы в модели (когда реверс работает не так).

Приветствую.

Особенности реверса таблиц (и других объектов БД) в Oracle Data Integrator не всегда понятны, и требуют отдельного рассмотрения, в этой же заметке я хочу описать подход, при котором вы сможете достаточно быстро решить проблему несовпадения структур таблиц из модели и из физической БД.

Итак, что же делать если длина какой-то колонки изменилась, а ODI ни стандартным, ни кастомизированным реверсом не обновляет записи о типах/длинах колонок в абстрактных таблицах модели. Если таблица не очень широкая, то можно исправить и вручную. Если же в таблице больше 100 колонок, при этом имена этих колонок не отличаются легкой запоминаемостью, сравнить все колонки из абстрактной таблицы модели с колонками физической таблицы БД будет немного утомительно.


Еще одно решение, которое может помочь в этом случае - создание новой таблицы в модели и замена старой таблицы в интерфейсах на новую. Легко такой путь может быть пройден только если таблица, которую мы собираемся заменить, используется в большинстве случаев как приемник данных.


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

На сегодняшний момент я пользуюсь следующим алгоритмом для обновления таблицы в модели данных:
  1. Создаем копию таблицы в БД, реверсим ее в нужную модель.
  2. Если после реверса стандартным механизмом ODI размеры или типы столбцов оказываются неверными - используем модуль знаний реверса (именно это происходит у меня в ODI 10.1.3.6.4)
  3. Выполняем апдейт таблицы SNP_COL рабочего репозитория.

update snp_col t
set (source_dt, longc, scalec, pos) = (
select s.source_dt, s.longc, s.scalec, s.pos
from snp_col s
where i_table = (select i_table from snp_table where table_name = 'COPIED_TABLE')
and s.col_name = t.col_name
)
where i_table = (select i_table from snp_table where table_name = 'ORIGINAL_TABLE')

Добавьте в этот скрипт, при необходимости, ссылку на конкретную модель данных, в моем случае имена таблиц почти всегда были уникальными во всем репозитории.

Смотри также: Что такое модули знаний реверса (RKM) и зачем они нужны?

Комментариев нет:

Отправить комментарий