remapdb 数据库重映射提示

remapdb 在 SELECT、DML、表 DDL 和 ANALYZE 语句中将限定的数据库引用从源数据库改写为目标数据库;它受 enable_remap_hint 控制,可按会话或按查询设置。

描述

remapdb 是 MatrixOne 查询改写功能使用的数据库名重映射规则。它将源数据库名映射为目标数据库名,使 source_db.table 这样的限定引用解析到 target_db.table

该规则以 remapdb 键下的 JSON 对象形式提供,可以通过两种方式设置:

  • 作为 remap_rewrites 会话变量的值,应用于会话中后续的每条查询。

  • 作为内联 /*+ ... */ 提示,应用于携带它的单条查询。

两种形式都受 enable_remap_hint 控制;当该变量关闭时,规则会被忽略。

语法

{"remapdb": {"source_database": "target_database", ...}}
SET remap_rewrites = '{"remapdb": {"source_database": "target_database"}}'
/*+ {"remapdb": {"source_database": "target_database"}} */ SELECT ...

只有限定引用会被改写。USE 不会被重映射,但当当前数据库是重映射源时,未限定的名称会按目标数据库解析。remapdb 会先于表的 rewrites 规则应用。

参数说明

remapdb 接受一个值:remapdb 键下的 JSON 对象,将源数据库名映射为目标数据库名。

示例

DROP DATABASE IF EXISTS remapdb_dst;
CREATE DATABASE remapdb_dst;
USE remapdb_dst;

DROP DATABASE IF EXISTS remapdb_src;
CREATE DATABASE remapdb_src;
CREATE TABLE remapdb_dst.t (id INT);
CREATE TABLE remapdb_src.t (id INT);
INSERT INTO remapdb_dst.t VALUES (1), (2), (3);
INSERT INTO remapdb_src.t VALUES (100), (200);

SET enable_remap_hint = 1;
SET remap_rewrites = '{"remapdb": {"remapdb_src": "remapdb_dst"}}';
SELECT * FROM remapdb_src.t ORDER BY id;

SET remap_rewrites = '';
SET enable_remap_hint = 0;

DROP DATABASE remapdb_src;
DROP DATABASE remapdb_dst;

限制

  • remapdb 名称必须是合法标识符。

  • 源和目标数据库集合必须互不相交;链式(abbc)和自映射会被拒绝。

  • 多个源可以映射到同一个目标。

  • 系统数据库(information_schemamysqlsystemsystem_metrics 以及任何 mo_* 数据库)不能作为源或目标。

  • 数据库级 DDL(CREATE/DROP/ALTER DATABASEUSE)不会被重映射。

相关参考