Каковы оптимальные методы обнаружения измененных строк в фиде данных? - PullRequest
1 голос
/ 01 июля 2011

Я изучаю рекомендации по управлению еженедельным потоком данных для сторонней службы OLAP.База данных анализа будет инициализирована с полным дампом данных.Последующие еженедельные каналы предоставят новые и обновленные строки.Данные поступают из базы данных SQL Server 2005.

Каковы предпочтительные подходы к обнаружению новых и обновленных строк?

  1. Инициируйте поле с измененной датой на вставках иобновлять и захватывать те, которые больше, чем последние извлечения корма;или

  2. столбец отметки времени в исходных таблицах и строки захвата с отметкой времени, превышающей время последнего извлечения канала;или

  3. какая-то отличная идея, о которой я не задумывался ...

Ответы [ 2 ]

2 голосов
/ 01 июля 2011

Ну, это зависит от того, как вы определяете измененную строку.

Номер 2 работает, но любое изменение строки вообще изменит метку времени, даже обновление, которое фактически ничего не изменит (скажем, обновление значения с 1 до 1).Звучит глупо, кто бы это сделал?Но это легко сделать, когда вы используете динамический код.

Номер 1 можно изменить, чтобы обеспечить разницу между вставленными и удаленными таблицами в триггере и устранить проблему, связанную с вариантом 2.

Однако предположим, что у вас есть три различных канала, каждый из которыхсодержат разные столбцы, которые могут быть в связанных таблицах, и вы хотите отправить, только если один из них действительно изменяется.Теперь триггер не достаточно специфичен для ваших каналов.Мы используем отслеживание изменений данных, чтобы определить, какие строки изменились с момента последней отправки (которые мы храним как часть всех наших пакетов служб SSIS), а затем вычисляем данные хеш-строк для определенных столбцов, чтобы увидеть, действительно ли изменились интересующие нас данные.Я также видел, как люди используют таблицу истории отправленных сообщений, а затем сравнивают эти значения (если вас интересует только одно или два поля в таблице) с теми, которые фактически изменились в таблице отслеживания изменений.Когда у вас есть конкретное требование, вы получаете довольно сложную систему для его поддержки (я просто даю вам приблизительную идею).

1 голос
/ 01 июля 2011

Как сказал HLGEM, отметка времени не очень хорошая идея.Триггер - хороший вариант, но вот еще один вопрос - как вы планируете хранить изменения?Просто клонировать все записи в таблицы истории?Ответ зависит от того, сколько у вас памяти.Если да или если вам нужно хранить только ограниченные в истории записи (скажем, только за 1 год) - вы можете сделать это.Но если у вас ограниченное хранилище или вы хотите сохранить все изменения в одной таблице, я предлагаю использовать метод, который я предпочитаю: использовать предложение OUTPUT и хранить только измененные значения столбцов в одной таблице в виде XML.Я описал эту технику в своем блоге: part_1 , part_2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...