同步ETL并读取数据仓库

时间:2012-08-21 14:55:30

标签: sql-server synchronization data-warehouse etl

我有以下方案

  • ETL将数据加载到DW中。
  • 报告按需运行,可能与ETL同时运行,使用DW中的数据。

这是我的问题:我需要确保报告中不包含部分数据:

  • 如果ETL准备好加载数据时报告正在运行,则ETL必须等待报告完成。
  • 如果正在加载ETL并请求报告,则报告必须等待ETL完成。
  • 如果ETL正在等待加载并请求报告,则报告必须等待ETL运行并完成 - ETL始终优先于报告。

获得此功能的最佳机制是什么?数据库锁似乎不够智能,无法管理我需要的优先级。

我应该实现自己的锁定机制吗?如果是的话,是否有一个众所周知的设计呢?必须考虑许多事项:跟踪当前正在运行的报告(锁定读取),对ETL未通知完成时的情况实施锁定到期等等。

2 个答案:

答案 0 :(得分:1)

如果你正在使用Cognos,那么我认为你基本上没有运气,因为“如果ETL正在运行就阻止报告运行”的设置类型,除非你想在严重记录的API中搞砸。

您最好的选择是识别特定报告,通常是针对聚合运行的报告,并确保设置ETL流程以最后更新事实和汇总,并作为一个大的“更新”事务。如果你使用一个为你提供读一致性的dbms,你应该能够做到这一点,而不会出现只有一半数据加载到它的报告。

访问多个事实/多个aggs的报告将更加麻烦。甚至可能是你可能需要设置某种“表格交换”,你可以在其中构建你需要的alter table rename以换出表格。

答案 1 :(得分:0)

你可以让etl进程在启动时在表中的记录中设置一个标志,并在它完成时取消设置吗?然后,报告系统可以查询此表以查看是否已设置标志,并通知用户仓库正在运行,并将报告放入在ETL过程完成时处理的队列中,或者告诉用户稍后再尝试。如果您想允许用户使用已经处理的事实,您的标志表将需要在表格中 - 即在每个表的标记记录上。