神通MPP数据库的跨库查询
- 一. 简介
- 二. 系统表
- 三. 跨库查询语法
- 1. 创建外部数据存储服务器
- 2. 删除外部数据存储服务器
- 3. 授予普通用户访问外部数据存储服务器权限
- 4. 回收普通用户访问外部数据存储服务器权限
- 5. 加密函数
- 6. 访问外部数据存储服务器 ★
- 四. 跨库查询:统一用户访问流程
- 1. 【远端】数据存储
- (1)【远端】准备一张表
- (2)在【远端】创建用户作为桥梁用户
- (3) 授予桥梁用户 dba 权限
- 2. 【本地库】
- (1)对桥梁用户(远端用户)加密
- (2)将桥梁用户(远端用户)信息配置到 MASTER 节点的 conf 文件 ★
- (3)创建外部数据存储服务器 ★
- (4)授予普通用户访问外部数据存储服务器的权限
- (5)切换普通用户访问远端数据 ★
- 五. 跨库查询:非统一用户访问流程
- 1. 【远端】数据存储
- (1)【远端】数据存储
- 2. 【本地库】
- (1)配置 MASTER 节点 conf 文件
- (2)创建外部数据存储服务器 ★
- (3)授予普通用户访问外部数
- (4)切换普通用户访问远端数据 ★
一. 简介
跨库查询,指无需将远端外部数据存储的数据导入到本地数据库,即可通过本地数据库查询远端外部数据存储的数据,满足本地与本地、本地与远端、远端与远端的表的联合查询能力。
神通 MPP5.0 目前支持的远端外部数据存储的类型有两种,神通 MPP5.0 即 STMPP-5.0、神通 KSTORE4.5 即 KSTORE-4.5。
二. 系统表
神通 MPP5.0 将外部数据存储服务器的信息存储在系统表 SYS_EXTERNAL_SERVER
中;
并将外部数据存储服务器的类型的信息存储在系统表 SYS_EXTERNAL_STORE
中。
两表结构如下:
三. 跨库查询语法
1. 创建外部数据存储服务器
用户通过执行此语句,可以创建服务器类型为神通 MPP5.0、神通 KSTORE4.5 的同构数据存储服务器,服务器信息包含:服务器 IP 地址、端口号、数据库名等。
CREATE EXTERNAL SERVER servername TYPE 'servertype' <ext_connection>;
<ext_connection>::= [CONNECT TO username IDENTIFIED BY password] USING 'hostname' PORT portnum DATABASE 'databasename'
CREATE EXTERNAL SERVER:创建外部数据存储服务器,创建成功后会在 SYS_EXTERNAL_SERVER系统表中显示创建的外部数据存储服务器的信息;
servername:创建的外部数据存储服务器的名字;
servertype:创建外部数据存储服务器的类型,可以指定外部数据存储服务器的类型为神通 MPP5.0 即
STMPP-5.0、神通 KSTORE4.5 即 KSTORE-4.5;
ext_connection:外部数据存储服务器的连接信息,包括服务器 IP 地址、端口号、数据库名、使用的用户名和密码;
username:用来连接外部数据存储服务器的用户名;
password:用来连接外部数据存储服务器的密码;
hostname:外部数据存储服务器的 IP 地址;
portnum:外部数据存储服务器的端口号;
databasename:外部数据存储服务器的数据库名字;
注释:
跨库联查访问有两种方式,① 统一用户访问,② 非统一用户访问。
通过设置配置文件参数 ENABLE_EXTS_CURRENT_USER
来控制开启或关闭统一访问功能。
统一用户访问是指,用户(MPP5.0)通过 MPP5.0 访问外部存储服务器的权限 和外部存储服务器的用户(与MPP5.0 用户名相同)权限一致;
使用统一用户访问功能时,需配置使用一个公共的高权限用户(DBA 权限)作为“桥梁用户”访问所有外部存储服务器。
当使用统一用户访问时不能指定 username 和 password,使用非统一用户访问时必须指定 username 和 password。
2. 删除外部数据存储服务器
DROP EXTERNAL SERVER servername;
servername:删除的外部数据存储服务器的名字。
3. 授予普通用户访问外部数据存储服务器权限
说明:
超级用户通过执行此语句,可以为普通用户授予访问外部数据存储的权限。
GRANT SELECT ON EXTSERVER servername TO username;
servername:外部数据存储服务器名称;
username:被授予权限的用户名称。
4. 回收普通用户访问外部数据存储服务器权限
超级用户通过执行此语句,可以回收用户访问外部数据存储的权限。
REVOKE SELECT ON EXTSERVER servername FROM username;
servername:外部数据存储服务器名称;
username:被回收权限的用户名称。
5. 加密函数
本功能的提供一个函数接口,用户通过执行此函数,可以对用户的密码加密。此函数为统一用户访问功能所用。
SELECT EXTSENCRYPT(username, password);
username:统一用户访问的用户名。
password:统一用户访问的密码。
注意:用户名、密码大小写敏感。
6. 访问外部数据存储服务器 ★
通过 SELECT 语句查询外部数据存储服务器上的关系,需要在访问的关系后加上@@servername
。
四. 跨库查询:统一用户访问流程
1. 【远端】数据存储
(1)【远端】准备一张表
CREATE USER abc WITH PASSWORD 'abc123456,';
CREATE TABLE abc.t1(A int);
INSERT INTO abc.t1 VALUES(1);
(2)在【远端】创建用户作为桥梁用户
CREATE USER DDD WITH PASSWORD 'ddd123456,';
(3) 授予桥梁用户 dba 权限
GRANT ROLE SYSDBA TO USER DDD;
2. 【本地库】
【本地端库】,需要通过已经创建好的远端用户和密码来访问远端的元数据,因此需要将远端用户 & 密码配置在【本地库】配置文件中,
配置成功之后,就可以创建外部数据存储服务器并访问远端数据了。
(1)对桥梁用户(远端用户)加密
SELECT EXTSENCRYPT('DDD','ddd123456,'); --得到加密后密码 'AAAAAA7778797A7B7C72'
(2)将桥梁用户(远端用户)信息配置到 MASTER 节点的 conf 文件 ★
ENABLE_EXTS_CURRENT_USER=TRUE
EXTERNAL_SERVER_USER=ddd
EXTERNAL_SERVER_PASSWORD='AAAAAA7778797A7B7C72'
(3)创建外部数据存储服务器 ★
配置文件设置好并启动之后,需要为远端数据存储创建服务器,以便于在本地即可访问远端的数据。
CREATE EXTERNAL SERVER STMPP_SVR TYPE 'STMPP-5.0' USING '192.168.101.73' PORT 2220 DATABASE 'MASTER';
(4)授予普通用户访问外部数据存储服务器的权限
CREATE USER abc WITH PASSWORD 'abc123456,';
GRANT SELECT ON EXTSERVER stmpp_svr TO abc;
(5)切换普通用户访问远端数据 ★
CONNECT abc/abc123456,; --切换到普通用户 abc
SELECT * FROM t1@@stmpp_svr; --t1 为远端表 ★ ★ ★
五. 跨库查询:非统一用户访问流程
1. 【远端】数据存储
(1)【远端】数据存储
CREATE USER DDD WITH PASSWORD 'ddd123456,';
CREATE TABLE ddd.t1(A int);
INSERT INTO ddd.t1 VALUES(1);
2. 【本地库】
【本地端库】,需要通过已经创建好的远端用户和密码来访问远端的元数据,非统一用户访问需要修改参数 ENABLE_EXTS_CURRENT_USER
,配置在本地库配置文件中,配置成功之后,就可以创建外部数据存储服务器并访问远端数据了。
(1)配置 MASTER 节点 conf 文件
ENABLE_EXTS_CURRENT_USER=FALSE
(2)创建外部数据存储服务器 ★
配置文件设置好并启动之后,需要为远端数据存储创建服务器,以便于在本地即可访问远端的数据。
CREATE EXTERNAL SERVER STMPP_SVR TYPE 'STMPP-5.0' CONNECT TO DDD IDENTIFIED BY 'ddd123456' USING '192.168.101.73' PORT 2220 DATABASE 'MASTER';
(3)授予普通用户访问外部数
CREATE USER abc WITH PASSWORD 'abc123456,';
GRANT SELECT ON EXTSERVER stmpp_svr TO abc;
(4)切换普通用户访问远端数据 ★
CONNECT abc/abc123456,; --切换到普通用户 abc
SELECT * FROM t1@@stmpp_svr; --t1 为远端表 ★ ★ ★