同構數據源訪問
若您需要訪問同阿里云賬號下其他AnalyticDB PostgreSQL版實例數據,可以使用同構數據源訪問功能,將不同實例以外部數據源的形式輕松快速地實現聯合查詢,在保證數據實時性的同時,有效減少數據冗余。
本地實例:創建連接、使用數據的實例。
遠程實例:接受連接、提供數據的實例。
注意事項
本功能僅支持以下數據庫內核版本:
AnalyticDB PostgreSQL 6.0版實例需為v6.6.0.0及以上版本。
AnalyticDB PostgreSQL 7.0版實例需為v7.0.3.0及以上版本。
AnalyticDB PostgreSQL版Serverless模式實例需為v2.1.1.5及以上版本。
若訪問的遠程實例為Serverless模式實例,當遠程實例處于擴縮容狀態時,擴縮容期間數據不可訪問。
前提條件
本地實例與遠程實例需要屬于同一個阿里云賬號,且位于同一個地域,同一個VPC下。
本地實例與遠程實例已創建初始賬號,具體操作,請參見創建數據庫賬號。
操作步驟
本文以開通本地實例A和遠程實例B(兩個實例位于同一地域、同一可用區、同一 VPC 下)跨實例查詢為例。開通跨實例查詢后,您可以在本地實例A的local_db
庫訪問遠程實例Bremote_db
庫中的表,并利用計算節點之間高速互聯的特性,輕松實現聯合查詢。
步驟一:準備測試數據
使用psql連接實例,操作步驟,請參見客戶端連接。
分別在本地實例A和遠程實例B上創建數據庫。
在本地實例A上創建
local_db
庫,并切換至local_db
庫。CREATE DATABASE local_db; \c local_db
在遠程實例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版控制臺。
- 在控制臺左上角,選擇實例所在地域。
- 找到目標實例,單擊實例ID。
在左側導航欄,單擊外部數據源管理。
在同構數據源訪問頁簽,單擊新增數據源,并配置如下參數。
參數
說明
本地實例Id
本地實例A的ID。
本地數據庫名稱
本地實例A的數據庫名稱
local_db
。本地初始賬號
本地實例A的賬號。
本地初始密碼
賬號對應的密碼。
遠程實例Id
遠程實例B的ID。
遠程數據庫名稱
遠程實例B的數據庫名稱
remote_db
。遠程數據庫賬號
遠程實例B的賬號。
該賬號需要擁有
remote_db
庫的讀權限(如需執行INSERT操作,則還需要寫權限)。遠程數據庫密碼
賬號對應的密碼。
數據源名稱
可選參數,自定義數據源名稱。
單擊確定,等待數據源連接狀態變為運行中,您可以進行跨實例查詢操作。
說明數據源創建完成后,您還可以進行以下操作。
編輯數據源:單擊操作列的編輯,修改遠程實例的賬號和密碼。
刪除數據源:單擊操作列的刪除,刪除數據源。
步驟三:跨實例查詢
在本地實例A的
local_db
庫中實現跨實例查詢。實現跨實例查詢有如下兩種方式:
(推薦)方式一:導入源庫下Schema中的所有表。
CREATE SCHEMA s01; IMPORT FOREIGN SCHEMA s01 LIMIT TO (t1, t2, t3) FROM SERVER <data_source_name> INTO s01;
data_source_name為數據源名稱,可在控制臺同構數據源訪問頁簽查看。
通過
IMPORT FOREIGN SCHEMA
語句創建外表的語法,請參見IMPORT FOREIGN SCHEMA。上述方式的優缺點如下:
優點:可以快速導入外表,而且不需要知道每個表的DDL。
缺點:不夠靈活,每個表的名稱和字段需要與源庫一致。
方式二:為源表創建外表。
CREATE SCHEMA s01; CREATE FOREIGN TABLE s01.t1(a int, b int) server <data_source_name> options(schema_name 's01', table_name 't1');
data_source_name為數據源名稱,可在控制臺同構數據源訪問頁簽查看。
上述方式的優缺點如下:
優點:可以靈活定制外表的DDL,例如
remote_db
庫中t1有三個字段a,b,c,但目標庫只需要a,b兩個字段,因此可以在創建外表的時候指定字段。缺點:需要知道每一個表的DDL,一次性導入多個外表較為繁瑣。
在實例A的
local_db
庫中查詢實例Bremote_db
庫中的數據。
SELECT * FROM s01.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)
相關文檔
您也可以通過greenplum_fdw和gp_parallel_retrieve_cursor插件實現跨實例查詢,詳情請參見跨實例查詢。