【问题标题】:SSIS reading flatfile header columnSSIS 读取平面文件标题列
【发布时间】:2019-07-27 16:22:09
【问题描述】:

你们能否帮助我(为我指明正确的方向)如何在 SSIS 中实现以下目标。

所以,我有一个看起来像这样的平面文件

    ColumnA  ColumnB  ColumnC  ColumnD  ColumnN
    1        x        APPLE    Random1  MoreRandomData1
    2        y        ORANGE   Random2  MoreRandomData2
    3        z        OTHER    Random3  MoreRandomData3

...我需要将这些数据按以下格式存储到表格中

ColumnA, ColumnB, BigBlurColumn
1        x        ColumnC:APPLE, ColumnD:Random1, ColumnN:MoreRandomData1
2        y        ColumnC:ORANGE, ColumnD:Random2, ColumnN:MoreRandomData2
3        z        ColumnC:OTHER, ColumnD:Random3, ColumnN:MoreRandomData3

这是我的问题:
1. 如何读取平面文件的标题/列? 2. 是否可以旋转#1的结果

如果我能够同时操作 #1 和 #2,那么我在 SSIS 中进行重置对我来说相当容易,显然我可以编写这些脚本,但是我的客户坚持使用 SSIS,因为这是标准 ETL 工具。

关于如何实现上述场景的任何想法?

谢谢

【问题讨论】:

  • 总是有 5 列还是可能更多或更少?我只是将批次导入到一个 5 列的 varchar 临时表中,但取消选中标题,以便它导入标题,就好像它们是数据一样。将标识列添加到临时表中,以便对行进行编号。第 1 行始终是标题。然后使用 T-SQL 执行其他所有操作。
  • @Nick.McDermaid 平面文件的形状发生变化,除了前两列是必填字段
  • 在这种情况下,您需要一个只有一列的临时表,您将整行加载到该表中,然后使用 T-SQL 字符串函数拆分列。或者如果您更喜欢 .Net,请遵循 @Hadi 的建议并使用脚本转换

标签: csv ssis etl flat-file ssis-2017


【解决方案1】:

尝试将数据转储到临时表中,然后使用 STRINGAGG() 函数将数据连接成您想要的格式并将其移动到目标表中。

【讨论】:

    【解决方案2】:

    在平面文件连接管理器中,取消选中First row contains header 选项。然后转到高级选项卡,删除所有列并保留一列并将其长度更改为 4000。

    在数据流任务中,添加分割每一行的脚本组件,然后:

    1. 从第一行读取列标题
    2. 在所有剩余行中生成所需的输出列

    以下答案(不同的情况,但它们很有帮助)会给你一些见解:

    【讨论】:

    • 感谢@Hadi,我设法实现了我所需要的,同时遵循了您建议的链接中的一些想法。我确实添加了一个临时表,但只是为了让事情更有趣。
    猜你喜欢
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    相关资源
    最近更新 更多