【问题标题】:FlatFile Source in SSISSSIS 中的平面文件源
【发布时间】:2014-09-05 04:45:31
【问题描述】:

在我的平面文件源中,我想在 OLDEDB 中传输所有这些数据。 但我想将数据分成不同的表。

示例。
表一从第一个 %F 开始,在 col[0] 中的另一个 %F 之前结束。
表二从第二个 %F 开始,具有不同的标题,因为它的字段与第一个表不同。

这在 SSIS 中可行吗?

【问题讨论】:

    标签: ssis business-intelligence file-format flat-file data-conversion


    【解决方案1】:

    看起来,在一个平面文件中,提供了 2 个表格数据。从图像上看,两张表也有不同的数据结构。我认为,很难一步加载文件。

    也许,这些步骤会帮助你。

    步骤 1. 将所有数据加载到一个表中(让到一个名为 [Table] 的表)。包括column headers.Data 的负载可能看起来像这样(只是一个模式作为示例。) 确保在此表中添加一个增量列

    第 2 步。如下所示的查询将帮助您确定第二个表从哪一行开始。

    Select Top 1 Column0 From [Table] Where Column1 = '%F' Order By Column0 Desc
    

    在你的 ssis 包中,添加一个变量来存储上面的结果

    步骤 3. 添加一个源为[Table]. 的 dft 在源之后添加一个条件拆分。

    If Column0 < variable value, sent row to [Table1]
    else to [Table2]
    

    可能还有更多的修改。


    根据评论添加:

    如果您有超过 1 个表。

    第 1 步。将所有数据加载到一个表中。

    第 2 步。添加一个附加列(图像中的 [columnX])。它的值应该是这样的,用它你应该能够识别表。

    第 3 步。使用条件拆分本身,使用 columnX 将每行映射到其对应的表。


    根据要求,添加编辑: 使用这样的逻辑..在 SSMS 中运行脚本并查看结果。

    Declare @table table (id int identity(1,1),Col1 varchar(5), ColX int)
    Insert into @table (Col1) Values
    ('%F'),('%R'),('%R'),('%R'),('%R'),('%R'),('%R'),
    ('%F'),('%R'),('%R'),('%R'),('%R'),('%R'),('%R'),
    ('%F'),('%R'),('%R'),('%R'),('%R')
    
    Select  *
    from    @table A
    
    Update  Y
    Set     ColX = Z.X
    From    @table Y Join(
    Select  A.id FromId,B.id ToId,A.X  From 
    (
    Select id,ROW_NUMBER() Over (Order By id) X From (
    Select id from @table Where Col1 = '%F'
    Union
    Select max(id) id From @table ) Lu ) A,
    (
    Select id,ROW_NUMBER() Over (Order By id) X From (
    Select id from @table Where Col1 = '%F'
    Union
    Select max(id) id From @table ) Lu ) B
    Where A.X = B.X - 1 ) Z On Y.id >= Z.FromId and Y.id < Z.ToId
    Select  *
    from    @table A
    
    Select  *
    from    @table A
    

    【讨论】:

    • 请及时反馈。
    • 谢谢!但问题是平面文件源中有超过 2 个表。文件中大约有 10-20 个表。有些表的列数比其他表多。前任。第 1 个表有 10 个表,第 2 个表有 6 列,其中 4 列为空,但如果第 3 个表大于 10,则其他列拥塞到最后一列 [9]。由于列的读取是基于第一个有 10 列的表
    • 请看评论
    • 你找到了解决方案。?,我添加了一个查询来帮助你。
    猜你喜欢
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多