【问题标题】:skip error rows from flat file in ssis从 ssis 的平面文件中跳过错误行
【发布时间】:2017-05-16 09:24:40
【问题描述】:

我正在尝试从平面文件加载数据。该文件大小约为 2.5 GB,行数接近十亿。我在 DFT 中使用平面文件源。文件中的几行不遵循列模式,例如,有一个额外的分隔符或将文本限定符作为一列的值。我想跳过这些行并加载具有正确格式的其余行。我正在使用 SSIS 2014。DFT 中的平面文件源失败。我已将 alwaysCheckforrowdelimiter 属性设置为 false,但仍然无法正常工作。由于文件太大,无法手动打开和更改。请帮忙。

【问题讨论】:

  • 如果这是一次性的,我建议您使用脚本(VBScript、Powershell 等)来搜索文件并事先清理它。
  • 谢谢..但是包含近十亿行的文件的脚本非常耗时。这将是每日计划工作的一部分,需要在一定时间内完成。
  • 你确定这会很耗时吗?对于十亿行,最多可能需要半小时?在 SSIS 中执行此操作的问题是,如果您有太多分隔符,它可能无法识别它 - 它可能只是将字段左移 1 个位置。无论如何,您可能想考虑一下。
  • 是的..大约需要一个半小时..并且工作需要在 2 小时内完成..30 分钟足以让工作的其他部分运行..因为这个限制我正在寻找选项,例如我们是否可以忽略或重定向有问题的行。
  • 我一直无法让 SSIS 识别和忽略格式错误的行。不是说不能,只是我通常先放弃。

标签: ssis bulkinsert business-intelligence flat-file dft


【解决方案1】:

我和 Nick.McDermaid 有同样的想法,但我也许可以帮助你更多。 您可以使用正则表达式清理文件。 (在脚本中)

你只需要定义一个正则表达式来匹配你想要的分隔符数量的行。其他行应删除。

这是一个在 Notepad++ 中执行的可视化示例

Notepad++ Example screenshot

这是用于我的示例的模式:

^[A-Z]*;[A-Z]*;[A-Z]*;[A-Z]*$

以及数据样本:

AA;BB;CC;DD
AA;BB;CC;DD
AA;BB;CC;DD;EE
AA;BB;CC;DD
AA;BB;CC
AA;BB;CC;DD
AA;BB;CC;DD

您可以在线试用:https://regex101.com/r/PIYIcY/1

问候, 阿诺

【讨论】:

    猜你喜欢
    • 2016-03-28
    • 2018-06-11
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多