若您需要訪問同阿里雲帳號下的其他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庫中的表,輕鬆實現聯集查詢。
為本地執行個體A和遠程執行個體B建立初始帳號。
將用戶端的IP地址或IP位址區段分別添加到AnalyticDB for PostgreSQL本地執行個體A和遠程執行個體B的白名單中。
準備測試資料。
為本地執行個體A建立資料庫和Schema,用於後續建立外部表格、訪問遠程執行個體B的資料。
串連本地執行個體A。
psql -h gp-bp166cyrtr4p*****-master.gpdb.rds.aliyuncs.com -p 5432 -d postgres -U gpdbaccount如果您的ECS與AnalyticDB for PostgreSQL執行個體不屬於同一VPC,或者您在本地機器上串連AnalyticDB for PostgreSQL執行個體,請使用外網地址。
在本地執行個體A上建立
local_db庫,並切換至local_db庫。CREATE DATABASE local_db; \c local_db在本地執行個體A
local_db庫中建立Schema。CREATE SCHEMA s02;
為遠程執行個體B建立庫表,用於後續從本地執行個體A查詢遠程執行個體B的庫表資料。
請參考串連執行個體A的方式,串連遠程執行個體B。
在遠程執行個體B上建立
remote_db庫,並切換至remote_db庫。CREATE DATABASE remote_db; \c remote_db在遠程執行個體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');
操作步驟
步驟一:在本地執行個體中新增資料來源
登入雲原生資料倉儲AnalyticDB PostgreSQL版控制台,找到本地執行個體A,單擊執行個體ID。
在左側導覽列,單擊外部資料源管理。
在同構資料來源訪問頁簽,單擊新增資料來源,並配置如下參數。
參數
說明
本地執行個體Id
自動填寫。
本機資料庫名稱
選擇本地執行個體A的
local_db資料庫。本地初始帳號
如果已建立初始帳號,無需填寫。
本地初始密碼
初始帳號對應的密碼。
遠程執行個體Id
選擇遠程執行個體B的執行個體ID。
遠端資料庫名稱
選擇遠程執行個體B的
remote_db資料庫。遠端資料庫帳號
遠程執行個體B的初始帳號。
遠端資料庫密碼
初始帳號對應的密碼。
資料來源名稱
自訂資料來源名稱。例如:example_name。
單擊確定,等待資料來源串連狀態變為運行中,您可以進行跨執行個體查詢操作。
說明資料來源建立後,狀態會變為建立同構資料來源訪問中。該建立過程通常耗時小於一分鐘,且對執行個體的運行、資料讀寫無影響。
資料來源建立完成後,您還可以進行以下操作。
編輯資料來源:單擊操作列的編輯,修改遠程執行個體的帳號和密碼。
刪除資料來源:單擊操作列的刪除,刪除資料來源。
步驟二:跨執行個體查詢
若訪問的遠程執行個體為Serverless模式,當遠程執行個體處於擴縮容狀態時,擴縮容期間資料不可訪問。
串連本地執行個體A並切換至
local_db庫的Schemas02。在本地執行個體A的Schema
s02中,為遠程執行個體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查看更多文法詳情。
在本地執行個體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)
相關文檔
跨庫查詢:如果您的資料存放區在同一執行個體的不同資料庫,可以實現跨庫的聯集查詢。