全部產品
Search
文件中心

:同構資料來源訪問

更新時間:Mar 15, 2025

若您需要訪問同阿里雲帳號下的其他AnalyticDB for PostgreSQL執行個體資料,可以使用同構資料來源訪問功能。該功能允許您將不同執行個體作為外部資料源做聯集查詢,在保證資料即時性的同時,有效減少資料冗餘。

跨執行個體查詢涉及至少兩個執行個體。為了區分,本文將發起查詢的執行個體稱為本地執行個體,作為外部資料源的執行個體稱為遠程執行個體。

版本限制

  • 核心版本為v6.6.0.0及以上的AnalyticDB PostgreSQL 6.0版執行個體。

  • 核心版本為v7.0.3.0及以上的AnalyticDB PostgreSQL 7.0版執行個體。

  • 核心版本為v2.1.1.5及以上的AnalyticDB PostgreSQL版Serverless模式執行個體。

說明

您可以查看執行個體的核心小版本。如您的執行個體不滿足上述版本要求,建議您升級核心小版本

前提條件

本地執行個體與遠程執行個體須位於同一VPC。

準備工作

本文以本地執行個體A和遠程執行個體B之間的跨執行個體查詢為例。參考本文,您可以在本地執行個體A的local_db庫訪問遠程執行個體Bremote_db庫中的表,輕鬆實現聯集查詢。

  1. 為本地執行個體A和遠程執行個體B建立初始帳號

  2. 將用戶端的IP地址或IP位址區段分別添加到AnalyticDB for PostgreSQL本地執行個體A和遠程執行個體B的白名單中。

  3. 準備測試資料。

    • 為本地執行個體A建立資料庫和Schema,用於後續建立外部表格、訪問遠程執行個體B的資料。

      1. 串連本地執行個體A。

        psql -h gp-bp166cyrtr4p*****-master.gpdb.rds.aliyuncs.com -p 5432 -d postgres -U gpdbaccount
        如果您的ECS與AnalyticDB for PostgreSQL執行個體不屬於同一VPC,或者您在本地機器上串連AnalyticDB for PostgreSQL執行個體,請使用外網地址
      2. 在本地執行個體A上建立local_db庫,並切換至local_db庫。

        CREATE DATABASE local_db;
        \c local_db
      3. 在本地執行個體Alocal_db庫中建立Schema。

        CREATE SCHEMA s02;
    • 為遠程執行個體B建立庫表,用於後續從本地執行個體A查詢遠程執行個體B的庫表資料。

      1. 請參考串連執行個體A的方式,串連遠程執行個體B。

      2. 在遠程執行個體B上建立remote_db庫,並切換至remote_db庫。

        CREATE DATABASE remote_db;
        \c remote_db
      3. 在遠程執行個體B的remote_db庫中準備測試資料。

        CREATE SCHEMA s01;
        
        CREATE TABLE s01.t1(a int, b int, c text); 
        CREATE TABLE s01.t2(a int, b int, c text); 
        CREATE TABLE s01.t3(a int, b int, c text); 
        
        INSERT INTO s01.t1 VALUES(generate_series(1,10),generate_series(11,20),'t1');
        INSERT INTO s01.t2 VALUES(generate_series(11,20),generate_series(11,20),'t2');
        INSERT INTO s01.t3 VALUES(generate_series(21,30),generate_series(11,20),'t3');

操作步驟

步驟一:在本地執行個體中新增資料來源

  1. 登入雲原生資料倉儲AnalyticDB PostgreSQL版控制台,找到本地執行個體A,單擊執行個體ID。

  2. 在左側導覽列,單擊外部資料源管理

  3. 同構資料來源訪問頁簽,單擊新增資料來源,並配置如下參數。

    參數

    說明

    本地執行個體Id

    自動填寫。

    本機資料庫名稱

    選擇本地執行個體A的local_db資料庫。

    本地初始帳號

    如果已建立初始帳號,無需填寫。

    本地初始密碼

    初始帳號對應的密碼。

    遠程執行個體Id

    選擇遠程執行個體B的執行個體ID。

    遠端資料庫名稱

    選擇遠程執行個體B的remote_db資料庫。

    遠端資料庫帳號

    遠程執行個體B的初始帳號

    遠端資料庫密碼

    初始帳號對應的密碼。

    資料來源名稱

    自訂資料來源名稱。例如:example_name。

  4. 單擊確定,等待資料來源串連狀態變為運行中,您可以進行跨執行個體查詢操作。

    說明
    • 資料來源建立後,狀態會變為建立同構資料來源訪問中。該建立過程通常耗時小於一分鐘,且對執行個體的運行、資料讀寫無影響。

    • 資料來源建立完成後,您還可以進行以下操作。

      • 編輯資料來源:單擊操作列的編輯,修改遠程執行個體的帳號和密碼。

      • 刪除資料來源:單擊操作列的刪除,刪除資料來源。

步驟二:跨執行個體查詢

重要

若訪問的遠程執行個體為Serverless模式,當遠程執行個體處於擴縮容狀態時,擴縮容期間資料不可訪問。

  1. 串連本地執行個體A並切換至local_db庫的Schemas02

  2. 在本地執行個體A的Schemas02中,為遠程執行個體B的表(t1、t2、t3)建立對應的外部表格。

    重要

    本地執行個體的Schema中不能存在與遠端資料表同名的表,否則,操作將失敗。

    多表大量匯入

    文法:

    IMPORT FOREIGN SCHEMA remote_schema -- 遠程執行個體的schema名稱
        [LIMIT TO ( table_name [, ...] ) ] -- 遠程執行個體的表名稱
        FROM SERVER server_name -- 步驟一中配置的資料來源名稱
        INTO local_schema -- 本地執行個體的schema名稱

    樣本:

    IMPORT FOREIGN SCHEMA s01 LIMIT TO (t1, t2, t3) 
    	FROM SERVER example_name INTO s02;
    說明

    通過IMPORT FOREIGN SCHEMA查看更多文法詳情。

    單表匯入

    文法:

    CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ -- 遠程執行個體的表名稱
      { column_name data_type } ] -- 遠程執行個體的表結構
        [, ... ] )
      SERVER server_name -- 步驟一配置的資料來源名稱
    [ OPTIONS ( option 'value' [, ... ] ) ] -- 本地執行個體的schema名稱和表名稱

    樣本:

    CREATE FOREIGN TABLE s01.t1(a int, b int) 
    	SERVER example_name OPTIONS(schema_name 's02', table_name 't1');
    說明

    通過CREATE FOREIGN TABLE查看更多文法詳情。

  3. 在本地執行個體A的local_db庫中查詢遠程執行個體Bremote_db庫中t1表的資料。

    說明

    AnalyticDB for PostgreSQL不支援通過Database.Schema.Table的方式訪問資料。

    SELECT * FROM s02.t1;

    返回樣本如下。

     a  | b  | c
    ----+----+----
      2 | 12 | t1
      3 | 13 | t1
      4 | 14 | t1
      7 | 17 | t1
      8 | 18 | t1
      1 | 11 | t1
      5 | 15 | t1
      6 | 16 | t1
      9 | 19 | t1
     10 | 20 | t1
    (10 rows)

相關文檔

跨庫查詢:如果您的資料存放區在同一執行個體的不同資料庫,可以實現跨庫的聯集查詢。