8kb*_*8kb 13 sql-server-2005 data-warehouse sql-server etl ssis
根据我的分析,我们数据仓库的完整维度模型需要从 200 多个源表中提取。其中一些表将作为增量加载的一部分提取,而其他表将作为完整加载。
需要注意的是,我们有大约 225 个具有相同架构的源数据库。
据我所知,在 SSIS 中构建一个带有 OLE DB 源和 OLE DB 目标的简单数据流需要在设计时确定列和数据类型。这意味着我最终会得到 200 多个数据流,仅用于提取。
从可维护性的角度来看,这对我来说是一个大问题。如果我需要对提取代码进行某种彻底的更改,我将不得不修改 200 个不同的数据流。
另一种选择是,我编写了一个小脚本,用于读取我想从一组元数据表中提取的源数据库、表名和列。代码在多个循环中运行,并使用动态 SQL 通过链接服务器和 OPENQUERY 从源表中提取。
根据我的测试,这仍然不如使用带有 OLEDB 源和目标的 SSIS 数据流快。所以我想知道我有什么样的选择。到目前为止的想法包括:
解决这个问题的最佳方法是什么?当谈到 .NET 编程时,我是一个初学者,所以仅仅学习基础知识所需的时间也是一个问题。
bil*_*nkc 13
我不想在一个包中包含 200 个数据流。打开和验证所需的时间会让您提前变老。
EzAPI 很有趣,但如果您不熟悉 .NET和SSIS,哦不,您不会想要那样的。我认为与实际完成工作相比,您将花费更多的时间来了解 SSIS 对象模型和可能处理 COM。
由于我很懒惰,我会将 BIML 作为您未列出的免费选项插入。来自 SO /sf/ask/966664401/#13809604的答案
我认为这对你来说也可能是一种方法。您定义您的 BIML 来描述您的包的行为方式,然后生成它们。在您描述进行更改并必须修复 N 个包的场景中,不,您修复了问题的定义并重新生成包。
或者,如果您已经足够熟悉该框架,则可以使用 EzAPI 之类的工具来修复所有损坏的东西。哎呀,既然您已经将其标记为 2005,那么如果您需要对现有软件包进行大规模修改,您也可以尝试一下PacMan。
一般来说,我尽量让我的包专注于解决单个任务(加载销售数据)。如果这需要 2 个数据流,那就这样吧。我讨厌继承的是来自导入导出向导的包,在一个包中包含许多不相关的数据流。将它们分解成可以解决非常具体问题的东西。随着表面积的减少,它使未来的增强风险降低。另一个好处是我可以DimProducts在我的仆从处理加载SnowflakeFromHell包的同时进行加载。
然后使用主包来编排子工作流。我知道你在 2005 年,但 SQL Server 2012 的 SSIS 版本是猫的睡衣。我喜欢项目部署模型以及它允许包之间的紧密集成。
至于纯 TSQL 方法,在之前的工作中,他们使用 73 步作业将所有 Informix 数据复制到 SQL Server 中。通常需要大约 9 个小时,但可能会延长到 12 个小时左右。在他们购买了一个新的 SAN 之后,时间缩短到了大约 7 个多小时。同样的逻辑过程,在 SSIS 中重写是一致的不到 2 小时。很容易缩短那个时间的最大因素是我们使用 SSIS 获得的“免费”并行化。Agent 作业按顺序运行所有这些任务。主包基本上将表划分为处理单元(“运行复制表 1”、表 2 等的 5 组并行序列化任务),我尝试将存储桶划分为大小相等的工作单元。这使得 60 个左右的查找参考表能够快速填充,然后处理在进入“
使用 SSIS 的其他优点是我可以获得“免费”配置、日志记录和访问 .NET 库的方形数据,我需要将其打入圆孔。我认为,凭借野兽的图形特性,维护(假冒维护)SSIS 包比纯 TSQL 方法更容易。
与往常一样,您的里程可能会有所不同。
| 归档时间: |
|
| 查看次数: |
11815 次 |
| 最近记录: |