Сообщения

Сообщения за август, 2013

Алгоритм "Схлопывание" (Сollapse)

Встречается ситуация когда история создается но не несет какой либо полезной информации, или может даже мешать. Например у сущности  с определенным ключом есть поле которое часто меняется но нам не нужно грузить его в хранилище. Например мы строим в хранилище связку [Абонент]-> [ФИО] (которое может менятся), а в таблице источника есть например поле [Город] изменения которого влияют на историю. Реализация алгоритма на Oracle: WITH --таблица с историей и ключом из двух полей hist_table AS (SELECT 1 AS KEY, 'Иванов' fio,'Москва' city, DATE '2010-01-01' AS eff_dttm, DATE '2011-01-01' AS exp_dttm FROM dual UNION SELECT 1 AS KEY, 'Иванов' fio,'Киев' city, DATE '2011-01-01' AS eff_dttm, DATE '2014-01-01' AS exp_dttm FROM dual UNION SELECT 1 AS KEY, 'Петров' fio, 'Киев' city, DATE '2014-01-01' AS eff_dttm, DATE '2999-12-31' AS exp_dttm FRO...

DWH

Хранилище данных  ( англ.   Data Warehouse ) — предметно-ориентированная информационная  база данных , специально разработанная и предназначенная для подготовки отчётов и бизнес-анализа с целью поддержки принятия решений в организации. Строится на базе  систем управления базами данных  и  систем поддержки принятия решений . Данные, поступающие в хранилище данных, как правило, доступны только для чтения. Данные из  OLTP -системы копируются в хранилище данных таким образом, чтобы построение отчётов и  OLAP -анализ не использовал ресурсы транзакционной системы и не нарушал её стабильность. Как правило, данные загружаются в хранилище с определённой периодичностью, поэтому актуальность данных может несколько отставать от OLTP-системы.

Алгоритм "Натягивание" (Pull Story)

      Часто встречает ситуация когда надо от истории по 2 и более ключам перейти к истории по меньшему количеству ключей. Для получения новой истории используется так называемый метод "натягивания"  (pull story). Смысл в том что мы сначало строим временную шкалу в нашем примере hist_table_time по нужному ключу. Потом соединяем временную шкалу с таблицей на момент времени (т.е. на  eff_dttm из шкалы времени) и получаем нужные нам  поля различными аггрегирующими функциями (в нашем примере это MAX)       Данный алгоритм может применяться и для натягивания нескольких таблиц на общую временную шкалу которую можно получить через UNION.  WITH --таблица с историей и ключом из двух полей hist_table AS (SELECT 1 AS key1, 1 key2, DATE '2010-01-01' AS eff_dttm, DATE '2011-01-01' AS exp_dttm FROM dual UNION SELECT 1 AS key1, 1 key2, DATE '2011-01-01' AS eff_dttm, DATE '2999-12-31' AS exp_dttm FROM dual UNION...