【问题标题】:Can SSIS support loading of files with varying column lengths in each row?SSIS 可以支持在每行中加载具有不同列长度的文件吗?
【发布时间】:2019-11-18 09:32:57
【问题描述】:

目前我每天收到大约 750k 行的文件,每行开头都有一个 3 个字符的标识符。

对于每个标识符,列数可以更改,但特定于标识符(例如,SRH 总是有 6 列,AAA 总是有 10 列,依此类推)。

我希望能够通过 SSIS 将此文件自动化到 SQL 表中。

此解决方案目前使用 VBA 在 MSACCESS 中构建,只是使用 CASE 语句循环记录集,然后将记录写入相关表。

我一直在阅读有关 SSIS 中的 BULK INSERT、BCP(带格式文件)和条件拆分的信息,但是由于列布局可变,我似乎总是卡在将文件作为 SSIS 错误加载的第一个障碍。

数据文件以竖线分隔,如下所示。

AAA|20180910|POOL|OPER|X|C
SRH|TRANS|TAB|BARKING|FORM|C|1.026
BHP|1
*BPI|10|16|18|Z
BHP|2
*BPI|18|21|24|A

(* 我添加了 * 以表明这些是父记录的子记录,在这种情况下,BHP 可以在其下有多个 BPI 记录)

我希望能够将 TXT 文件加载到临时表中,然后我可以编写 TSQL 来循环遍历记录并将它们解析到相关表(AAA - tblAAA、SRH - tblSRH...)

【问题讨论】:

  • 您可以试试这个,看看它是否适合您:techbrothersit.com/2015/06/… 请注意,您必须将分隔符从“,”更改为“|”。
  • @camba1 基于该链接,根本不需要 SSIS,他可以创建一个控制台应用程序来执行此操作。虽然有很多使用 SSIS 的解决方案
  • 谢谢你们 - 我对 C# 不是很熟悉,所以现在想通过 SSIS 来做,直到我能理解我的包将运行的代码。
  • 使用 C# 源组件拆分列并使用开关直接输出
  • 感谢@KeithL,在我更熟悉 C# 之前,我会坚持使用 SSIS 方法,但在适当的时候肯定会回到这篇文章。

标签: sql-server ssis etl flat-file


【解决方案1】:

我认为您应该将每一行读取为 DT_WSTR 类型和长度 = 4000 的一列,然后您需要在脚本组件(VB.NET / C#)中实现使用 vba 编写的相同逻辑,有类似的帖子可以给出你的一些见解:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2014-10-12
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多