異構數據源訪問
若您需要通過AnalyticDB PostgreSQL版訪問外部異構數據源(HDFS、Hive和JDBC)時,可以使用異構數據源訪問功能將外部數據轉換為AnalyticDB PostgreSQL版數據庫優化后的格式進行查詢和分析。
功能說明
外部數據源管理提供高性能的結構化和非結構化數據并行傳輸服務。其中,異構數據源訪問支持通過AnalyticDB PostgreSQL版數據庫以統一的SQL接口查詢和分析存儲在外部系統中的數據。提供以下功能:
多種數據存儲訪問:支持多種數據存儲系統,允許AnalyticDB PostgreSQL版數據庫直接訪問存儲在HDFS、Hive、MySQL,PostgreSQL,PolarDB MySQL等多種外部系統中的數據。
數據格式透明:支持常見的數據格式,如CSV、ORC、Parquet、JSON、Avro等。
高效數據處理:可利用AnalyticDB PostgreSQL版數據庫的并行處理能力,實現高效的數據讀寫操作。
簡化數據集成:可通過編寫SQL語句來訪問外部數據源,不必擔心不同數據源的連接細節。
版本限制
AnalyticDB PostgreSQL 6.0版實例需為v6.6.0.0及以上版本。
AnalyticDB PostgreSQL 7.0版實例需為v7.0.2.3及以上版本。
AnalyticDB PostgreSQL版Serverless模式實例需為v2.1.1.3及以上版本。
使用流程
步驟一:開啟外部數據服務
- 登錄云原生數據倉庫AnalyticDB PostgreSQL版控制臺。
- 在控制臺左上角,選擇實例所在地域。
- 找到目標實例,單擊實例ID。
在左側導航欄,單擊外部數據源管理。
在異構數據源訪問頁簽,單擊開啟外部數據服務。
在彈窗中配置以下參數,并單擊確定。
參數
說明
名稱
外部數據服務名稱,支持任意字符。
服務描述
描述服務信息。
步驟二:配置數據源
異構數據源訪問支持配置HDFS、Hive和JDBC數據源。
配置HDFS數據源
前提條件
自建Hadoop集群或具有Hadoop-Common、HDFS和YARN服務的E-MapReduce集群需與AnalyticDB PostgreSQL版實例在同一VPC。
已將AnalyticDB PostgreSQL版實例的專有網絡交換機IP添加至Hadoop集群所在的安全組。為確保AnalyticDB PostgreSQL版與Hadoop間的網絡端口暢通,需將以下異構數據源訪問功能會用到的Hadoop服務默認的端口全部加入安全組。具體操作,請參見添加安全組規則。
服務
端口號
Namenode IPC
Hadoop2.x版本:8020
Hadoop3.x版本:9820
E-MapReduce集群:9000
具體端口號請參見配置文件hdfs-site.xml -> dfs.namenode.rpc-address中的端口號。
DataNode IPC
Hadoop2.x版本:50020
Hadoop3.x版本:9867
具體端口號請參見配置文件hdfs-site.xml -> dfs.datanode.ipc.address中的端口號。
DataNode
Hadoop2.x版本:50010
Hadoop3.x版本:9866
具體端口號請參見配置文件hdfs-site.xml -> dfs.datanode.address中的端口號。
Hive metastore
9083
具體端口號請參見配置文件hive-site.xml -> hive.metastore.uris中的端口號。
Hive HiveServer
10000
具體端口號請參見配置文件hive-site.xml -> hive.server2.thrift.port中的端口號。
Zookeeper
2181
具體端口號請參見配置文件zoo.cfg ->
clientPort=xxxx中的端口號。
Kerberos Server
88(傳輸加密和認證) 和749(kadmin)
具體端口號請參見配置文kdc.conf ->
kdc_ports和kdc.conf -> kadmind_port中的端口號。
JDBC(MySQL或PostgreSQL)
3306、1521、5432等
ICMP協議
用于網絡連通性校驗,在安全組規則的入方向與出方向放行ICMP協議。
說明AnalyticDB PostgreSQL版實例的專有網絡交換機IP可在外部數據源管理頁面獲取。
準備測試數據集
準備測試數據集,并執行hadoop fs -put <本地文件名稱> <文件保存在Hadoop集群的路徑>
命令將數據集保存在Hadoop集群路徑。
例如,將本地文件/home/user/file.txt
上傳到HDFS的/tmp
目錄下,執行hadoop fs -put /home/user/file.txt /tmp/file.tx
即可。測試數據集內容如下:
1,test1,1,100
2,test2,2,90
操作步驟
在異構數據源訪問頁簽,單擊新增數據源的下拉菜單,選擇Hadoop數據源。
在新增Hadoop數據源頁面頁面依次配置網絡&安全組、配置文件、初始化。
配置網絡&安全組。
參數
說明
數據源名稱
可包含英文大小寫字母、數字、中劃線(-)、下劃線(_)。
以數字或者英文字母開始和結尾。
長度不超過50字符。
數據源描述
數據源描述。
數據源類型
當目標數據源為E-MapReduce集群,選擇阿里云E-MapReduce。
當目標數據源為自建Hadoop集群,選擇自建Hadoop。
數據庫類型
選擇HDFS。
數據來源
E-MapReduce集群ID。
說明自建Hadoop集群無此參數。
網絡校驗
單擊網絡校驗,提示網絡連通。
單擊下一步,填寫配置文件。
參數
說明
獲取方式
參數配置
無
若目標數據源為E-MapReduce集群,支持自動配置獲取。
若目標數據源為自建Hadoop集群需要自行粘貼配置文件信息。
hdfs-site.xml
HDFS配置項,如副本因子和塊大小等。
自建Hadoop集群xml文件一般位于以下兩個位置之一:
conf目錄:在早期版本的Hadoop中,這些配置文件通常放在Hadoop安裝目錄下的conf子目錄中。
etc/hadoop目錄:在較新版本的Hadoop中,配置文件通常放在 etc/hadoop目錄下。這個目錄位于 Hadoop的主安裝目錄下。
core-site.xml
Hadoop核心配置項,如I/O設置和文件系統的配置等。
yarn-site.xml
YARN配置項,負責集群資源管理和作業調度等。
mapred-site.xml
用于配置MapReduce作業的參數,如作業執行器和任務優化參數等。
/etc/host文件
解析Hadoop集群中每個節點的主機名到IP。
有以下兩種獲取方式:
方式一:依次登錄Hadoop集群的每臺機器,獲取/etc/hosts文件中的本節點IP和主機名的映射關系并填寫。
方式二:登錄Hadoop namenode所在的機器,運行
#!/bin/bash
腳本,填寫返回結果。返回結果如下:echo $(hostname -i) $(hostname -f) hdfs dfsadmin -report | awk -F':' '/^Name:/ {printf $2} /^Hostname:/ {print $2}'
單擊保存,并單擊左下角完成。
等待3~5分鐘,數據源狀態為運行中時,HDFS數據源可用。
單擊目標數據源操作列的校驗。
在服務配置校驗窗口中,填寫數據集所在Hadoop集群路徑(例如:/tmp/file.txt),并單擊校驗。
提示配置校驗成功后,您可以繼續操作讀寫HDFS外表。
配置Hive數據源
前提條件
自建Hive集群或具有Hadoop-Common、HDFS、Hive和YARN服務的E-MapReduce集群需與AnalyticDB PostgreSQL版實例在同一VPC。
已將AnalyticDB PostgreSQL版實例的專有網絡交換機IP添加至Hive集群所在的安全組。具體操作,請參見添加安全組規則。
說明AnalyticDB PostgreSQL版實例的專有網絡交換機IP可在外部數據源管理頁面獲取。
準備測試數據集
準備測試數據集,并執行hadoop fs -put <本地文件名稱> <文件保存在Hadoop集群的路徑>
命令將數據集保存在Hadoop集群路徑。
例如,將本地文件/home/user/file.txt
上傳到Hive的/tmp
目錄下,執行hadoop fs -put /home/user/file.txt /tmp/file.tx
即可。測試數據集內容如下:
1,test1,1,100
2,test2,2,90
操作步驟
在異構數據源訪問頁簽,單擊新增數據源的下拉菜單,選擇Hadoop數據源。
在新增Hadoop數據源頁面頁面依次配置網絡&安全組、配置文件、初始化。
配置網絡&安全組。
參數
說明
數據源名稱
可包含英文大小寫字母、數字、中劃線(-)、下劃線(_)。
以數字或者英文字母開始和結尾。
長度不超過50字符。
數據源描述
數據源描述。
數據源類型
當目標數據源為E-MapReduce集群,選擇阿里云E-MapReduce。
當目標數據源為自建Hive集群,選擇自建Hadoop。
數據庫類型
選擇Hive。
實例名稱
E-MapReduce集群ID。
說明自建Hive集群無此參數。
網絡校驗
單擊網絡校驗,提示網絡連通。
單擊下一步,填寫配置文件。
參數
說明
獲取方式
參數配置
無
若目標數據源為E-MapReduce集群,支持自動配置獲取。
若目標數據源為自建Hive集群需要自行粘貼配置文件信息。
hdfs-site.xml
HDFS配置項,如副本因子和塊大小。
自建Hive集群xml文件一般位于以下兩個位置之一:
conf目錄:在標準安裝中,這些配置文件通常放在Hive安裝目錄下的conf子目錄中。
etc/hadoop目錄:在集成了Hadoop和Hive的安裝中,也可能放在Hadoop的配置目錄中,以確保Hive能夠正確地與Hadoop集群進行交互。
core-site.xml
Hadoop核心配置項,如I/O設置和文件系統的配置等。
yarn-site.xml
YARN配置項,負責集群資源管理和作業調度等。
mapred-site.xml
用于配置MapReduce作業的參數,如作業執行器和任務優化參數等。
hive-site.xml
Hive配置項,如元數據存儲的連接信息、Hive運行時的內存和性能設置等。
/etc/host文件
解析Hive集群中每個節點的主機名到IP。
有以下兩種獲取方式:
方式一:依次登錄Hive集群的每臺機器,獲取/etc/hosts文件中的本節點IP和主機名的映射關系并填寫。
方式二:登錄Hive namenode所在的機器,運行
#!/bin/bash
腳本,填寫返回結果。返回結果如下:echo $(hostname -i) $(hostname -f) hive dfsadmin -report | awk -F':' '/^Name:/ {printf $2} /^Hostname:/ {print $2}'
單擊保存,并單擊左下角完成。
等待3~5分鐘,數據源狀態為運行中時,Hive數據源可用。
單擊目標數據源操作列的校驗。
在服務配置校驗窗口中,填寫數據集所在Hadoop集群路徑(例如:/tmp/file.txt),并單擊校驗。
提示配置校驗成功后,您可以繼續操作讀寫Hive外表。
配置JDBC數據源
JDBC數據源指兼容MySQL和PostgreSQL的數據源,如RDS MySQL、RDS PostgreSQL、PolarDB MySQL、PolarDB PostgreSQL等。
本文以配置RDS MySQL數據源為例。
前提條件
數據源所在實例(RDS MySQL實例)需與AnalyticDB PostgreSQL版實例在同一VPC。
已在RDS MySQL實例中創建數據庫和賬號。具體操作,請參見創建數據庫和賬號。
已將AnalyticDB PostgreSQL版實例的專有網絡交換機IP添加至RDS MySQL實例的白名單中。具體操作,請參見設置IP白名單。
說明AnalyticDB PostgreSQL版實例的專有網絡交換機IP可在外部數據源管理頁面獲取。
操作步驟
在異構數據源訪問頁簽,單擊新增數據源的下拉菜單,選擇JDBC數據源。
在新增JDBC數據源頁面頁面配置如下參數。
參數
說明
數據源名稱
可包含英文大小寫字母、數字、中劃線(-)、下劃線(_)。
以數字或者英文字母開始和結尾。
長度不超過50字符。
數據庫類型
選擇MySQL。
數據源描述
數據源描述。
JDBC連接串
連接RDS MySQL實例的JDBC連接串,格式如下:
jdbc:mysql://<servername>:<port>/<dbName>
<servername>:<port>
:RDS MySQL實例的連接地址和對應的端口。若通過內網連接,需輸入RDS MySQL實例的內網地址和內網端口。
若使用外網連接,需輸入RDS MySQL實例的外網地址和外網端口。
您可以在RDS MySQL實例的數據庫連接頁面查看。
更多信息,請參見查看或修改連接地址和端口。
<dbName>
:RDS MySQL實例的數據庫。
用戶名
RDS MySQL實例的賬號。
登錄密碼
賬號對應的密碼。
單擊測試連接,提示網絡連通后,單擊左下角確定。
如果網絡不通,請檢查JDBC連接串地址填寫是否正確。
等待3~5分鐘,數據源狀態為運行中時,JDBC數據源可用。您可以繼續操作讀寫JDBC外表。
步驟三:讀寫外表
根據您配置的數據源類型,選擇不同外表語法讀寫數據。
HDFS外表
讀寫文本數據
語法
CREATE [WRITABLE | READABLE] EXTERNAL TABLE <table_name>
( <column_name> <data_type> [, ...] | LIKE <other_table> )
LOCATION ('pxf://<path-to-hdfs-dir>
?PROFILE=hdfs:text[&SERVER=<server_name>][&<custom-option>=<value>[...]]')
FORMAT '[TEXT|CSV]' (delimiter[=|<space>][E]'<delim_value>');
[DISTRIBUTED BY (<column_name> [, ... ] ) | DISTRIBUTED RANDOMLY];
參數
參數 | 說明 |
[WRITABLE | READABLE] |
|
READABLE | 可讀外表,可選。 |
path-to-hdfs-dir | HDFS數據存儲目錄的絕對路徑。 |
PROFILE | 指定HDFS外表數據格式,文本數據必須指定為 HDFS外表支持的數據格式,請參見附錄1:HDFS外表數據格式。 |
SERVER | 外部數據源名稱。登錄云原生數據倉庫AnalyticDB PostgreSQL版控制臺,在 頁面查看數據源名稱。 如未指定,異構數據源訪問將使用Default服務器。 |
FORMAT | 定義文本格式。
|
delimiter | 數據分隔符。
|
DISTRIBUTED BY | 分布策略。 如果您計劃將現有AnalyticDB PostgreSQL版數據庫表中的數據加載到外表,建議在外表中使用AnalyticDB PostgreSQL版表相同的分布策略或字段名,可以避免數據加載操作中Segment節點間額外的數據移動。 |
示例
示例一:創建一個可寫外表,在建表語句中指定好HDFS協議、格式及路徑,并向表中寫入數據。
CREATE WRITABLE EXTERNAL TABLE pxf_hdfs_writable_table ( a int, b int, c int ) LOCATION ('pxf://data/demo/pxf_hdfs_demo_table?PROFILE=hdfs:text&SERVER=test2') FORMAT 'TEXT' (delimiter='|'); INSERT INTO pxf_hdfs_writable_table SELECT generate_series(1, 9000), generate_series(1, 9000), generate_series(1, 9000);
示例二:創建一個可讀外表,在建表語句中指定好HDFS協議、格式及路徑,并查詢外表數據。
CREATE READABLE EXTERNAL TABLE pxf_hdfs_readable_table ( a int, b int, c int ) LOCATION ('pxf://data/demo/pxf_hdfs_demo_table?PROFILE=hdfs:text&SERVER=test2') FORMAT 'TEXT' (delimiter='|'); SELECT * FROM pxf_hdfs_readable_table order by 1;
讀寫Parquet數據
在AnalyticDB PostgreSQL版數據庫中讀寫Parquet基本數據類型,需要將Parquet數據值映射到相同類型的AnalyticDB PostgreSQL版數據庫列。映射關系,請參見附錄3:Parquet數據類型與AnalyticDB PostgreSQL數據類型映射關系。
語法
CREATE [WRITABLE |READABLE] EXTERNAL TABLE <table_name>
( <column_name> <data_type> [, ...] | LIKE <other_table> )
LOCATION ('pxf://<hdfs_dbName>.<hdfs_tableName>
?PROFILE=hdfs:parquet[&SERVER=<server_name>][&<custom-option>=<value>[...]]')
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import'|'pxfwritable_export');
[DISTRIBUTED BY (<column_name> [, ... ] ) | DISTRIBUTED RANDOMLY];
參數
參數 | 說明 |
[WRITABLE | READABLE] |
|
<hdfs_dbName>.<hdfs_tableName> | HDFS數據存儲目錄的絕對路徑。 |
PROFILE | 指定HDFS外表數據格式,Parquet格式數據必須指定為 HDFS外表支持的數據格式,請參見附錄1:HDFS外表數據格式。 |
SERVER | 外部數據源名稱。登錄云原生數據倉庫AnalyticDB PostgreSQL版控制臺,在 頁面查看數據源名稱。 如未指定,異構數據源訪問將使用Default服務器。 |
FORMAT | 定義非文本格式。當數據為Parquet格式固定為CUSTOM。 |
FORMATTER | 定義表為可讀外表或可寫外表。
|
DISTRIBUTED BY | 分布策略。 如果您計劃將現有AnalyticDB PostgreSQL版數據庫表中的數據加載到外表,建議在外表中使用AnalyticDB PostgreSQL版表相同的分布策略或字段名,可以避免數據加載操作中Segment節點間額外的數據移動。 |
hdfs:parquet
配置文件支持與編碼和壓縮有關的寫入選項,可以在CREATE WRITABLE EXTERNAL TABLE LOCATION子句中指定以下自定義選項:
寫入選項 | 描述 |
COMPRESSION_CODEC | 壓縮編碼器別名。 用于寫入Parquet數據受支持的壓縮編碼器包括:
|
ROWGROUP_SIZE | 行組大小,單位字節(Byte),默認值:8 * 1024 * 1024。 Parquet文件由一個或多個行組組成,將數據邏輯劃分為行。 |
PAGE_SIZE | 頁面大小,單位字節(Byte),默認值:1024 * 1024。 行組由劃分為頁面的列塊組成。 |
DICTIONARY_PAGE_SIZE | 字典頁面大小,單位字節(Byte),默認值:512 * 1024。 當異構數據源訪問寫入Parquet文件時,默認啟用字典編碼。每列、每行組只有一個字典頁面。 |
PARQUET_VERSION | Parquet版本,支持:
|
示例
示例一:創建一個可寫外表,并在建表語句中指定好HDFS協議、Parquet格式及路徑,并向表中寫入數據。
CREATE WRITABLE EXTERNAL TABLE pxf_hdfs_writable_parquet_table ( a int, b int, c int ) LOCATION ('pxf://data/demo/pxf_hdfs_writable_parquet_table?PROFILE=hdfs:parquet&SERVER=test2') FORMAT 'CUSTOM' (FORMATTER='pxfwritable_export'); INSERT INTO pxf_hdfs_writable_parquet_table SELECT generate_series(1, 9000), generate_series(1, 9000), generate_series(1, 9000);
示例二:創建一個可讀外表,并在建表語句中指定好HDFS協議、Parquet格式及路徑,并查詢表中數據。
CREATE READABLE EXTERNAL TABLE pxf_hdfs_readable_parquet_table ( a int, b int, c int ) LOCATION ('pxf://data/demo/pxf_hdfs_writable_parquet_table?PROFILE=hdfs:parquet&SERVER=test2') FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import'); SELECT * FROM pxf_hdfs_readable_parquet_table;
Hive外表
若需在AnalyticDB PostgreSQL版數據庫中展示Hive數據,請將Hive數據值映射到相同類型的AnalyticDB PostgreSQL版數據庫列。映射關系,請參見附錄4:Hive數據類型與AnalyticDB PostgreSQL數據類型映射關系。
語法
可寫Hive外表與可讀Hive外表支持的功能有差異,請根據需要選擇合適的語法。
可寫外表
由于在新版本中Hive相關數據寫入接口進行了較大變更,與早期版本的底層邏輯不同,可能在使用新版本Hive外表進行創建或寫入數據時報錯,建議使用HDFS方式創建外表進行寫入。語法詳情請參見HDFS外表。
可讀外表
CREATE [READABLE] EXTERNAL TABLE <table_name> ( <column_name> <data_type> [, ...] | LIKE <other_table> ) LOCATION ('pxf://<hive-db-name>.<hive-table-name> ?PROFILE=Hive|HiveText|HiveRC|HiveORC|HiveVectorizedORC[&SERVER=<server_name>]']) FORMAT 'CUSTOM|TEXT' (FORMATTER='pxfwritable_import' | delimiter='<delim>')
參數
參數 | 說明 |
READABLE | 創建可讀外表時,可定義READABLE關鍵字或省略。 |
hive_dbName | Hive數據庫的名稱。 如果省略,默認為 |
hive_tableName | Hive表的名稱。 |
PROFILE | 指定Hive外表數據格式,必須指定為 Hive外表支持的數據格式,請參見附錄2:Hive外表數據格式。 重要
|
SERVER | 外部數據源名稱。登錄云原生數據倉庫AnalyticDB PostgreSQL版控制臺,在 頁面查看數據源名稱。 如未指定,異構數據源訪問將使用Default服務器。 |
FORMAT |
|
示例
登錄Hive集群,創建Hive表。
hive> CREATE EXTERNAL TABLE IF NOT EXISTS pxf_hive_demo_table ( a int, b int, c int ) row format delimited fields terminated by '|' stored as textfile location '/data/demo/pxf_hdfs_demo_table';
登錄AnalyticDB PostgreSQL版數據庫,創建可寫Hive外表,并向外表插入數據。
postgres> CREATE WRITABLE EXTERNAL TABLE pxf_hive_writable_table ( a int, b int, c int ) LOCATION ('pxf://default.pxf_hive_demo_table?PROFILE=Hive&SERVER=test2') FORMAT 'TEXT' (delimiter='|'); INSERT INTO pxf_hive_writable_table SELECT generate_series(1, 9000), generate_series(1, 9000), generate_series(1, 9000);
創建可讀Hive外表,并查詢外表數據。
postgres> CREATE EXTERNAL TABLE pxf_hive_readable_table ( a int, b int, c int ) LOCATION ('pxf://default.pxf_hive_demo_table?PROFILE=Hive&SERVER=test2') FORMAT 'TEXT' (delimiter='|'); SELECT * FROM pxf_hive_readable_table;
JDBC外表
支持的數據類型
JDBC連接器支持以下數據類型:
INTEGER,BIGINT,SMALLINT
REAL,FLOAT8
NUMERIC
BOOLEAN
VARCHAR,BPCHAR,TEXT
DATE
TIMESTAMP
BYTEA
JDBC連接器不支持讀取或寫入以字節數組(Byte[]
)存儲的Hive數據。
語法
使用以下語法創建外表并使用JDBC連接器讀取或寫入數據,如需訪問遠程SQL數據庫中的數據,可以創建一個引用該遠程數據庫表的可讀或可寫的
AnalyticDB PostgreSQL版外表。
AnalyticDB PostgreSQL版外表、遠程數據庫表和查詢結果元組必須具有相同的列名稱和列類型。
CREATE [READABLE | WRITABLE] EXTERNAL TABLE <table_name>
( <column_name> <data_type> [, ...] | LIKE <other_table> )
LOCATION ('pxf://<external_tableName>?PROFILE=Jdbc[&SERVER=<server_name>][&<custom-option>=<value>[...]]')
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import'|'pxfwritable_export');
參數
參數 | 說明 |
external_tableName | 外部表的全名。取決于外部SQL數據庫,可能包括模式名稱和表名稱。 |
PROFILE | 指定JDBC外表數據格式,必須指定為 |
SERVER | 外部數據源名稱。登錄云原生數據倉庫AnalyticDB PostgreSQL版控制臺,在 頁面查看數據源名稱。 如未指定,異構數據源訪問將使用Default服務器。 |
custom-option | 自定義選項,詳情請參見JDBC自定義選項。 |
FORMAT | 固定為
|
JDBC自定義選項
您可以在LOCATION URI
中添加JDBC連接器自定義選項,并在每個選項前加上&
符號。JDBC支持的custom-option
包括:
選項名稱 | 操作 | 描述 |
BATCH_SIZE | Write | 標識要批處理到外部SQL數據庫的INSERT操作數量。默認開啟批處理,默認值:100,需為整數。 異構數據源訪問始終會驗證BATCH_SIZE選項。
|
FETCH_SIZE | Read | 標識從外部SQL數據庫讀取時要緩沖的行數。讀取行批處理默認為啟用,默認值:1000,需為整數。 要修改默認的獲取值大小,請在創建外表時指定FETCH_SIZE,如 如果外部數據庫JDBC驅動程序不支持讀取時批處理,則必須通過設置 |
QUERY_TIMEOUT | Read或Write | 標識JDBC驅動程序等待語句執行的時間。單位:(s)。 默認值:無限的,需為整數。 |
POOL_SIZE | Write | 在INSERT操作中啟動線程池,并標識線程池中的線程數。默認線程池為禁用。 建議將批處理(BATCH_SIZE)和線程池一起使用,當一起使用時,每個線程將接收并處理一批完整的數據。如果僅使用線程池而不使用批處理,則線程池中的每個線程都恰好接收一個元組。 當線程池中的任一線程失敗時,JDBC連接器返回一個錯誤。請注意INSERT操作失敗,部分數據可能會寫入外部數據庫表中。 要禁用或啟動線程池并設置線程池大小,在創建外表時按如下規則指定POOL_SIZE:
|
PARTITION_BY | Read | 啟用分區讀。 只能指定一個分區列,格式為 在創建JDBC外表時,PARTITION_BY子句的示例如下:
啟用分區時,JDBC連接器將SELECT查詢拆分為多個子查詢,這些子查詢是檢索數據的子集,每個子集稱為一個片段。 JDBC連接器會自動向每個片段添加額外的查詢約束(WHERE表達式),以確保從外部數據庫中檢索每個元組的數據都恰好一次。 例如,當用戶查詢使用指定
外部數據源服務會在AnalyticDB PostgreSQL版數據庫Segment之間分配片段。在外部數據源實例為服務片段的主機上的每個Segment生成一個線程。 如果片段的數量小于或等于在片段主機上配置的AnalyticDB PostgreSQL版數據庫Segment的數量,則單個外部數據源實例可以為所有片段提供服務。每個異構數據源訪問服務實例將其結果發送回AnalyticDB PostgreSQL版數據庫,在此收集并將其返回給用戶。 當您指定 |
RANGE | Read | 當指定PARTITION_BY時,則為必填項。 指定查詢范圍, 用以提示幫助創建分區。 RANGE格式取決于分區列的數據類型。
|
INTERVAL | Read | 如果指定了PARTITION_BY且類型為 一個分區片段的間隔,格式為
|
QUOTE_COLUMNS | Read | 控制在構造外部數據庫的SQL查詢時JDBC連接器是否引用列名。
如果未指定QUOTE_COLUMNS(默認不指定),當查詢中任一字段滿足以下條件,JDBC連接器將自動引用所有列名:
|
示例
在MySQL或PostgreSQL數據庫中,創建數據表,并插入數據。
CREATE TABLE test(id int, name VARCHAR(255));
INSERT INTO test(id,name) VALUES(1,'qingzhi');
INSERT INTO test(id,name) VALUES(2,'jianli');
登錄AnalyticDB PostgreSQL版數據庫,創建JDBC外表,并查詢外表數據。
CREATE EXTERNAL TABLE pxf_jdbc_textsimple(id int, name varchar)
LOCATION ('pxf://test?PROFILE=Jdbc&SERVER=test01')
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import')
ENCODING 'UTF8';
SELECT * FROM pxf_jdbc_textsimple;
附錄1:HDFS外表數據格式
HDFS外表支持的數據格式與創建HDFS外表配置的PROFILE參數對應關系如下。
數據格式 | PROFILE(配置文件名稱) |
單行的分隔文本 | hdfs:text |
含有被引號引起來的換行符的分隔文本 | hdfs:text:multi |
Avro | hdfs:avro |
JSON | hdfs:json |
Parquet | hdfs:parquet |
AvroSequenceFile | hdfs:AvroSequenceFile |
SequenceFile | hdfs:SequenceFile |
附錄2:Hive外表數據格式
Hive外表支持的數據格式與創建Hive外表配置的PROFILE參數對應關系如下。
數據格式 | PROFILE(配置文件名稱) |
TextFile | Hive或HiveText |
SequenceFile | Hive |
RCFile | Hive或HiveRC |
ORC | Hive、HiveORC或HiveVectorizedORC |
Parquet | Hive |
附錄3:Parquet數據類型與AnalyticDB PostgreSQL數據類型映射關系
Parquet數據類型 | AnalyticDB PostgreSQL數據類型 |
Boolean | Boolean |
Byte_array | Bytea,Text |
Double | Float8 |
Fixed_len_byte_array | Numeric |
Float | Real |
Int_8, Int_16 | Smallint,Integer |
Int64 | Bigint |
Int96 | Timestamp,Timestamptz |
寫入Parquet時,異構數據源將Timestamp本地化為當前系統時區,并將其轉換為通用時間(UTC),最終轉換為Int96。在此轉換過程中,異構數據源會丟失時區信息。
附錄4:Hive數據類型與AnalyticDB PostgreSQL數據類型映射關系
Hive數據類型 | AnalyticDB PostgreSQL數據類型 |
Boolean | Bool |
Int | Int4 |
Smallint | Int2 |
Tinyint | Int2 |
Float | Float4 |
Bigint | Int8 |
double | Float8 |
String | Text |
Binary | Bytea |
Timestamp | Timestamp |