Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL Server 2008r2 обновление записей в DW  [new]
SnakeBlg
Member

Откуда:
Сообщений: 37
Доброе время суток. Есть большая база данных (назовем ее условно DW) отражающая состояние бухгалтерских счетов и хранящая данные в таблице вида Дата|Счет|Сумма (это конечно упрощено для премера). Каждый день в DW должны загружаться свежие данные из другой базы (назовем ее Источник). Все было бы хорошо если бы старые данные не изменялись. Тогда можно было просто грузить записи за новую дату и все. Но дело в том, что данные за прошлые даты в Источники могут меняться (например бухгалтера скорректировали проводку или провели операцию задним числом). Мы точно можем быть уверенны только в загруженных данных за предыдущие месяцы. Загруженные данные за текущий месяц могут стать недостоверными.

Сейчас данная проблема решена мной путем постоянной перезаписи всех значений за текущий месяц значениями из источника. Что скорее всего является оптимальным решением в данном случае (учитывая объем перезаписываемых данных).

Но что делать, если мы не можем быть уверены и в данных за прошлые месяцы? Постоянно убивать в DW десятки а то и сотни Миллионов строк и перезаписывать их? Я думаю, что существует какой-то механизм "умной" загрузки данных, когда существующие записи перезаписываются только в случае несовпадения.

Можно конечно написать свой скрипт, который будет сравнивать все строки и потом перезаписывать только нужные, но это будет очень не рационально на мой взгляд. Проще будет полностью загрузить новые строки из источника (поправте если не прав).

В общем вопрос такой: существует ли такая технология позволяющая решить проблему обновления строк в большой базе данных при загрузке обновленных данных? Если да, то укажите плиз ссылочкой глде можно почитать. Уж больно интересно решение этой проблемы.
15 июн 11, 11:18    [10814578]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008r2 обновление записей в DW  [new]
KORSA
Member

Откуда:
Сообщений: 56
http://dimensionmergescd.codeplex.com/

это то что тебе нужно
15 июн 11, 11:34    [10814689]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008r2 обновление записей в DW  [new]
SnakeBlg
Member

Откуда:
Сообщений: 37
Спасибо! Сегодня вечером почитаю и поэкспериментирую.
15 июн 11, 11:43    [10814754]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008r2 обновление записей в DW  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3757
SnakeBlg
В общем вопрос такой: существует ли такая технология позволяющая решить проблему обновления строк в большой базе данных при загрузке обновленных данных?.

Сделать в источнике поле "UpdatedDate" и заполнять его тригерром как gertdate() при редактировании записи.
Ну а потом грузить в DW всё у чего UpdatedDate больше чем дата предыдущей загрузки.
Это самое правильное решение!
15 июн 11, 14:50    [10816344]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008r2 обновление записей в DW  [new]
Fire83
Member

Откуда: Гомель-Минск
Сообщений: 474
SnakeBlg,
Если источник тоже на 2008R2 то тогда выбирайте:
1) Change Tracking
2) CDC
15 июн 11, 17:08    [10817658]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008r2 обновление записей в DW  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
Можете посмотреть про технологии CDC/CT тут.
Примерно последняя треть доклада.
15 июн 11, 17:15    [10817699]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008r2 обновление записей в DW  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35400
Блог
Вариант Ivan Durak +1

или

создать в источике таблицу из полей "Счет", "ДатаОбновления".
Повесить на таблицу-источник триггер, который будет апдейтить поле "ДатаОбновления".
Перезагружать в хранилище данные по счету, начиная с указанной даты.

или

по выходным запускать процедуру сравнения за 3 месяца/полгода/год, которая будет искать расхождения и править только их.
15 июн 11, 17:18    [10817739]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008r2 обновление записей в DW  [new]
KORSA
Member

Откуда:
Сообщений: 56
Ivan Durak
SnakeBlg
В общем вопрос такой: существует ли такая технология позволяющая решить проблему обновления строк в большой базе данных при загрузке обновленных данных?.

Сделать в источнике поле "UpdatedDate" и заполнять его тригерром как gertdate() при редактировании записи.
Ну а потом грузить в DW всё у чего UpdatedDate больше чем дата предыдущей загрузки.
Это самое правильное решение!



в таком случии будут дублириватса те строки которые не изменялись а это уже денежка но сторидж
15 июн 11, 17:49    [10817975]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008r2 обновление записей в DW  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3757
KORSA
Ivan Durak
пропущено...

Сделать в источнике поле "UpdatedDate" и заполнять его тригерром как gertdate() при редактировании записи.
Ну а потом грузить в DW всё у чего UpdatedDate больше чем дата предыдущей загрузки.
Это самое правильное решение!



в таком случии будут дублириватса те строки которые не изменялись а это уже денежка но сторидж

что куда будет дублироваться?? не понял
15 июн 11, 18:30    [10818225]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008r2 обновление записей в DW  [new]
SnakeBlg
Member

Откуда:
Сообщений: 37
Ivan Durak
SnakeBlg
В общем вопрос такой: существует ли такая технология позволяющая решить проблему обновления строк в большой базе данных при загрузке обновленных данных?.

Сделать в источнике поле "UpdatedDate" и заполнять его тригерром как gertdate() при редактировании записи.
Ну а потом грузить в DW всё у чего UpdatedDate больше чем дата предыдущей загрузки.
Это самое правильное решение!


Решение хорошее. Но к сожалению изменять структуру источника нельзя. И вообще к нему доступа нет. Есть только выгружаемые текстовые файлы. Сорри. Забыл сразу написать этот момент.

Спасибо за ссылки! Change Tracking и Change Data Capture это как раз то что нужно, как я понял. Буду подробнее изучать.

Вот еще нашел одно видео полезное на первый взгляд: http://technet.microsoft.com/en-sg/edge/video/sql-server-day-track-changes-the-easy-way-with-change-data-capture Может кому-нибудь будет интересно.

Всем спасибо за ответы!
16 июн 11, 03:36    [10819357]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008r2 обновление записей в DW  [new]
SnakeBlg
Member

Откуда:
Сообщений: 37
Технологии интересные. Именно такие я и искал. Но, к сожалению, из-за недоступности источника и эти технологии (если я все верно понял) в моей ситуации не подойдут. Так что дальше буду перезаписывать полностью данные за месяц (при существующих объемах данных это очень приемлемый вариант). Ну и буду иметь в виду, что при разрастании проекта нужно будет переводить все на SQL либо получать полный доступ к источнику...
16 июн 11, 03:58    [10819362]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить