【问题标题】:Load XML Using SSIS使用 SSIS 加载 XML
【发布时间】:2010-12-09 07:30:13
【问题描述】:

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

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

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

我需要做什么:

  1. 收集文件
  2. 针对 XSD 进行验证
  3. 记录上的业务规则验证。对于每条记录,我需要确保提供了有效的 partner_id 和 card_number。为此,我需要对合作伙伴和卡片表执行查找。任何“坏”记录都应该被删除并写入响应 XML 文件。这与请求 XML 的格式相同,但添加了 error_code 元素。 “好”记录需要导入到单个表中。

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

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

有人对解决问题的最佳方法有什么建议吗?我在网上搜索了 SSIS 包的示例,这些包的功能与我需要的类似,但没有找到 - 那里有吗?

谢谢

罗伯。

【问题讨论】:

    标签: ssis


    【解决方案1】:

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

    控制流中的 For-each 用于循环遍历目录中的文件、数据库中的表等。数据流是记录从源(您的 xml 文件)到目标(表)的转换。

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

    为了扁平化 XML(如果足够简单的话),我会简单地在数据流中使用 XML 源,XML 任务是处理较重的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      相关资源
      最近更新 更多