Условный поток данных на основе исходного CSV-файла - PullRequest
1 голос
/ 24 февраля 2011

У меня есть ряд данных, которые производятся по состоянию и типу информации. Для каждого состояния у меня есть, например, 3 файла, которые имеют идентификатор в имени файла, чтобы сообщить мне, для какой информационной группы он предназначен. Данные в этих файлах состоят из строк данных, которые имеют различную длину в зависимости от типа файла. Тип 1 всегда имеет 245 значений, разделенных запятыми, Тип 2 имеет 215, Тип 3 имеет 300.

У меня есть 3 отдельных пакета служб SSIS 2005, настроенных для импорта этих данных, но мне было интересно, есть ли способ сделать это в одном пакете с помощью задачи условного разделения или задачи сценариев. Я пробовал условное разделение, но мне кажется, что он должен проверить значение строки. Затем я посмотрел на код здесь , который использует задачу сценариев. Я не могу заставить этот код компилироваться, так как он жалуется на «DTS не определен» Вероятно, это один из тех случаев, когда автор предполагает, что у меня есть знания в некоторых, для него, базовой идее SSIS - и что у меня нет этих знаний. Я изменил код там, чтобы быть:

Imports System
Imports System.Data
Imports System.Math
Imports System.IO
Imports Microsoft.SqlServer.Dts.Runtime

Public Class ScriptMain
    ' Created: Zack Bethem – AmberLeaf
    Public Sub Main()
        Dim fileLoc, fileName As String
        If Dts.Variables.Contains("User::fileName") = True Then
            fileName = CStr(Dts.Variables.Item("User::fileName").Value)
            If fileName.Contains("0074000") Then
                Dts.Variables.Item("User::SexByInd").Value = True
            ElseIf fileName.Contains("0072000") Then
                Dts.Variables.Item("User::SexByOcc").Value = True
            ElseIf fileName.Contains("0022000") Then
                Dts.Variables.Item("User::Migration").Value = True
            End If
            Dts.TaskResult = Dts.Results.Success
        Else
            Dts.TaskResult = Dts.Results.Failure
        End If
    End Sub
End Class

Как видно из кода: Я перебираю файлы в каталоге, используя цикл For Each. Я присваиваю имя файла для каждого файла User::fileName, а затем проверяю, содержит ли имя файла один из 3 строковых элементов. Если он содержит тип 1, то он переходит в другую ветвь, чем тип 2 / тип 3 и т. Д.

Поскольку этот код не компилируется, я не могу проверить, сработает ли остальная часть его примера. Я не уверен, какую задачу по написанию сценариев он использует, так как мне было предложено 3 варианта, но все они включали в себя какую-то манипуляцию строкой или элементом строки данных из «Входных данных для задания сценариев». То, что я хочу сделать, это передать User::fileName в качестве ввода и получить, а затем протестировать логические значения других 3 User:: переменных, чтобы сделать 3 ветви.

Мое нынешнее мышление таково: Внутри одиночного цикла «Для каждого цикла» есть эта задача потока данных:

           Scripting Task
      /         |           \
   (Type1)   (Type2)       (Type3)
    |            |            |
 CSV_Files1  CSV_Files2    CSV_Files3
    |            |            |
OLEDB_Dest1  OLEDB_Dest2   OLEDB_Dest3

Где CSV_Files1-3 использует уникальный файл SourceConnectionFlat для чтения / сопоставления столбцов с таблицами OLEDB_Dest.

редактирует: Design Script Error

1 Ответ

2 голосов
/ 24 февраля 2011

В задаче «Сценарий» в потоке управления вы можете проверить имя файла (в переменной здесь) и установить переменную с именем Type ...

    If Dts.Variables("User::FilePath").Value.ToString.Contains("cl") Then
        Dts.Variables("User::Type").Value = 1
    Else
        Dts.Variables("User::Type").Value = 2
    End If

    Dts.TaskResult = Dts.Results.Success

Затем использовать прецедентные ограничения (двойной щелчок настрока ограничения), чтобы проверить Успешность Задачи Сценария и значение переменной Типа, как показано здесь.

enter image description here

Поток будет выглядеть примерно так с каждым ограничениемпроверяя другое значение типа ...

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...