2009-12-22 27 views
0

我对SQL Server 2005有一个ETL类型要求。我是SSIS的新手,但我相信它会是正确的工具。使用SSIS加载XML

该项目涉及到一个会员卡奖励系统。计划中的合作伙伴每个月都会发送一个或多个XML文件,详细说明上个月的合格交易。每个XML文件最多可以包含10,000条记录。 XML的格式非常简单,4个“标题”元素,然后是包含记录元素的重复序列。关键记录元素是card_number,partner_id和points_awarded。

该进程当前正在生产中运行,但它是作为一个c#应用程序开发的,它为每个记录单独运行插入。这是非常缓慢的,超过8个小时处理10,000个记录文件。通过使用SSIS,我希望能够提高性能和可维护性。

我需要做的:

  1. 收集文件
  2. 验证对XSD的记录
  3. 业务规则验证。对于每个记录,我需要确保提供了有效的partner_id和card_number。为此,我需要对合作伙伴和卡片表执行查找。应将任何“不良”记录剥离并写入响应XML文件。这与请求XML格式相同,只是增加了一个error_code元素。 “好”记录需要导入到一个表中。

我有点1和2工作正常。我还创建了一个XSLT来将XML转换为准备插入的平面格式。对于第3点,我开始在控制流程表面中使用ForEach循环容器控件,循环每个XML节点和SQL查找任务。但是,这需要每次查找时调用数据库,并调用文件系统来写出XML文件以查找“坏”和“好”记录。

我相信通过在数据流表面上使用查找控件可以获得更好的性能。不幸的是,我没有使用数据流表面的经验。

有没有人有解决问题的最佳方法的建议?我在网上搜索了一些SSIS软件包的例子,这些软件包与我所需要的类似,但没有发现 - 有没有在那里?

谢谢

Rob。

回答

1

SSIS经常用于加载数据仓库,所以您的要求并不新鲜。看看this question/answer,以帮助您开始使用教程等

的for-each在控制流是通过目录中的文件进行循环,在DB等数据流表是其中的记录飞过从转变源(你的XML文件)到目的地(表格)。

您确实需要查找其中的一种风格。 Google for“加载数据仓库维度”;这将最终向您展示几种有效使用查找转换的技术。为了扁平化XML(如果足够简单),我只是简单地在数据流中使用XML源,XML任务是用于较重的东西。