首批通过分布式安全可靠测评,为关键业务系统打造
创建增量物化视图报错 -4016
更新时间:2026-07-24 10:01
问题现象
创建增量刷新(REFRESH FAST)的物化视图时,报错 -4016 Unexpected, can not find cg idx。
错误日志示例如下:
[2025-12-04 06:06:10.877920] WDIAG [SHARE.SCHEMA] get_column_group_index (ob_table_schema.cpp:10741) [3117180][T1_DdlBuild][T1004][YB420A8DBA45-000644F1ADFE96AC-0-0] [lt=17][errcode=-4016] Unexpected, can not find cg idx(ret=-4016, column_id=19, max_used_column_group_id=1005)
执行的 SQL 语句如下:
create materialized view supplier_xx_stage (PRIMARY KEY (itemid)) WITH COLUMN GROUP(each column) REFRESH FAST AS
select itemid,
action,
operation
from supplier_xx
where operation = 'purchaserId';
根据报错信息 column_id=19 提示,系统在基表 supplier_xx 中无法找到该列 ID 对应的列。查询确认,基表中确实不存在此列。
基表 supplier_xx 为列存表。查询其列组信息如下:
select * from __all_virtual_column_group_history where table_id = 500010;
查询结果显示,该表的列组 ID 最大为 1012,不存在列 ID 为 19 对应的列组。
进一步分析 rootservice.log 日志,发现报错发生在执行内部 SQL 时,该 SQL 用于将基表数据插入物化视图容器。内部 SQL 中自动添加了一个隐藏列 __MV_DEP_COL_0$$,其 column_id 为 19,该列在基表中不存在,导致系统无法找到对应的列组索引(cg idx)。
关键信息
- 错误代码:
4016 (HY000) - Internal error - Unexpected, can not find cg idx - 根本原因:系统为物化视图自动生成的隐藏主键列
__MV_DEP_COL_0$$在基表中不存在。 - 触发条件:在特定版本范围内,创建增量物化视图时,其
SELECT语句未包含基表的主键列。
问题原因
此问题由 OceanBase 内核版本行为变更引起。
- 在 V4.3.5 BP5 Hotfix2 之前的版本中,如果创建物化视图的
SELECT语句未包含基表的主键列,系统会直接报错提示xx primary keys(id) are not in the select list。此时,用户需要在物化视图定义中显式地包含主键列。 - 从 V4.3.5 BP5 Hotfix2 版本开始,系统修改了此逻辑。当创建物化视图未包含主键时,系统会尝试自动创建一个隐藏的主键列
__MV_DEP_COL_0$$。然而,在执行数据填充时,系统在基表中找不到这个自动添加的隐藏列,从而引发-4016错误。
问题的风险及影响
- 创建增量物化视图的 DDL 操作失败。
- 可能阻塞依赖该物化视图构建的后续数据处理流程。
适用版本
- 影响版本:
V4.3.5 BP5 Hotfix2(oceanbase-4.3.5.5-105020022025121200), V4.3.5 BP5(oceanbase-4.3.5.5-105000212025111617) - 修复版本:
V4.3.5 BP5 Hotfix2(oceanbase-4.3.5.5-105020022025121200)
解决方法
在创建物化视图时,确保其 SELECT 语句中包含了基表的主键列。
如果问题在采取上述措施后仍然出现,请联系 OceanBase 技术支持获取帮助。
规避方式
- 在创建物化视图时,始终在定义中显式指定基表的主键列,避免依赖系统的自动添加行为。
- 确认您使用的 OceanBase 版本。如果处于影响版本范围内,建议评估升级至修复版本
V4.3.5 BP5 Hotfix2或更高版本。