【问题标题】:Best Way to ETL Multiple Different Excel Sheets Into SQL Server 2008 Using SSIS使用 SSIS 将多个不同的 Excel 工作表 ETL 到 SQL Server 2008 的最佳方法
【发布时间】:2012-04-20 06:41:49
【问题描述】:

我已经看到很多示例,说明如何使用 Foreach 循环容器枚举 Excel 工作簿或工作表的集合,并假设所有源文件的数据结构相同,并且数据将转到单个目标表。

处理以下情况的最佳方法是什么: - 一个包含 10 - 20 张工作表的 Excel 工作簿或 10 - 20 个带 1 张工作表的 Excel 工作簿。 - 每个工作簿/工作表都有不同的架构 - 每个源表都有一个 1:1 匹配的目标表。 - 标准清理:将创建工作簿并将其放置在“加载”文件夹中,SSIS 包在读取加载文件夹中的文件并在成功完成后将它们移动到存档文件夹的作业上运行

我知道我可以为每个工作簿创建一个单独的 SSIS 包,但这似乎很难维护。非常感谢任何帮助!

【问题讨论】:

  • 由于每张工作表都有不同的架构,因此没有简单的方法来实现这一点。无法使用标准 SSIS 连接管理器为 Excel 工作簿动态设置工作表。我会为每张工作表创建一个数据流。
  • 我同意。无法自动映射列。即使您使用相同的列名。只有一些编码可以帮助你一点,但这是很多工作。

标签: sql ssis etl


【解决方案1】:

我们很久以前就遇到过同样的问题。我只是总结一下我们所做的。 我们使用 C# 以编程方式编写了一个 SSIS 包。维护了一个 MetaTable,它保存了平面文件的信息(表格名称、列、这些列在平面文件中的位置。)。我们提取平面文件名,然后向元表查询该平面文件所属的表、它所具有的列以及平面文件中的列位置。

我们通过将每个平面文件作为命令行参数传递给 PackageExe,在 SQLSERVER 中执行包。因此它会读取并处理每个平面文件。

示例假设我们有一个平面文件FF,我们首先提取平面文件的名称,然后通过查询数据库得到表名,让我们说是 TT,其中包含列 COL-1COL-2,位置为 1 到 1011分别为 20。通过从 MetaTable 中读取这些信息,我现在创建了一个派生列转换(包)。

我们的应用程序在一个文件夹中有一组平面文件,通过使用“For Loop Container SSIS”,我们一次得到一个平面文件并执行上述过程。

【讨论】:

    猜你喜欢
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多