Как мне синхронизировать таблицу с запросом в SQL Server - ETL? - PullRequest
3 голосов
/ 02 октября 2009

Я не знаю, как сформулировать этот вопрос, поэтому попытаюсь объяснить. У меня есть сторонняя база данных на SQL Server 2005. У меня есть другой SQL Server 2008, который я тоже хочу «публиковать» в сторонней базе данных. Затем эту базу данных я буду использовать в качестве серверной части для портала и служб отчетов - это будет хранилище данных.

На целевом сервере я хочу сохранить данные в разных структурах таблиц, которые хранятся в сторонних БД. Некоторые таблицы я хочу денормализовать и есть много столбцов, которые не нужны. Мне также нужно добавить дополнительные поля в некоторые таблицы, которые мне нужно будет обновить на основе данных, хранящихся в тех же строках. Например, есть поля varchar, содержащие информацию, которой я хочу заполнить другие столбцы. Все это должно очистить данные и упростить отчетность.

Я могу написать запрос (ы), чтобы получить всю необходимую информацию в определенной таблице назначения. Тем не менее, я хочу иметь возможность поддерживать его в актуальном состоянии с источником на другом сервере. Это не должно быть обновлено немедленно (хотя это было бы хорошо), но я хотел бы, чтобы это обновлялось, возможно, каждые 10 минут. Есть сотни тысяч строк данных, но изменения в данных, добавление новых строк и т. Д. Невелики.

Я осмотрелся вокруг, но я все еще не уверен, что это лучший способ добиться этого. Насколько я могу сказать, репликация не будет делать то, что мне нужно. Я мог бы вручную написать t-sql для выполнения обновлений, возможно, используя оператор Merge, а затем запланировать его как работу с агентом сервера sql. Я также смотрю на SSIS, и это похоже на то, что происходит в ETL.

Я просто не уверен, что использовать для достижения этой цели, и я надеялся получить какой-нибудь совет о том, как следует поступать таким образом? Любые предложения будут с благодарностью.

Ответы [ 3 ]

1 голос
/ 03 октября 2009

Для тех таблиц, схемы / реализации которых не меняются, я все равно настоятельно рекомендую репликацию.

Для таблиц, чьи данные и / или отношения существенно меняются, я бы порекомендовал вам разработать реализацию Service Broker для этого. Высокоуровневый подход с сервисным брокером (SB):

Table-->Trigger-->SB.Service >====> SB.Queue-->StoredProc(activated)-->Table(s)

Я бы не рекомендовал SSIS для этого, если только вы не захотите перейти на что-то вроде экспорта / импорта dialy. Это хорошо для такого рода вещей, но ИМХО слишком громоздкий и громоздкий для непрерывного или кратковременного поэтапного распределения данных.

0 голосов
/ 04 октября 2009

Я думаю, постановка и разбиение будут слишком сложными для вашего случая. Сейчас я внедряю то же самое в SSIS, но с периодичностью в 1 час, так как мне нужно дать время для поддержки. Я уверен, что использование SSIS - хороший способ сделать это.

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

0 голосов
/ 02 октября 2009

Ник, я сам прошел маршрут SSIS. У меня есть задания, которые выполняются каждые 15 минут и основаны на службах SSIS и выполняют именно то, что вы пытаетесь сделать. У нас есть огромная реляционная база данных, и затем мы хотели сделать сложную отчетность поверх нее, используя продукт под названием Tableau. Мы быстро обнаружили, что наша реляционная модель на самом деле не так хороша для этого, поэтому я построил над ней куб с помощью SSAS, и этот куб обновляется и обрабатывается каждые 15 минут. Да, SSIS создает ауру того, что он в основном предназначен для прямых заданий ETL, но я обнаружил, что его можно использовать и для простых быстрых заданий, подобных этому.

...