ETL:从200个表中提取-SSIS数据流或自定义T-SQL?


12

根据我的分析,我们数据仓库的完整维模型需要从200多个源表中提取。这些表中的某些将作为增量负载的一部分被提取,而另一些则将作为全负载。

需要注意的是,我们有大约225个具有相同模式的源数据库。

从我所看到的,在具有OLE DB源和OLE DB目标的SSIS中构建简单的数据流要求在设计时确定列和数据类型。这意味着仅用于提取,我最终将获得200多个数据流。

从可维护性的角度来看,这是我遇到的一个大问题。如果需要对提取代码进行某种彻底的更改,则必须修改200个不同的数据流。

另一个选择是,我编写了一个小脚本,该脚本读取要从一组元数据表中提取的源数据库,表名和列。该代码在多个循环中运行,并使用动态SQL通过链接服务器和OPENQUERY从源表中提取。

根据我的测试,这仍然不及将SSIS数据流与OLEDB源和目标一起使用的速度。所以我想知道我有什么样的选择。到目前为止的想法包括:

  1. 使用EZAPI以编程方式生成具有简单数据流的SSIS包。要提取的表和列将来自前面提到的相同的元数据表。
  2. 购买第三方软件(动态数据流组件)

解决此问题的最佳方法是什么?当涉及到.NET编程时,我是一个初学者,因此仅考虑基础知识所需的时间也是一个问题。


1
由于所有225个数据库都具有相同的架构,是否可以维护一个视图,以合并来自所有225个数据库的数据并将SSIS包指向该视图?尽管这看起来像是一个破坏性工具,并且不一定具有神奇的性能,但它听起来比225个SSIS软件包更容易管理(即使您在那里确实进行了一些自动化处理)。你也可以走到半路,并建立每组的数据库视图,如数据库1-25,26-50,51-75,等等
阿龙贝特朗

数据库驻留在多个服务器上,我认为这使其变得更加复杂。我实际上已经尝试在开发箱中针对225个数据库创建不同表的视图,并且读取数据的速度非常缓慢。
2012年

1
好吧,您只希望视图引用同一服务器上的数据库。再一次,针对所有225个表的单个视图将不会神奇地执行,但是我认为您仍然可以分而治之,并且没有225个数据流。
亚伦·伯特兰

Answers:


12

我不想在一个包中有200个数据流。打开并验证所需的时间会使您变老。

EzAPI很有趣,但是如果您是.NET SSIS的新手,那么,天哪,您不要这样。我认为与实际完成工作相比,您将花费更多的时间来学习SSIS对象模型以及可能与COM进行处理。

由于我很懒,因此我将BIML插入为您没有列出的免费选项。来自SO的答案/programming/13809491/generating-several-like-ssis-packages-file-data-source-to-db/13809604#13809604

  • 比姆是有趣的野兽。Varigence会很乐意向您出售Mist许可证,但这不是必需的。您所需要的只是BIDSHelper,然后浏览BimlScript,寻找适合您需求的食谱。一旦有了它,单击BIDSHelper中的上下文相关菜单按钮,然后飞快移动,它将生成软件包。

我认为这对您也可能是一种方法。您定义BIML来描述软件包的行为,然后生成它们。在这种情况下,您描述了要在哪里进行更改并且必须修复N个软件包,不,您可以修复问题的定义并重新生成软件包。

或者,如果您对框架足够熟悉,则可以使用EzAPI之类的东西来修复所有损坏的东西。哎呀,既然您将其标记为2005,那么如果您需要对现有软件包进行大规模修改,也可以尝试使用PacMan

SSIS设计注意事项

一般来说,我试图使我的软件包专注于解决单个任务(加载销售数据)。如果那需要2个数据流,那就这样吧。我讨厌继承的是导入导出向导中的一个程序包,在一个程序包中有许多不相关的数据流。将它们分解成可以解决特定问题的东西。随着表面积的减少,未来的增强功能的风险降低。另一个好处是,DimProducts当我的小仆处理加载SnowflakeFromHell程序包时,我可以进行加载。

然后,使用主软件包来编排子工作流程。我知道您使用的是2005,但是SQL Server 2012的SSIS版本是猫的睡衣。我喜欢项目部署模型以及程序包之间的紧密集成。

TSQL vs SSIS(我的故事)

至于纯TSQL方法,在先前的工作中,他们使用了73个步骤的工作将所有Informix数据复制到SQL Server中。通常需要大约9个小时,但可能会延长到12个小时左右。在他们购买了新的SAN之后,它的运行时间减少了大约7个小时以上。相同的逻辑过程,用SSIS重写是在不到2个小时的时间内。减少时间的最大因素很容易就是我们使用SSIS获得的“免费”并行化。代理作业以串行方式运行所有这些任务。主程序包基本上将表划分为处理单元(“运行复制表1”,表2等的5组并行的串行化任务集),在这里我试图将存储桶划分为近似相等大小的工作单元。这样一来,可以迅速填充60多个查找参考表,然后当处理过程进入“

使用SSIS的其他好处是,我可以“自由”配置,登录并访问.NET库以获取方形数据,而我需要将这些数据粘贴到圆孔中。我认为由于野兽的图形特性,与单纯的TSQL方法相比,维护(取消维护)SSIS包会更容易。

与往常一样,您的里程可能会有所不同。


BIML看起来非常有趣。我还考虑将每个数据流创建为一个单独的包,然后通过主包对其进行调用。您认为这更好吗?另外,如果您对T-SQL方法有意见,请很好奇。它的速度较慢,但​​我已经对其进行了测试,并且可以正常工作。
2012年

我已经更新了对设计和纯
tsql

0

您提到您有200个源表和225个数据库。我假设200个源表是所有225个数据库中所有表的计数(因为如果每个数据库中有200个表,则总表数将为45000)。您还提到数据库的模式与225个数据库相同。

您可以先仅为1个数据库构建SSIS软件包,然后在安排作业时,可以使用软件包配置更改数据库连接字符串(如果使用SQL 2005,则将使用软件包部署模型)。如前面的答复中所述,SQL 2012具有使用项目部署模型配置参数表的新方法。

您可以在http://www.sql-server-performance.com/2007/package-configuration-2005/上获得有关使用SSIS进行程序包配置的更多信息

您可以从此处/programming/15206184/how-to-configure-ssis-2012-project-to-run-under-different-environment-configurat获取有关使用项目参数的更多信息

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.