Использование служб SSIS, как упорядочить данные в месте назначения плоского файла, который перекачивается из источника OLE DB - PullRequest
0 голосов
/ 25 октября 2011

Я новичок в SSIS, поэтому любая помощь, предложения, советы и рекомендации будут высоко оценены. Спасибо.

СЦЕНАРИЙ

Я пытаюсь преобразовать пакет DTS в пакет служб SSIS. Мой пакет содержит задачу «Поток данных», которая перекачивает данные из соединения OLE DB в место назначения плоского файла.

ПРОБЛЕМА

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

КОД DTS (чтобы представить вещи в перспективе)

************* ***************** ********* Скрипт Visual Basic ActiveX «*****************************************

DO WHILE NOT  rsGetActivations.eof OR rsGetActivations.BOF
    sLineItem = Space(10)
    sLineItem = sLineItem & Space(10)
    sLineItem = sLineItem & Space(10)
    sLineItem = sLineItem & Replace(Space(8)," ","0")
    sLineItem = sLineItem & Space(1)
    sLineItem = sLineItem & Replace(Space(8)," ","0")
    sLineItem = sLineItem & Replace(Space(3)," ","0")
    sLineItem = sLineItem & Space(2)
    sLineItem = sLineItem & rsGetActivations("Data_Date") & Space( 8 - Len(  rsGetActivations("Data_Date") ) )
    sLineItem = sLineItem & rsGetActivations("ID_Number") & Space( 16 - Len(  rsGetActivations("ID_Number") ) )
    sLineItem = sLineItem & Space(4)
    sLineItem = sLineItem & rsGetActivations("Main_Name") & Space( 25 - Len(  rsGetActivations("Main_Name") ) )
    sLineItem = sLineItem & rsGetActivations("First_Name")  &  Space( 15 - Len(  rsGetActivations("First_Name") ) )
    sLineItem = sLineItem & rsGetActivations("Middle_Name")  & Space( 15 - Len(  rsGetActivations("Middle_Name") ) ) 
    sLineItem = sLineItem & rsGetActivations("Third_Name") & Space( 15 - Len(  rsGetActivations("Third_Name") ) )  
    sLineItem = sLineItem & rsGetActivations("DOB") & Space( 8 - Len(  rsGetActivations("DOB") ) )
    sLineItem = sLineItem & rsGetActivations("ID_Number") & Space( 13 - Len(  rsGetActivations("ID_Number") ) )
    sLineItem = sLineItem & rsGetActivations("Non_RSA_ID") & Space( 16 - Len(  rsGetActivations("Non_RSA_ID") ) )
    sLineItem = sLineItem & Space(15)
    sLineItem = sLineItem & Space(15)
    sLineItem = sLineItem & Space(15)
    sLineItem = sLineItem & Space(15)
    sLineItem = sLineItem & rsGetActivations("Gender") & Space( 1 - Len(  rsGetActivations("Gender") ) )
    sLineItem = sLineItem & Space(3)
    sLineItem = sLineItem & Space(1)
    sLineItem = sLineItem & Space(15)
    sLineItem = sLineItem & Space(15)
    sLineItem = sLineItem & Space(40)
    sLineItem = sLineItem & "0"
    sLineItem = sLineItem & rsGetActivations("Res_Line1")  & Space( 30 - Len(  rsGetActivations("Res_Line1") ) )  
    sLineItem = sLineItem & rsGetActivations("Res_Line2") & Space( 30 - Len(  rsGetActivations("Res_Line2") ) )  
    sLineItem = sLineItem & rsGetActivations("Res_Line3") & Space( 30 - Len(  rsGetActivations("Res_Line3") ) )  
    sLineItem = sLineItem & rsGetActivations("Res_Line4") & Space( 30 - Len(  rsGetActivations("Res_Line4") ) )  
    sLineItem = sLineItem & rsGetActivations("Res_Postal") & Space( 6 - Len(  rsGetActivations("Res_Postal") ) )
    sLineItem = sLineItem & Space(1)
    sLineItem = sLineItem & "00"
    sLineItem = sLineItem & Space(1)
    sLineItem = sLineItem & rsGetActivations("Post_Line1")  & Space( 30 - Len(  rsGetActivations("Post_Line1") ) )  
    sLineItem = sLineItem & rsGetActivations("Post_Line2") & Space( 30 - Len(  rsGetActivations("Post_Line2") ) )  
    sLineItem = sLineItem & rsGetActivations("Post_Line3") & Space( 30 - Len(  rsGetActivations("Post_Line3") ) )  
    sLineItem = sLineItem & rsGetActivations("Post_Line4") & Space( 30 - Len(  rsGetActivations("Post_Line4") ) )  
    sLineItem = sLineItem & rsGetActivations("Post_Postal") & Space( 6 - Len(  rsGetActivations("Post_Postal") ) )      
    sLineItem = sLineItem & Space(1)
    sLineItem = sLineItem & "00"
    sLineItem = sLineItem & rsGetActivations("Bank_Name") & Space( 20 - Len(  rsGetActivations("Bank_Name") ) )
    sLineItem = sLineItem & rsGetActivations("Bank_Branch") & Space( 20 - Len(  rsGetActivations("Bank_Branch") ) )
    sLineItem = sLineItem & Space( 6 - Len(  rsGetActivations("Branch_No") ) )  & rsGetActivations("Branch_No") 
    sLineItem = sLineItem & Space( 15 - Len(  rsGetActivations("Account_No") ) ) & rsGetActivations("Account_No")
    sLineItem = sLineItem & rsGetActivations("Home_Code") & Space( 11 - Len(  rsGetActivations("Home_Code") ) )
    sLineItem = sLineItem & rsGetActivations("Home_Tel") & Space( 15 - Len(  rsGetActivations("Home_Tel") ) )
    sLineItem = sLineItem & rsGetActivations("Work_Code") & Space( 11 - Len(  rsGetActivations("Work_Code") ) )
    sLineItem = sLineItem & rsGetActivations("Work_Tel") & Space( 15 - Len(  rsGetActivations("Work_Tel") ) )   
    sLineItem = sLineItem & rsGetActivations("Cell_No") & Space( 10 - Len(  rsGetActivations("Cell_No") ) )
    sLineItem = sLineItem & Space(35)
    sLineItem = sLineItem & rsGetActivations("Occupation")  & Space( 22 - Len(  rsGetActivations("Occupation") ) )  
    sLineItem = sLineItem & rsGetActivations("Emp_Name") & Space( 35 - Len(  rsGetActivations("Emp_Name") ) )       
    sLineItem = sLineItem & Space(2)
    sLineItem = sLineItem & Space(6)        

    fExportFile.Write(  sLineItem & sCRLF )

    rsGetActivations.MoveNext
LOOP'//end WHILE NOT  rsGetActivations.eof OR rsGetActivations.BOF

1 Ответ

0 голосов
/ 25 октября 2011

Я уверен, что не пропустите DTS ...

В SSIS вы ищете диспетчер соединений с плоскими файлами и укажите его фиксированную ширину (определите столбцы в Advanced). Прекрасная вещь, позволяющая диспетчеру соединений определять размер, заключается в том, что вы устанавливаете его один раз, и все, никаких ошибок в выводе, потому что вы разболтали логику. Не то, чтобы я когда-либо делал это

Вкладка «Общие»

Flat File Connection Manager - General tab

Вкладка «Столбцы»

Flat File Connection Manager - columns tab

Вкладка «Дополнительно»

Flat File Connection Manager - Advanced tab

Поток данных будет выглядеть примерно так:

enter image description here

Единственное, в чем я не уверен, это 0 столбцов с отступами. Возможно, вам придется поработать с производным столбцом, чтобы заполнить их, но это не должно быть слишком плохо - просто добавьте размер столбца из нулей и возьмите правильные N символов с обычными правилами объединения NULL, чтобы с осторожностью относиться к ним.

...