【问题标题】:Best practice to organize a 200+ tables import project组织 200 多个表导入项目的最佳实践
【发布时间】:2012-11-20 08:41:28
【问题描述】:

这个问题将是关于 SSIS 项目中型导入的最佳实践的纯粹组织问题。

所以我有源数据库,它不断被新数据丰富。然后我有一个临时数据库,有时我会从源数据库加载数据,这样我就可以处理源数据库的副本并迁移当前系统。我实际上是在使用 SSIS Visual Studio 项目来导入这些数据。

我的问题是我意识到我的项目的实际设计并不是真正优化的,现在我想将此项目移动到 SQL Server,以便我可以安排导入而不是手动运行 Visual Studio 项目。这意味着实际项目需要清理和优化。

所以基本上,对于每个表,过程很简单:截断表,从源中提取并加载到目标中。我有大约200张桌子。提取不能并行化,因为源数据库一次只接受一个连接。那么你会如何设计这样一个项目呢?

我从 Microsoft 文档中了解到,他们建议每个包使用一个数据流,但管理 200 个不同的包似乎是不可能的,尤其是我必须链接来安排导入。另一方面,包含 200 个数据流的单个包似乎也无法处理......


21/11 编辑:

开始这个项目时我想使用的第一个方法是通过迭代表名列表来自动提取我的表。如果我的源表和目标表具有所有相同的模式对象名称,这可能会很好,但是源和目标数据库来自不同的供应商(BTrieve 和 Oracle),它们也有不同的命名限制。例如,BTrieve 不保留名称并允许超过 30 个字符的名称,而 Oracle 不允许。这就是我最终使用半自动列映射(大多数是自动的)手动创建 200 个数据流的方式。

在为目标数据库生成 CREATE TABLE 查询时,我创建了一个可重用的 C# 库,其中包含生成新模式对象名称的方法,以防万一该方法可以自动化。如果有任何自定义工具可以生成可以使用外部 .NET 库的包,那么这可能会奏效。

【问题讨论】:

    标签: ssis project-organization ssis-data-flow


    【解决方案1】:

    您是否研究过BIDS Helper 的 BIML(商业智能标记语言)作为包生成工具?我用它来创建多个包,它们都遵循相同的基本截断-提取-加载模式。如果您需要比 BIML 内置的更聪明一点,可以使用 BimlScript,它增加了将 C# 代码嵌入到处理中的能力。

    根据您的问题描述,我相信您可以编写一个 BIML 文件并生成 200 个单独的包。您可能可以使用它来生成一个包含两百个数据流任务的包,但我从未尝试过如此努力地推动 SSIS。

    【讨论】:

    • 谢谢你,我会仔细看看。我更新了我的原始问题,使其符合您描述的场景。
    【解决方案2】:

    您基本上可以创建 10 个子包,每个子包有 20 个数据流任务,并创建一个主包来触发这些子 pkgs。使用parent to child configuration 创建单个XML file 配置文件。定义串行执行包的优先约束主 pkg 中的时尚。这样与200个包或200个数据流任务的单个包相比,可维护性会更好。

    【讨论】:

      【解决方案3】:

      以下链接可能对您有用。

      Single SSIS Package for Staging Process

      希望这会有所帮助!

      【讨论】:

      • 这实际上是我在开发这个项目时想要使用的第一种方法,所以一切都是自动的。但问题是我的源(BTrive)和暂存(Oracle)有非常不同的模式对象命名约定,因此列名的自动映射是不可能的(例如,源数据库中的“时间”在我的目的地变成了“时间_” DB,因为“TIME”是 Oracle 中的保留字)。因此,所有这些数据流都必须手动配置。
      猜你喜欢
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2020-12-04
      • 1970-01-01
      • 2021-01-24
      • 2012-01-08
      相关资源
      最近更新 更多