对已建立搜索视图(Search View)的源表进行DDL操作时,不同类型的变更对同步链路的影响不同。本文介绍各类DDL操作对搜索视图的影响规则,以及需要重建搜索视图时的最佳实践。
源表DDL变更影响
下表列出了各类DDL操作对搜索视图同步链路的具体影响。
变更类别 | 具体操作 | 同步是否正常 | 说明 |
列变更 | 删除列 | 是 | 存量数据中仍会保留被删除字段的值,增量数据中该字段的值将为 |
增加列 | 是 | 新增字段不会被自动同步至搜索视图。如需同步新增字段,请参见搜索视图变更实践。 | |
修改列类型 | 视类型而定 | 类型兼容(如 类型不兼容:会导致搜索视图不可用,需重建搜索视图。 | |
重命名列 | 否 | 搜索视图使用创建时的列名。重命名列后搜索视图不识别修改后的源表字段,需重建搜索视图。 | |
其他(调整列顺序、修改默认值、修改注释、扩展VARCHAR长度、修改字符集、修改自增属性、修改NULL约束等) | 是 | 这些操作不影响搜索视图的同步。 | |
索引变更 | 增加、删除或修改二级索引 | 是 | 二级索引的变更不影响搜索视图的同步。 |
删除或修改主键索引 | 否 | 搜索视图依赖源表的主键进行数据同步。变更主键后需重建搜索视图。 | |
表变更 |
| 否 | 搜索视图无法感知 |
其他( | 是 | 这些操作不影响搜索视图的同步。 | |
分区表变更 | 转换为分区表、增加分区、合并分区、重新分配分区、分析分区、检查分区、优化分区、重建分区、转换为非分区表、局部索引等 | 是 | 这些操作不影响搜索视图的同步。 |
删除分区( | 否 | 搜索视图无法感知这些操作。如需删除数据并同步至PolarSearch,请使用 | |
交换分区( | 否 | 搜索视图无法感知指定分区数据的直接替换或修复,其他分区数据不受影响。建议执行后需重建搜索视图。 |
搜索视图变更实践
当需要变更搜索视图的同步结构(如新增同步字段),建议采用“新索引 + 新搜索视图”的方式进行重建。待新搜索视图数据同步完成并验证无误后,再将业务查询流量切换至新的索引。
暂不支持非重建的在线视图变更。
示例:为shop.user表新增字段并重建搜索视图。假设原搜索视图将shop.user表(含id, name, phone, gmt_create字段)同步至user_v1索引。现需新增membership_level字段,并确保线上查询不受影响。
创建新索引:在PolarSearch节点中创建一个名为
user_v2的新索引,并在其映射关系中包含新字段membership_level。PUT user_v2 { "mappings": { "properties": { "id": { "type": "keyword" }, "name": { "type": "text", "fields": { "keyword": { "type": "keyword" } } }, "phone": { "type": "keyword" }, "gmt_create": { "type": "date" }, "membership_level": { "type": "integer" } } } }修改源表:在源端PolarDB MySQL版的
user表中增加新列。ALTER TABLE shop.user ADD COLUMN membership_level TINYINT NOT NULL DEFAULT 0 COMMENT '会员等级';新建搜索视图:创建一个新的搜索视图,将
shop.user表的数据同步到user_v2索引。CREATE SEARCH VIEW user_v2 AS SELECT id, name, phone, gmt_create, membership_level FROM shop.user;验证与切换:通过
SHOW SEARCH VIEW STATUS查看新搜索视图的状态,待同步时延降至约0~1秒后,验证新索引中的数据是否正确。确认无误后,将业务查询流量切换到新的user_v2索引。清理旧资源:观察新搜索视图运行稳定后,删除旧的搜索视图和PolarSearch中的
user_v1索引。DROP SEARCH VIEW user_v1;