GaussDB(DWS)运维 -- 跨库查询方案

举报
譡里个檔 发表于 2025/04/17 15:29:36 2025/04/17
【摘要】 本文介绍了一种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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。