2009-10-16 6 views
1

Под «переменным форматом» я подразумеваю, что каждая строка в текстовом файле начинается с одного символьного кода, обозначающего тип записи, и каждый тип записи имеет другой формат. Я считаю, что это своего рода довольно распространенный метод экспорта данных мэйнфреймов. Хуже всего то, что типы записей на самом деле являются иерархиями. Коды в использовании связаны следующим образом:SSIS - Импорт текстовых файлов с переменным форматом

0ThisIsAFileHeader 
2ThisIsABatchHeader 
4ThisIsDetailData 
4ThisIsDetailData 
6ThisIsAMatchingBatchFooter 
8ThisIsAMatchingFileFooter 

0/8 являются записи заголовка/прицепа (каждый из их собственного формата), 2/6 являются подзаголовка/записи суб-трейлер (также каждый из их собственных форматы), а 4 - фактические данные или подробные записи.

SQL Server 2008, Visual Studio.NET 2008. Является ли пользовательская задача сценария единственным способом импорта этих данных? Учитывая это, может ли кто-нибудь указать мне ресурс, который обсуждает это? Импорт текстового файла с фиксированной шириной довольно прост, но я не уверен, где задача скрипта попадет в поток управления и как данные будут использоваться при последующих шагах.

ответ

4

Это может быть сделано в рамках SSIS, хотя вам придется перепрыгнуть через несколько обручей. В верхней части головы это один из подходов:

  • Исходный файл должен быть установлен как 2 столбца, 1-й символ и строка остальных.
  • Условное сплит-действие на основе первого символа, разделяющего строки на отдельные рабочие процессы.
  • Действие преобразования данных, чтобы взять второй столбец и разбить его на соответствующие поля, это нужно будет сделать для каждого типа линии отдельно и привязать к соответствующей условной разделительной линии.
  • Назначение должно быть настроено для каждой условной ветви для надлежащего хранения/обработки данных.

Если для начала связывания элементов требуется дополнительная работа с ETL, я бы импортировал файлы в временные таблицы или постоянную промежуточную область и выполнял больше преобразований, прежде чем принимать окончательные результаты.

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

Это немного сложный вопрос, но проблема может быть решена.

+0

Это именно то, что сделала моя команда BI в прошлом. Я бы порекомендовал также наличие каких-либо записей, которые не соответствуют критериям условного разделения, чтобы перейти к неопределенной таблице записей, которая в основном представляет собой текстовый блок и настройку мониторинга, чтобы уведомить вас, когда записи находятся в этой таблице. Каждый раз в синих лунных схемах данных может измениться для этих видов импорта, и вам нужно знать, когда это произойдет, поскольку вы, вероятно, не узнаете, пока не появятся данные в файле. –

1

Возможно, SSIS имеет лучший способ сделать это, но когда мне пришлось выполнять эту задачу несколько лет назад в DTS, это то, что я сделал.

Сначала я привел данные в промежуточную таблицу, в которой было два столбца (или три, если бы я чувствовал, что мне нужен автогенерированный идентификатор). Один столбец был предназначен для символов, указывающих тип записи, а onecolumn - все остальные данные для строки.

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

Затем я импортировал в свои производственные столы.

1

Если бы я был вами, и эти 6 разных кодов символов были единственными, связанными с определенным набором данных, я бы импортировал его с помощью компонента Flat File Import, а затем переключился с использованием компонента Case на каждый из кодов.Я предполагаю, что вы хотите сохранить иерархию, чтобы вы могли разделить данные с футляром и вставить его, как вы хотите впоследствии.

Использование компонента «Сценарий» для импорта данных, как правило, является моим последним приложением, но мне действительно нравится форматировать данные до фактического импорта плоского файла с использованием кода сценария, когда файл (например, в вашем случае) не импортирует правильно. Я считаю, что писать одно приложение для форматирования и использовать его для форматирования любого файла, поступающего из системы, более полезно, чем писать каждый раз импорт скриптов.

1

Я делал такие вещи много раз, но я всегда предварительно обрабатывал данные, чтобы добавить номер строки в каждую строку. После этого было достаточно легко присоединиться к таблице для себя, используя max/min и сравнения на номере линии, чтобы сохранить разделы вместе.

Но это неловко. Если мы используем условное разделение, может ли SSIS получить номер строки? Или мы можем использовать инкрементирующий целочисленный ключ вместо номера строки, не рискуя, что условие приведет к их выходу из строя?

Смежные вопросы