Импортируйте самые последние данные из CSV на SQL Server с помощью SSIS - PullRequest
0 голосов
/ 01 декабря 2011

Вот сделка; проблема не в том, чтобы загрузить CSV в SQL Server, а в том, чтобы он работал так, как я хочу ... что, как мне кажется, всегда проблема:)

У меня есть CSV-файл с такими столбцами, как: DATE, TIME, BARCODE, etc... Я использую преобразование производного столбца для объединения DATE и TIME в DATETIME для импорта в SQL Server, и я импортирую все данные в база данных. Проблема в том, что мы получаем новый файл .CSV только каждые 12 часов, и, например, ради, мы скажем, что .CSV обновляется четыре раза в минуту.

С логикой, что мы будем запускать работу каждые 15 минут, мы получим тонну перекрывающихся данных. Я предполагаю, что буду использовать переменную, скажем, LastCollectedTime, которую можно извлечь из моей базы данных SQL с помощью MAX(READTIME). Моя проблема заключается в том, что я хочу собирать только строки с более поздним временем чтения, чем эта переменная.

Структура таблицы назначения: ID, ReadTime, SubID, ...datacolumns..., LastModifiedTime, где LastModifiedTime имеет значение по умолчанию GETDATE() при последней вставке.

Есть идеи? Помните, что наше время чтения - это производная колонка, но мы не уверены, имеет ли это значение.

1 Ответ

2 голосов
/ 01 декабря 2011

Вот один из подходов, который вы можете использовать:

Предположим, что ваша таблица назначения в SQL Server называется BarcodeData.

  1. Создайте этаптаблица (скажем, BarcodeStaging) в вашей базе данных, которая имеет ту же структуру столбцов, что и таблица назначения BarcodeData, в которую импортируются данные CSV.

  2. Inпакет SSIS, добавьте Execute SQL Task перед задачей потока данных для усечения промежуточной таблицы BarcodeStaging.

  3. Импорт данных CSV в промежуточную таблицу BarcodeStaging и не в фактическую таблицу назначения.

  4. Используйте оператор MERGE (я предполагаю, что вы используете SQL Server 2008 или более позднюю версию) , чтобысравните промежуточную таблицу BarCodeStaging и фактическую таблицу назначения BarcodeData, используя столбец DateTime в качестве ключа объединения.Если есть несопоставленные строки, скопируйте строки из промежуточной таблицы и вставьте их в таблицу назначения.

Техническая ссылка на оператор MERGE: http://technet.microsoft.com/en-us/library/bb510625.aspx

Надеюсь, это поможет.

...