Импорт данных SQL Server - PullRequest
       32

Импорт данных SQL Server

0 голосов
/ 16 ноября 2011

Мы проектируем импорт данных из внешнего источника, такого как MAS200, в нашу производственную базу данных SQL Server 2005/2008. Источником будет транзакционная база данных, безопасная / изолированная. Нам необходимо синхронизировать нашу базу данных с источником, чтобы обеспечить периодическую синхронизацию данных.

Мы имеем право запрашивать любой тип исходных данных - например, в виде CSV, txt-файлов или даже иметь исходные данные в другой базе данных SQL, которая имеет аналогичную структуру. Нам нужно выбрать лучший способ импорта данных - он будет периодическим и может выполняться ежечасно или ежечасно.

Исходя из моего опыта, я считаю, что наличие исходных данных в базе данных SQL может быть лучшим способом для начала. Вот примерный план того, что мы получили до сих пор -

  1. Периодически источник БД будет заполняться извне (не наша часть)
  2. Предварительная обработка : полировка данных исходной таблицы (т. Е. Обрезка, поиск) - общее форматирование и преобразование данных
  3. Fetch : создание курсора для циклического просмотра записей. Мы планируем обновить существующие данные и вставить новые, поэтому нам нужно по крайней мере два цикла CURSOR по одному.
  4. Заполнить : В цикле CURSOR записи будут обновляться / вставляться
  5. Постобработка : Снова некоторые последние штрихи и отображение поиска (т. Е. Заменить код на id)
  6. Проверка : Наконец, запустите проверку согласованности таблиц для обеспечения целостности импортируемых данных

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

ПРИМЕЧАНИЕ: данные будут огромными - в прошлый раз у нас была похожая настройка, чтобы завершить весь процесс импорта данных, потребовалось несколько минут, например, почти 20-25 минут, поэтому мы запланировали почасовой импорт данных.

Спасибо.


ОБНОВЛЕНИЕ № 1: Я понимаю, что использование команды MERGE кажется лучшим. Но если я должен создать его для SQL Server 2005? Я считаю, что это работает с 2008 года. Я нашел ссылку -

http://sqlserver -tips.blogspot.com / 2006/09 / имитируя-слияние-заявление-в-sql.html

Есть еще идеи на 2005 год?

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

Для элементов 3 и 4 - если вы используете SQL Server 2008, рассмотрите возможность использования команды MERGE, а не курсоров и циклов

Если возможно, сохраните нетронутую копию исходной БД, а затем, если возникнут какие-либо проблемы с обработкой данных, вам будет легче найти причину.

0 голосов
/ 16 ноября 2011

Как уже говорили другие, нет необходимости использовать курсор в этом процессе; Я также согласен с тем, что SSIS, вероятно, лучше подходит для этого, чем вы думаете (потому что он переносимый и настраиваемый). Однако, если вы хотите сделать это в T-SQL, я бы посоветовал вам заменить шаг FETCH на что-то вроде:

  1. Извлечение данных из промежуточной таблицы, которую вы использовали для полировки данных.
  2. Если вы не можете использовать команду MERGE в SQL 2008, вы можете эмулировать то же самое с помощью JOIN:

    - строки для обновления ВЫБРАТЬ * От постановки ПРИСОЕДИНЯЙТЕСЬ к пункту назначения на staging.ID = destination.ID

    - строки для вставки ВЫБРАТЬ * От постановки ПРИСОЕДИНЯЙТЕСЬ к получателю ГДЕ destination.ID НЕДЕЙСТВИТЕЛЕН

Легко peasy, без курсоров.

0 голосов
/ 16 ноября 2011

Рассматривали ли вы использование SQL Server Integration Services ?Похоже, ваш проект идеально подходит для него.

Недавно я работал над проектом, который извлекал данные из различных источников данных (как баз данных, так и файлов), собирал их и очищал, а затем помещал в реляционный SQL Server.База данных 2008Все это было довольно просто в SSIS.

...