所以我今天刚刚开始挖掘SSIS,所以如果有一些明显缺少的东西,不要太讨厌。
所以我有一个XML文件(来自第三方)
<root>
<foo>
<fooId>12345</fooId>
<name>FOO</name>
<bars>
<bar>BAR 1</bar>
<bar>BAR 2</bar>
[...]
</bars>
</foo>
[...]
</root>
和我的DB中的相应表格:
Foo with fields(FooID,Name)
带字段的栏(BarID(身份PK),FooID,名称)
所以基本上Bar就像Foo的一组属性。
所以我添加一个指向该文件的XML源,它生成3个不同的数据集(foo
,bars
,bar
)。问题是bar
集包含bar
的值+一些自动生成的ID,这不是很有用。我从这里看到获得bar
值为bar
和fooId
的{{1}}集的唯一方法是通过排序和合并加入这些集合,这看起来很奇怪,可能会残酷谋杀性能(我们在这里谈论数百K的foo。)
问题是:如何正确地做到这一点?
答案 0 :(得分:1)
我还没有机会在SSIS中使用任何XML数据源。 BizTalk是我们的首选工具。无论如何,我做了一些研究,发现了一篇非常有用的文章:
http://blogs.msdn.com/b/mattm/archive/2007/12/11/using-xml-source.aspx
按照有关处理多个输出的部分进行操作,但执行以下操作:
因此,基于此,根据文章设置XML数据源。使用上面提到的potins使用高级属性编辑器修改它。获取条形和条形的两个输出并将它们路由到合并连接。内部将它们连接在bars_Id上。选择bar和foo_Id作为输出列。这将能够提供您的酒吧表。
我知道这并不理想,因为你正在整理和合并加入。希望通过在XML数据源中进行排序,不会对性能产生很大的影响。
要考虑的另一个问题是使用XSLT文件来展平XML。这是通过控制流中的XML任务完成的。这篇文章可能也有帮助:
http://blogs.msdn.com/b/mattm/archive/2007/12/15/xml-source-making-things-easier-with-xslt.aspx
祝你好运!答案 1 :(得分:1)
我不担心优化性能。只需添加另一个SSIS步骤即可转换数据集。
当你有整个工作审查表现。 SSIS转换比XSLT更容易维护。数百K的foo不应成为问题,具体取决于您运行模块的频率。我已经有一段时间没有使用SSIS for ETL了,所以我对它的速度并不高,但是我使用的是XSLT,如果你保持简单,那么额外的SSIS步骤就更容易维护了。
只是我的意见。
答案 2 :(得分:1)
@您对Chris的评论:有一种简单的方法可以在对象上添加列。在数据流任务中添加一个步骤,使用“派生列”转换步骤。在那里,添加/操作你需要的列。
XSLT很痛苦。