具体化视图的限制和已知问题

具体化视图源

  • 具体化视图的源表:
    • 必须是一个表,可以使用更新策略“从查询中引入”命令直接将数据引入到其中。
      • 只有在将 setNewIngestionTime 属性作为 move extents 命令的一部分时,才支持使用 move extents 将盘区从其他表移到具体化视图的源表(有关更多详细信息,请参阅 .move extents 命令)。
      • 将盘区移到具体化视图的源表,而不使用 setNewIngestionTime 可能会失败,并出现以下错误之一:
        • Cannot drop/move extents from/to table 'TableName' since Materialized View 'ViewName' is currently processing some of these extents
        • Cannot move extents to 'TableName' since materialized view 'ViewName' will not process these extents (can lead to data loss in the materialized view)
  • 具体化视图的源表必须启用 IngestionTime 策略(默认启用)。
  • 具体化视图的源表不能是具有受限视图访问策略的表。
  • 具体化视图不能基于另一个具体化视图创建,除非第一个具体化视图是 take_any(*) 类型的聚合。 请参阅基于具体化视图的具体化视图
  • 无法通过外部表定义具体化视图。

警告

  • 如果对具体化视图的源表的更改或者数据的更改导致具体化视图查询与所需的具体化视图的架构不兼容,则系统会自动禁用具体化视图。
    • 若要避免此错误,具体化视图查询必须是确定性的。 例如,bag_unpackpivot 插件会导致架构不确定。
    • 当使用 arg_max(Timestamp, *) 聚合且 autoUpdateSchema 为 false 时,对源表的更改也可能导致架构不匹配。
      • 可以通过将视图查询定义为 arg_max(Timestamp, Column1, Column2, ...) 或使用 autoUpdateSchema 选项来避免此错误。
  • 删除源表中的列时,使用 autoUpdateSchema 可能会导致不可恢复的数据丢失。
  • 使用 MaterializedViewResult 指标监视具体化视图的自动禁用。
  • 修复不兼容问题后,应使用 enable materialized view 命令显式重新启用视图。

引入到源表中或从源表中删除的记录的影响

  • 具体化视图仅处理引入到源表中的新记录。 从源表中删除的记录,无论是由于运行 data purge/soft delete/drop extents,还是由于保留策略或任何其他原因,都不会影响具体化视图。
  • 具体化视图具有其自己的保留策略,该策略独立于源表的保留策略。 具体化视图可能包含源表中不存在的记录。

后继数据库

  • 无法在后继数据库中创建具体化视图。 追随者数据库是只读的,而具体化视图需要执行写入操作。
  • 在领导者数据库上定义的具体化视图可以从其追随者进行查询,就像领导者中的任何其他表一样。
  • 使用先导群集监视后继数据库具体化视图。 有关更多详细信息,请参阅后续数据库中的具体化视图

其他

  • 不能基于具体化视图使用游标函数
  • 不支持从具体化视图连续导出。