В настоящее время у нас есть таблица в хранилище данных под названием «Карты». Это было разработано как медленно меняющееся измерение типа 2; где мы создаем новую запись, если состояние карты изменится, чтобы мы могли отслеживать изменения состояния карты.
Мы также ведем ежедневный учет для каждой карты, даже если состояние не изменилось - это делается для отслеживания ежедневного баланса. Пример:
cardId state balanceAsAt balance ....
1 ACTIVE 2014-01-01 100.00
1 ACTIVE 2014-01-02 99.00
1 DELETED 2014-01-03 0.00
Каков оптимальный способ хранения данных, если мне нужно выполнить ETL для диапазона прошлых дат (например, 2 января 2014 г.) сегодня, в феврале 2015 г. (например, для 2014-01-01), при условии, что нет возможности получить прошлое состояние карты?
Вариант А - вставить запись с текущими данными за прошедшие сутки
cardId state balanceAsAt balance ....
1 ACTIVE 2014-01-01 100.00
1 DELETED 2014-01-01 0.00 [new entry here? - however now the card seems to have been 're-activated' on the 2nd, which is not the case]
1 ACTIVE 2014-01-02 99.00
1 DELETED 2014-01-03 0.00
Вариант Б - не изменять записи, уже созданные в измерении
cardId state balanceAsAt balance ....
1 ACTIVE 2014-01-01 100.00
1 ACTIVE 2014-01-02 99.00
1 DELETED 2014-01-03 0.00
Какие-нибудь другие варианты / стандартные практики?
execute past ETL today, Feb 2015
? Почему вы вставляете дополнительную строку для 2014-01-01? - person Marek Grzenkowicz   schedule 26.02.2015