СтартФоткиЖелезкиПрограммыШпаргалкиРадиоКонтактСоглашение

Причина

Для организации исторических данных в области анализа данных используют таблицы SCD2 (медленно меняющиеся измерения). Добавление к обычному измерению (дименшену) четырёх полей и загрузка такой таблицы вызывают необходимость в сложной программе. Обновление таблицы ведёт со временем к фрагменации при хранении данных. В результате, таблица scd2 требует времени в разработке и обслуживании.

Решение

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

Создадим таблицу, в структуре присутствуют поля для сохранения истории: DIM_REQUEST_ID_HIST - это ссылка записи на предыдущую/историческую версию, DELETE_FLAG - маркер удаления записи из источника, UPDATE_DT - время сохранения текущей версии.

Дополнительно создадим вьюшки для отображения последней/актуальной и исторической версии атрибутов для всех ключей REQUEST_NK

Загрузка исторической таблицы

Загрузим имена страниц из файла access.log, названия и описания запросов не известны. Поэтому сохраним ключи без атрибутов, чтобы таблицы фактов могли ссылаться на них.

Из трёх запросов в CMS будут известны '/study_request_page' с заголовком 'Study Page' и '/study_request_news' с названием 'News'

Cтраницу '/study_request_news' удалим с сайта, а файлы '/study_request/file.jpg' будем игнорировать.

Результат

В результате получаем три объекта в базе данных.
1. Историческая таблица с тремя дополнительными техническими полями.
2. Вьюшка, которая отображает последнее состояние всех ключей таблицы, флаг ACTIVE_FLAG = 1 отражает это состояние.
3. Вьюшка, которая отображает историческое состояние всех атрибутов таблицы.

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

Необходимые особенности таблицы измерения:

- историзация происходит вставкой записей, а не обновлением.

- временные промежутки непрерывны, начинаются и заканчиваются в бесконечности. Эти свойства оси измерения не позволят фактам потеряться.

- при построении таблицы фактов есть возможность сделать ссылку на историческое и актуальное состояние измерения.