Проблема с SSIS для плоских файлов в таблицах с фиксированным положением - PullRequest
0 голосов
/ 29 июля 2011

У меня есть пара вопросов о задаче, на которой я застрял, и любой ответ будет принят с благодарностью.

Мне нужно извлечь данные из плоского файла (CSV) в качестве входных данных и загрузить данные в таблицу назначения в определенном формате, основанном на позиции.

Например, если у меня есть order_id,Total_sales,Date_Ordered с некоторыми данными, я должен извлечь данные и загрузить их в таблицу следующим образом:

  • Первое поле имеет фиксированную длину 2 с числовым типом данных.

  • total_sales вставляется в столбец total_sales в таблице с числовым типом данных и длиной 10.

  • date как datetime в формате, который отличается от формата плоского файла, например ccyy-mm-dd.hh.mm.ss.xxxxxxxx (здесь x должен быть заполнен нулями).

Может быть, у меня нет правильной идеи, чтобы решить это - любое решение будет оценено.

Я пытался использовать следующие способы:

  • Использовал источник плоского файла для получения файла CSV, а затем передавал его в качестве входных данных для пункта назначения OLE DB с созданной таблицей фиксированных типов данных. Проблема здесь в том, что столбцы загружены, но я должен заполнить их нулями в случае, если дата, когда он был загружен, или в большинстве столбцов, если я не использую общую длину, то перед ней должны стоять нули в это.

    Например, если у меня Orderid длины 4 и в плоском файле у меня есть идентификатор заказа, такой как 201, тогда его нужно изменить на 0201, когда он загружен в таблицу.

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

Пожалуйста, дайте мне несколько советов, как решить эту проблему ...

1 Ответ

0 голосов
/ 20 августа 2011

Предполагается, что у вас есть CSV-файл в следующем формате

order_id,Total_sales,Date_Ordered
1,123.23,01/01/2010
2,242.20,02/01/2010
3,34.23,3/01/2010
4,9032.23,19/01/2010

Я бы начал с создания источника плоских файлов (внутри задачи потока данных), но вместо фиксированной ширины установите формат с разделителями. Отметьте имена столбцов в первой строке данных. На вкладке столбца убедитесь, что разделитель строк установлен на "{CR} {LF}", а разделитель столбцов установлен на "Запятая (,)". Наконец, на вкладке «Дополнительно» задайте типы данных каждого столбца: целое, десятичное и дату.

Вы упоминаете, что хотите заполнить числовые типы данных начальными нулями при их сохранении в базе данных. Числовые типы данных в базах данных обычно не содержат начальных нулей. Итак, у вас есть два варианта; либо сохраняйте данные в виде типа в целевой системе (int, decimal и dateTime), либо используйте элемент управления Derived Column для преобразования их в строки. Если вы решили сохранить их как строки, добавьте выражение типа

 "00000" + (DT_WSTR, 5) [order_id]

к элементу управления Derived Column добавит до 5 ведущих нулей к идентификатору заказа (не забудьте установить длину типа данных равным 5), что приведет к идентификатору заказа "00001"

Создайте свою цель в пункте назначения потока данных и сделайте сопоставления таблицы / поля соответственно (или позвольте службам SSIS создать новую таблицу / сопоставления для вас).

...