具体化视图的限制和已知问题
适用于:✅Azure 数据资源管理器
具体化视图源
- 具体化视图的源表:
- 必须是一个表,可以使用更新策略或“从查询中引入”命令直接将数据引入到其中。
- 只有在将 属性作为 move extents 命令的一部分时,才支持使用 move extents 或
setNewIngestionTime
将盘区从其他表移到具体化视图的源表(有关更多详细信息,请参阅 .move extents 和 .replace 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)
。
-
- 只有在将 属性作为 move extents 命令的一部分时,才支持使用 move extents 或
- 必须是一个表,可以使用更新策略或“从查询中引入”命令直接将数据引入到其中。
- 具体化视图的源表必须启用 IngestionTime 策略。 默认情况下该策略处于启用状态。
- 如果具体化视图使用默认
lookback
,则必须在具体化视图的查询中保留ingestion_time()
。 mv 扩展 或 透视 插件等运算符不会保留ingestion_time()
,因此无法在具体化视图中使用lookback
。 有关详细信息,请参阅 回溯期。 - 具体化视图的源表不能是具有 受限视图访问策略的表。
- 具体化视图不能基于另一个具体化视图创建,除非第一个具体化视图是
take_any(*)
类型的聚合。 请参阅基于具体化视图的具体化视图。 - 无法通过外部表定义具体化视图。
警告
- 如果对具体化视图的源表进行更改,或者数据更改导致具体化视图查询与预期具体化视图的架构不兼容,系统会自动禁用具体化视图。
- 若要避免此错误,具体化视图查询必须是确定性的。 例如,bag_unpack 或 透视 插件会导致不确定的架构。
- 当使用
arg_max(Timestamp, *)
聚合且autoUpdateSchema
为 false 时,对源表的更改也可能导致架构不匹配。- 可以通过将视图查询定义为
arg_max(Timestamp, Column1, Column2, ...)
或使用autoUpdateSchema
选项来避免此错误。
- 可以通过将视图查询定义为
- 删除源表中的列时,使用
autoUpdateSchema
可能会导致不可逆的数据丢失。 - 使用 MaterializedViewResult 指标监视具体化视图的自动禁用。
- 修复不兼容问题后,应使用 启用具体化视图 命令显式重新启用视图。
引入到源表中或从源表中删除的记录的影响
- 具体化视图仅处理引入到源表中的新记录。 从源表中删除的记录,无论是由于运行 data purge/soft delete/drop extents,还是由于保留策略或任何其他原因,都不会影响具体化视图。
- 具体化视图具有其自己的保留策略,该策略独立于源表的保留策略。 具体化视图可能包含源表中不存在的记录。
后继数据库
- 无法在后继数据库中创建具体化视图。 追随者数据库是只读的,而具体化视图需要执行写入操作。
- 在领导者数据库上定义的具体化视图可以从其追随者进行查询,就像领导者中的任何其他表一样。
- 使用先导群集监视后继数据库具体化视图。 有关详细信息,请参阅后续数据库中 具体化视图。
其他
- 不能基于具体化视图使用游标函数。
- 不支持从具体化视图连续导出。