【问题标题】:SSIS: Strip Characters from Flat FileSSIS:从平面文件中去除字符
【发布时间】:2010-12-23 00:06:35
【问题描述】:

在 SSIS 中从平面文件中去除字符的最佳方法是什么?就我而言,我需要在处理之前从文件中删除所有引号。

编辑:
如何针对 SSIS 中的某些文件运行可执行文件?我可以以某种方式使用源连接作为输入,还是必须将文件名作为参数传递?

【问题讨论】:

    标签: parsing ssis flat-file strip


    【解决方案1】:

    如果我正确理解您的问题,您想从文本文件中的任何列值中删除任何引号?如果是这种情况,您将使用派生列转换。您可以在派生列名称下拉列表中选择替换“column_name”。然后,您将使用以下代码填充表达式属性: REPLACE("\"", [column_name], "")

    希望这会有所帮助。

    【讨论】:

    • 我需要在处理之前从整个文件中删除引号。否则,列就会搞砸了。
    • 如果是这种情况,我会在您的控制流中使用脚本任务来对“”进行任何必要的替换。然后,您可以使用数据流来完成所有 ETL 工作。我想我在处理你的部分问题之前错过了整个过程。
    【解决方案2】:

    最简单的方法是创建一个“转换”脚本组件并使用代码去除引号。

    【讨论】:

    • 只要您熟悉 .NET(仅适用于 SSIS 2005 的 VB 或适用于 SSIS 2008 的 VB 或 C#)并且愿意编写比我所拥有的更多的代码,此方法也可以使用建议如下。
    • 可以对文件进行预处理吗?我需要事先从文件中删除引号,以便可以正确导入列。
    • 在进入加载文件的数据流之前,您可以在控制流中使用脚本任务。唯一的问题是您必须在创建数据流之前预处理一个“示例”文件,以便您可以将正确的列“填充”到平面文件源。
    【解决方案3】:

    unclepaul84 和 Ryan Fonnetts 的解决方案都可以,但我个人更倾向于 unclepaul 的解决方案,因为我发现我知道有多个文件需要去掉引号,我可以为每个文件使用相同的转换代码(这很好)。

    【讨论】:

    • 好点 - 如果您有超过 4 或 5 列,您可能可以创建一个可重用的“替换”函数,这可以在开发包时节省脚本组件的一些时间。但是,您可以在相同的派生列转换中使用相同的表达式替换一到多个列。所以,我想这取决于有多少列有引号字符问题以及您编写 .NET 的舒适程度。
    【解决方案4】:

    我确实使用了Derived Column Transformation

    例如如果我想在 ssis 中使用派生列替换 ', " " , #, 我会写

    Replace(Replace(REPLACE(name,"$"," "), "'", " ")," ","")
    

    但我觉得,如果需要过滤掉1或2列,那么这种方法很好。如果涉及更多,请继续Script task

    【讨论】:

      【解决方案5】:

      由于您必须对文件中的所有字段执行此操作,因此我建议将其作为流程的第一步,而不是作为转换工作流程中的操作。

      您可以编写自己的 .NET 脚本并将其嵌入到脚本任务中。 您还可以通过执行流程任务调用第三方工具或组件。

      例如,如果您可以访问 cygwin unix 命令行,则应该执行以下操作:

      sed s/\"//g data1.txt
      

      您可以通过上述“执行流程任务”组件调用可执行文件,并且可以通过在组件属性上设置表达式来参数化其输入。这些表达式可以基于可能通过配置文件配置的输入变量。 (这只是 SSIS 提供的实现此类目标的众多方法之一)

      【讨论】:

        【解决方案6】:

        这些是解决方案,但我相信平面文件连接管理器中内置了更简单的功能。

        在第一个选项卡“常规”中,您会在“格式”部分下找到第一个文本框,称为“文本限定符”。在此处输入一个双引号(如果所有列都用单引号括起来,则输入一个单引号)并点击预览。

        这应该可以解决您的问题!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-31
          • 2019-09-11
          • 1970-01-01
          • 2014-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多