云原生數據倉庫AnalyticDB PostgreSQL(簡稱ADB PG)支持通過JDBC的方式訪問Oracle、PostgreSQL、MySQL外部數據源。
本特性只支持存儲彈性模式實例,且需要云原生數據倉庫 AnalyticDB PostgreSQL 版實例和目標訪問的外部數據源處于同一個VPC網絡。
2020年9月6日前申請的存量存儲彈性模式實例,由于網絡架構不同,無法與外部數據庫網絡打通,無法使用該特性。如需使用,請聯系后臺技術人員,重新申請實例,遷移數據。
前提條件:配置SEVER端
由于不同用戶的需求配置不盡相同。如果您需要通過JDBC的方式訪問外部數據源進行聯邦分析,請提交工單由云原生數據倉庫 AnalyticDB PostgreSQL 版后臺技術人員進行配置。以下為提交工單時需要提交的對應文件。
連接對象 | 提交工單內容 |
SQL Database(PostgreSQL, Mysql, Oracle) | JDBC的連接串、目標訪問外部數據源的用戶名和密碼。 |
使用Database外表聯邦分析
創建擴展
CREATE extension pxf;
創建外表
CREATE EXTERNAL TABLE <table_name> ( <column_name> <data_type> [, ...] | LIKE <other_table> ) LOCATION('pxf://<path-to-data>?PROFILE[&<custom-option>=<value>[...]]&[SERVER=value]') FORMAT '[TEXT|CSV|CUSTOM]' (<formatting-properties>);
創建EXTERNAL TABLE語法請參見CREATE EXTERNAL TABLE。
參數
說明
path-to-data
外表訪問表名,例如 public.test_a。
PROFILE [&<custom-option>=<value>[...]]
訪問外部數據的配置。
使用JDBC方式訪問外部數據庫時使用PROFILE=Jdbc
FORMAT '[TEXT|CSV|CUSTOM]'
讀取文件的格式。
formatting-properties
與特定文件數據對應的格式化選項:formatter或者delimiter(分割符)
與CUSTOM搭配
formatter='pxfwritable_import'
formatter='pxfwritable_export'
與TEXT|CSV搭配
delimiter=E'\t'
delimiter ':'
說明escape時需要加上E。
SERVER
配置服務端文件的位置,該部分由后臺技術人員操作后反饋給用戶。
示例:訪問postgresql數據庫
云原生數據倉庫 AnalyticDB PostgreSQL 版后臺技術人員配置完成后,您可以在云原生數據倉庫 AnalyticDB PostgreSQL 版數據庫中采用以下SQL語句創建外表并查詢。
postgres=# CREATE EXTERNAL TABLE pxf_ext_pg(a int, b int)
LOCATION ('pxf://public.t?PROFILE=Jdbc&SERVER=postgresql')
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import')
ENCODING 'UTF8';
postgres=# select * from pxf_ext_pg;
a | b
-------+-------
1 | 2
2 | 4
3 | 6
4 | 8
5 | 10
6 | 12
7 | 14
--more--
LOCATION各字段含義說明:
pxf:// :pxf 協議,固定值。
public.t:代表數據庫public下的表名為t的表。
PROFILE=Jdbc: 代表使用JDBC訪問外部數據源
SERVER=postgresql:云原生數據倉庫 AnalyticDB PostgreSQL 版的后臺技術人員將提供該選項。后臺人員會根據您提交的工單要求進行相對應配置。此例中 SERVER=postgresql 代表使用PXF_SERVER/postgresql/下的配置文件來支持連接。
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import'):外部數據源格式配置項。查詢外部數據源table時使用CUSTOM,并與FORMATTER='pxfwritable_import'搭配。
CREATE EXTERNAL TABLE pxf_ext_test_a( id int,name varchar)
LOCATION ('pxf://public.test_a?PROFILE=Jdbc&server=postgresql')
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import')
ENCODING 'UTF8';
支持的數據類型
INTEGER, BIGINT, SMALLINT
REAL, FLOAT8
NUMERIC
BOOLEAN
VARCHAR, BPCHAR, TEXT
DATE
TIMESTAMP
BYTEA