GaussDB(DWS)运维 -- 跨库查询方案
【摘要】 本文介绍了一种DWS中实现跨库查询的方法
DWS可以使用协同分析外表实现跨库查询,下面通过一个用例详细展示具体实现
1) 确认远端库的表和权限
在库ora_utf8中创建表 & 插入数据 & 并把表的读权限赋给用dfm
ora_utf8=# CREATE TABLE public.x(a int) DISTRIBUTE BY ROUNDROBIN;
CREATE TABLE
ora_utf8=# INSERT INTO public.x SELECT * FROM generate_series(1,100);
INSERT 0 100
ora_utf8=# GRANT SELECT ON public.x TO dfm;
GRANT
2)在查询发起的database中创建协同分析服务
假如查询发起端的database为postgres,则在postgres库中执行如下语句
postgres=# CREATE SERVER remote_db FOREIGN DATA WRAPPER GC_FDW OPTIONS (
postgres(# address '127.0.0.1:13100',
postgres(# dbname 'ora_utf8',
postgres(# username 'dfm',
postgres(# password 'Gauss@123'
postgres(# );
CREATE SERVER
其中address的“:”前必须为127.0.0.1, 13100为CN的端口号,需要根据实际情况更新,可以通过如下查询语句获取SELECT distinct node_port FROM pgxc_node WHERE node_type = 'C'
dbname为远端表所在的database
username 为远端表所在的database执行查询的时候用户
password 为远端表所在的database执行查询的用户的密码
3)创建协同分析外表
CREATE FOREIGN TABLE x_cp(
a int
)
SERVER remote_db
OPTIONS(
schema_name 'public',
table_name 'x',
encoding 'UTF8'
);
x_cp为外表的名字。 x_cp 和 关键字SERVER之间的列定义要和源表的列数据类型定义对应
OPTIONS后面属性定义了源表的名称以及源库的encoding
4)执行协同外表查询
直接查询外表可以获取源端数据,可以查询外表查询可以下推
postgres=# SELECT * FROM x_cp ORDER BY a LIMIT 10;
a
----
1
2
3
4
5
6
7
8
9
10
(10 rows)
postgres=# EXPLAIN VERBOSE SELECT * FROM x_cp ORDER BY a LIMIT 10;
QUERY PLAN
---------------------------------------------------------------------------------------------------------
id | operation | E-rows | E-distinct | E-memory | E-width | E-costs
----+---------------------------------------------+--------+------------+----------+---------+---------
1 | -> Limit | 10 | | | 4 | 144.13
2 | -> Streaming (type: GATHER) | 20 | | | 4 | 146.83
3 | -> Limit | 20 | | 1MB | 4 | 140.83
4 | -> Sort | 1000 | | 16MB | 4 | 142.05
5 | -> Foreign Scan on public.x_cp | 1000 | | 1MB | 4 | 130.00
Targetlist Information (identified by plan id)
-----------------------------------------------------------------
1 --Limit
Output: a
2 --Streaming (type: GATHER)
Output: a
Merge Sort Key: x_cp.a
Node/s: All datanodes (group_version1, bucket:16384)
3 --Limit
Output: a
4 --Sort
Output: a
Sort Key: x_cp.a
5 --Foreign Scan on public.x_cp
Output: a
Remote SQL: SELECT a FROM public.x
Verify SQL: SELECT COUNT(*) FROM (SELECT a FROM public.x)
====== Query Summary =====
-----------------------------------------------------
System available mem: 2990080KB
Query Max mem: 2990080KB
Query estimated mem: 1026KB
Parser runtime: 0.032 ms
Planner runtime: 90.033 ms
Unique SQL Id: 3050404843
Unique SQL Hash: sql_b2b5646ffdddd497fcc9d2e38e22c065
(35 rows)
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)