使用SSIS加载XML

时间:2009-12-22 22:02:37

标签: ssis

我对SQL Server 2005有一个ETL类型要求。我是SSIS的新手,但我相信它将是适合这项工作的正确工具。

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

该流程目前正在生产中运行,但它是作为c#app开发的,它为每个记录单独运行插入。它非常慢,需要8个多小时才能处理10,000个记录文件。通过使用SSIS,我希望提高性能和可维护性。

我需要做什么:

  1. 收集文件
  2. 针对XSD进行验证
  3. 对记录的业务规则验证。对于每条记录,我需要确保提供了有效的partner_id和card_number。为此,我需要对伙伴和卡表执行查找。应删除任何“坏”记录并将其写入响应XML文件。这与请求XML的格式相同,但添加了error_code元素。需要将“好”记录导入单个表中。
  4. 我有点1和2工作正常。我还创建了一个XSLT,将XML转换为可以插入的平面格式。对于第3点,我开始在控制流表面中使用ForEach循环容器控件,循环每个XML节点和SQL Lookup任务。但是,这需要为每次查找调用数据库,并调用文件系统来写出“坏”和“好”记录的XML文件。

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

    有没有人建议解决问题的最佳方法?我在网上搜索了SSIS软件包的例子,这些软件包做了类似于我需要的东西,但没有找到 - 那里有没有?

    由于

    罗布。

1 个答案:

答案 0 :(得分:1)

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

For-each in control flow用于遍历目录中的文件,db中的表等。数据流是记录通过源(您的xml文件)到目标(表)的转换。

您确实需要以多种口味中的一种进行查找。 Google为“ssis加载数据仓库维度”;这最终将向您展示有效使用查找转换的几种技术。

为了展平XML(如果足够简单),我只是在数据流中使用XML源,而XML任务则是为了更重要的东西。