Oracle / RDBMS增量查询引擎

问题描述 投票:1回答:1

我不确定“ incremental”是否是正确的词。我将继续说明问题。

我有两个大桌子,X和Y。Z是另一个表,它是X和Y的连接。

Create Table Z as 
select X.col1, X.col2, Y.col2, Y.col3 
from X 
join Y on X.id=Y.id"

现在,每当表X或Y中的任何值更新时,我在Z中的数据都应刷新。有两种方法可以做到:

  1. 定期定期刷新表Z。缺点是1)数据没有实时更新2)重新运行联接的刷新花费了很多时间,尽管只更改了一个字段。

  2. 根据X和Y的任何变化在表Z中进行增量更新。可能的好处是它是实时的,不需要花费太多时间进行更新,因为仅会更新相关的行。

我正在寻找有关如何为Oracle或任何其他数据库实施2)方法的任何帮助/说明?

sql oracle join etl
1个回答
3
投票

要将贾斯汀和亚历克斯的评论(和隐含答案)转变为答案,您可能希望使用实例化视图。如果您不熟悉它们,而常规视图中的数据实际上并不存在,而是从视图定义中的表中的数据返回而来,则物化视图将创建数据的物理表示,并且该物化视图可以以多种方式刷新。我将表X和表Y(“基本表”)之间的联接称为下面的表Z,但Z可能是表,视图或实例化视图:

正如亚历克斯所暗示的,您可能不想使用物化视图可能有某些原因,所以让我将一些常见原因not提到:

  • 生成的实例化视图将占用大量物理磁盘空间;例如在连接大表XY时会创建一个大表Z
  • 基表X和Y经常更新,并且不像基表更新那样频繁地访问表Z

同样,以上是皮疹的概括;您将要测试各种选项。

实例化视图而不是实际表Z或视图Z的优点包括:

  • 与从基本表中获取数据的视图相比,对数据的快速访问
  • 可以根据基于时间的时间表,或者在基表上的数据发生更改时,或者根据请求,刷新实例化视图。由于包含了标签,因此可以在运行特定过程或作业后刷新实例化视图。
  • 您可以在基表上创建实例化视图日志,以进一步加快实例化视图的刷新速度。
  • 如果频繁查询表Z,则实例化视图将[[可能比常规视图快。
因此,请测试几种方法:前两种方法,常规视图和实例化视图。如果表Z不需要基本表中的许多列,则可以使用常规视图。如果联接条件产生的行数很少,则物化视图可能是最好的。

参考:

© www.soinside.com 2019 - 2024. All rights reserved.