Pentaho DI
November 9

Реализация Data Vault в Pentaho DI. SCD2 для сателлитов.

В заметке проверяется корректность пайплайна по сбору сателлита и реализации SCD2 при изменении данных на источнике.

В предыдущей заметке мы рассмотрели вариант реализации пайплайна по сбору Data Vault и его первичного заполнения. Но случай с изменением данных в источнике и его обработка в сателлите не был рассмотрен.

Будем тренироваться на таблице актеров, изменим актерам с ид 1 и 2 имена. До изменения они выглядят так.

Исходные данные

Пускай с сегодняшнего дня актёр с именем PENELOPE станет OLEG, а NICK - Petr. Сказано - сделано.

update sakila.actor set first_name = 
  case actor_id when 1 then 'OLEG' else 'Petr' end
where actor_id in (1,2)

Смотрим изменения

Актеры на источнике с новыми именами.

Выполняем трансформацию sat_actor, у нас должно появиться 2 новые записи в таблице сателлита и 2 старые записи должны закрыться текущей датой. Проверяем.

select * 
from sakila_data_vault.sat_actor
where hub_actor_id in (1,2)
Сателлит после работы трансформации.

На рисунке видно, что трансформация отработала корректно. SCD2 присутствует.

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

Код в степе, забирающий данные с источника.

В реальности, конечно, мы бы не стали при последующих запусках тащить все данные источника, а использовали бы в запросе условие-привязку к дате обновления на источнике.

from actor
where last_update > 
/* тут возможно будет дата предыдущего запуска трансформации
 чтобы взять только инкремент */
order by 1