Как с помощью SSIS упорядочить данные в целевом файле Flat, который загружается из источника OLE DB

Я новичок в 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

person HarshiRulz    schedule 25.10.2011    source источник


Ответы (1)


Я точно не скучаю по DTS...

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

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

Диспетчер соединений с плоскими файлами — вкладка

Вкладка "Столбцы"

Диспетчер соединений с плоскими файлами — вкладка столбцов

Продвинутая вкладка

Диспетчер соединений с плоскими файлами — вкладка

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

введите здесь описание изображения

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

person billinkc    schedule 25.10.2011
comment
Еще раз спасибо за помощь. но я получаю сообщение об ошибке о том, что компонент не находится в допустимом состоянии. и когда я нажимаю «Дополнительно», все мои колонки исчезают. Перекачивается много колонок, и раньше они автоматически заполняли расширенную таблицу. Итак, как мне справиться с этим? Любые идеи? - person HarshiRulz; 25.10.2011