【问题标题】:SSIS: from XML file to multiple tablesSSIS:从 XML 文件到多个表
【发布时间】:2010-08-20 23:54:48
【问题描述】:

所以我今天才开始挖掘 SSIS,所以如果我缺少明显的东西,请不要太讨厌。

所以我有一个 XML 文件(来自第三方)

<root>
    <foo>
        <fooId>12345</fooId>
        <name>FOO</name>
        <bars>
            <bar>BAR 1</bar>
            <bar>BAR 2</bar>
            [...]
        </bars>
    </foo>
    [...]
</root>

以及我的数据库中的相应表:
带有字段的 Foo(FooID、名称)
带字段的栏(BarID(身份 PK)、FooID、名称)

所以基本上 Bar 就像 Foo 的一组属性。

所以我添加了一个指向该文件的 XML 源,它会生成 3 个不同的数据集(foobarsbar)。问题是 bar 集合包含 bar 的值 + 一些自动生成的 ID,这不是很有用。我从这里看到获得具有bar 值和fooIdbar 集的唯一方法是对这些集进行排序和合并,这看起来很奇怪,并且可能会残酷地谋杀性能(我们谈论数百个K foo 在这里)。

问题是:如何正确地做到这一点?

【问题讨论】:

    标签: xml ssis


    【解决方案1】:

    我还不会担心优化性能。只需添加另一个 SSIS 步骤即可转换数据集。

    当您完成所有工作时,会检查绩效。 SSIS 转换比 XSLT 更容易维护。数百个 K 的 foo 应该不是问题,这取决于您运行模块的频率。我已经有一段时间没有将 SSIS 用于 ETL,所以我的速度并不快,但我正在使用 XSLT,如果你保持简单,额外的 SSIS 步骤更容易维护。

    只是我的意见。

    【讨论】:

      【解决方案2】:

      我还没有机会在 SSIS 中使用任何 XML 数据源。 BizTalk 是我们在这里选择的工具。不管怎样,我做了一些研究,发现了一篇很有帮助的文章:

      http://blogs.msdn.com/b/mattm/archive/2007/12/11/using-xml-source.aspx

      按照处理多个输出的部分进行操作,但执行以下操作:

      1. 用您的元素替换对其元素的所有引用
      2. 用您的元素替换对其元素的所有引用

      因此,基于此,根据文章设置您的 XML 数据源。使用上面提到的potin 使用高级属性编辑器对其进行修改。获取 bar 和 bar 的两个输出,并将它们路由到合并连接中。在 bar_Id 上加入他们。选择 bar 和 foo_Id 作为输出列。这将能够为您的 Bars 表提供数据。

      我知道这并不理想,因为您正在排序和合并加入。希望通过在 XML 数据源中进行排序不会对性能产生太大影响。

      另一个要考虑的解决方案是使用 XSLT 文件来展平 XML。这是通过控制流中的 XML 任务完成的。这里有一篇文章可能也有帮助:

      http://blogs.msdn.com/b/mattm/archive/2007/12/15/xml-source-making-things-easier-with-xslt.aspx

      祝你好运!

      【讨论】:

      • 这几乎就是我现在正在做的事情......我期望找到的是能够从其父元素向子元素的集合中添加一列,因为它已经由结构,但似乎没有简单的方法来做到这一点(或者我可能是盲人?)
      • 所以,我会尝试使用 XSLT 方法。它将 XML 模式展平到您只能从 XML 数据源获得单个输出的程度。有点讽刺的是,我们使用 XSLT 使 XML 像平面文件一样工作。
      【解决方案3】:

      @您对 Chris 的评论:有一种简单的方法可以在对象上添加列。在数据流任务中添加一个步骤,使用“派生列”转换步骤。在那里,添加/操作您需要的列。

      XSLT 很痛苦。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多