繁体   English   中英

同步ETL和读取数据仓库

[英]Synchronizing ETL and reads on the Data Warehouse

我有以下情况

  • ETL将数据加载到DW中。
  • 报表可以按需运行,也可以与ETL同时运行,从而消耗DW中的数据。

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

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

做到这一点的最佳机制是什么? 数据库锁似乎不够智能,无法管理所需的优先级。

我应该实现自己的锁定机制吗? 如果是,是否有众所周知的设计? 必须考虑很多事情:跟踪当前正在运行的报告(读取锁定),在ETL无法通知其完成的情况下实现锁定过期,等等。

如果您使用的是Cognos,那么我认为您基本上是出于“如果ETL正在运行则阻止报告运行”的运气,除非您想弄糟文档不良的API。

最好的选择是确定特定的报告,通常是针对合计运行的报告,并确保您设置了ETL流程以最后更新事实和合计,并作为一项大的“更新”交易。 如果使用提供读取一致性的dbms,则应该能够做到这一点,而不会在报告中显示仅加载了一半数据的报告。

访问多个事实/多个摘要的报告将更加麻烦。 甚至可能您可能必须建立某种“表交换”,在其中构建所需的内容,然后alter table rename以换出表。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM