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名称必须是合法标识符。源和目标数据库集合必须互不相交;链式(
a到b且b到c)和自映射会被拒绝。多个源可以映射到同一个目标。
系统数据库(
information_schema、mysql、system、system_metrics以及任何mo_*数据库)不能作为源或目标。数据库级 DDL(
CREATE/DROP/ALTER DATABASE、USE)不会被重映射。