【发布时间】:2011-02-23 20:32:33
【问题描述】:
我是设计 ETL 流程的新手。目前我有两个数据库,一个是应用程序在日常事务中使用它的实时数据库。另一个是数据仓库。
我在实时数据库中有一个表,它会定期向其中插入新数据。目标是每天晚上 ETL 流程将实时数据库中的数据传输到数据仓库,然后删除实时数据库中的数据。
由于我缺乏知识,我得到的解决方案是实现一种称为滚动表的东西。基本上在实时数据库上,我有两个结构相同的表。我称它们为 tblLive1 和 tblLive2。我还有一个同义词叫tblLive。所有插入都是在同义词上完成的。同义词将指向其中一张表。
当我运行 ETL 过程时,我有一个存储过程,它会删除并创建一个指向 tblLive2 的新同义词。这允许 ETL 过程从 tblLive1 转换数据而不影响应用程序。假设 ETL 进程需要一个小时才能运行,我不希望 ETL 进程锁定表,阻止应用程序向其中插入新数据。
这个解决方案理论上应该可行,但并不优雅。
我确定这个问题是一个常见问题,还有其他解决方案吗?
【问题讨论】:
-
您使用的是什么数据库以及该数据库的版本?答案可能会高度依赖于数据库,除非您真的想要尝试提出与数据库无关的解决方案的开销。
-
我现在使用的是 SQL Server,但这个概念也适用于 Oracle。
标签: sql-server database etl data-warehouse