【发布时间】:2014-10-01 20:26:29
【问题描述】:
我必须从各种 SQL Server 表(大约 3 亿行)中收集大量数据,并将它们插入到我的数据仓库中的单个事实表中。
1/ 导入所有这些行的最佳策略是什么?
2/ 这是批量导入的好习惯吗?一批应该有多大? 10k 行可以吗?
【问题讨论】:
-
我计划像这样执行此导入:1/ 在每个源表中添加一个新列,称为 ImportedDate 作为 DATETIME2 NOT NULL 2/ 创建一个循环容器,读取前 10k 行 WHERE ImportedDate IS NOT NULL 3/ 决定执行更新(通过 Ole DB命令)或通过查找任务在目标中插入行 4/ 更新目标表中已处理行的 ImportedDate 列。
-
对于您的更新,我选择您将所有更新放在一个临时表中,然后从中执行一次更新。您将永远等待 SSIS 更新完成。
-
@ElectricLlama:你的意思是导入一个临时表中的所有数据,然后批量处理它们,然后从临时表中删除处理过的行?
-
可能。要点是不要使用 SSIS 更新,因为它很慢。您需要多久执行一次此操作,是否一次性完成?
-
同意@rvphx。这也取决于您的环境。无论如何.. 使用 SSIS 将单个表从源数据库导入到目标数据库中的单个暂存表。处理并保存到 Fact 表中的存储过程。如果您需要重新加载 Fact 表,请截断 Staging 和 Fact 表以重新加载。在 SSIS 中使用数据流任务导入表和执行 SQL 任务对象来启动存储过程。如果您有空间将源数据库还原到数据仓库 SQL Server 实例并使用 SQL 脚本或存储过程进行处理,则另一种选择
标签: sql-server ssis ssis-2008 large-data