具体化视图策略

本文提供了可在具体化视图上设置的策略的相关信息。

保留和缓存策略

具体化视图有保留策略缓存策略。 默认情况下,具体化视图会派生数据库保留和缓存策略。 可以使用保留策略管理命令缓存策略管理命令来更改这些策略。

这两个策略仅应用于具体化视图的具体化部分。 有关“具体化部分”与“增量部分”之间区别的说明,请参阅具体化视图的工作原理。 例如,如果某个具体化视图的缓存策略设置为 7d,但其源表的缓存策略设置为 0d,则查询具体化视图时,可能仍会出现磁盘未命中的情况。 发生此行为是因为源表(增量部分)也参与查询。

具体化视图的保留策略与源表的保留策略无关。 如果需要更短的时间段的源记录,则源表的保留策略可以短于具体化视图的保留策略。 建议将最小保留策略至少保留几天,并在源表上将可恢复性设置为 true。 此设置可用来从错误中快速恢复以及进行诊断。

注意

不支持源表上的零保留策略。

保留策略和缓存策略都依赖于区创建时间。 具体化视图的区创建时间取决于记录的最后一次更新。

注意

具体化过程会尝试最大程度地降低视图的具体化部分的更新量。 如果视图中的记录不需要更新,则不会进行更新。 例如,当具体化视图是 take_any(*) 聚合时,具有相同分组依据键的新记录将不会重新引入到视图中,因此保留策略会根据最早的引入记录执行。

分区策略

可以在具体化视图上应用分区策略。 仅当大部分或全部视图查询按具体化视图的分组依据键之一进行筛选时,才建议在具体化视图上配置分区策略。 这种情况在多租户解决方案中很常见,其中,实例化视图的分组依据键之一是租户的标识符(例如 tenantIdcustomerId)。 有关详细信息,请参阅分区策略支持的方案页中介绍的第一个用例。

有关用于更改具体化视图的分区策略的命令,请参阅分区策略命令

在具体化视图上添加分区策略会增加具体化视图中的区数,并会为具体化过程平添更多“工作”。 若要详细了解此行为的原因,请参阅具体化视图的工作原理中提到的区重新生成过程。

行级别安全策略

行级安全性可以应用于具体化视图,但有几个限制:

  • 该策略只能应用于具有 arg_max()/arg_min()/take_any() 聚合函数的具体化视图;或者仅当行级别安全性查询引用具体化视图聚合的键组时才应用此策略。
  • 此策略仅应用于视图的具体化部分
    • 如果未在具体化视图的源表上定义相同的行级安全策略,则查询具体化视图时可能会返回应由策略隐藏的记录。 发生这种情况是因为查询具体化视图时也会查询源表。
    • 如果视图为 arg_max()arg_min()/take_any(),则建议在源表和具体化视图上定义相同的行级安全策略。
  • arg_max()arg_min()/take_any() 具体化视图的源表上定义行级安全策略时,如果没有在具体化视图本身上定义行级安全策略,则命令会失败。 失败的目的在于提醒用户存在潜在的数据泄露,因为具体化视图可能会公开信息。 若要缓解此错误,请执行以下操作之一:
    • 定义针对具体化视图的行级安全策略。
    • 通过将 allowMaterializedViewsWithoutRowLevelSecurity 属性添加到 alter policy 命令来选择忽略错误。 例如:
    .alter table SourceTable policy row_level_security enable with (allowMaterializedViewsWithoutRowLevelSecurity=true) "RLS_function"

有关在具体化视图中配置行级安全策略的命令,请参阅 row_level_security 策略命令