本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
資料格式和類型映射
當您建立外部資料表時,延伸項目會將資料類型從 Parquet 或 Iceberg 映射到 PostgreSQL 資料類型。本節說明 Aurora PostgreSQL 如何執行類型映射,以及支援哪些 PostgreSQL 資料類型。
自動資料類型映射
當您建立外部資料表而不指定資料欄定義 (使用空白括號) 時,Aurora PostgreSQL 會自動從遠端資料來源推斷資料欄名稱和資料類型。
下表顯示如何推斷 Parquet 和 Iceberg 中存在的來源類型。
| Parquet 類型 | Iceberg 類型 | PostgreSQL 類型 |
|---|---|---|
BOOLEAN |
boolean |
boolean |
INT32 |
int |
integer |
INT64 |
long |
bigint |
FLOAT |
float |
real |
DOUBLE |
double |
double precision |
DECIMAL(p,s) |
decimal(p,s) |
numeric(p,s) |
BYTE_ARRAY |
binary |
bytea |
FIXED_LEN_BYTE_ARRAY |
fixed(L) |
bytea |
STRING (UTF-8) |
string |
text |
UUID |
uuid |
uuid |
DATE |
date |
date |
TIME (毫秒/微秒,isAdjustedToUTC = false) |
time |
time |
TIMESTAMP (微秒/米利斯,isAdjustedToUTC = false) |
timestamp |
timestamp |
TIMESTAMP (南奧,isAdjustedToUTC = false) |
timestamp_ns |
timestamp |
TIMESTAMP (微秒/米利斯,isAdjustedToUTC = true) |
timestamptz |
timestamptz |
TIMESTAMP (南奧,isAdjustedToUTC = true) |
timestamptz_ns |
timestamptz |
下列其他 Parquet 類型沒有 Iceberg 對等項目,並推斷如下。
| Parquet 類型 | PostgreSQL 類型 |
|---|---|
INT_8 (1 位元組 int) |
smallint |
INT16 |
smallint |
UNSIGNED INT8 |
smallint |
UNSIGNED INT16 |
integer |
UNSIGNED INT32 |
bigint |
UNSIGNED INT64 |
numeric(20,0) |
ENUM (邏輯) |
varchar |
JSON |
json |
TIME (毫秒/微秒,isAdjustedToUTC = true) |
timetz |
| 舊版時間戳記 (奈秒) | timestamp |
INTERVAL |
interval |
BIT |
varbit |
不支援自動結構描述推論的類型
無法自動推斷下列遠端來源類型。當您使用空白資料欄清單建立外部資料表,且來源包含下列其中一種類型時, 會CREATE FOREIGN TABLE傳回錯誤:
STRUCTMAPLISTGEOMETRYGEOGRAPHY
您可以透過兩種方式處理這些資料欄:
-
略過它們:
aurora_analytics.skip_unsupported_columns設定為 ,true讓自動結構描述推論略過不支援的資料欄,並使用剩餘的資料欄建立外部資料表。每個略過的資料欄都會發出通知。 -
手動定義:明確指定欄清單,並將結構、映射或巢狀清單欄宣告為
json(或varchar原生文字表示法)。Aurora PostgreSQL 接著會以標準 JSON 格式傳回資料。
CREATE FOREIGN TABLE my_table ( id integer, name text, struct_col json, map_col json, list_of_struct json ) SERVER aurora_analytics_server OPTIONS (location 's3://my-bucket/data/', format 'parquet');
外部資料表資料欄的資料類型
所有 PostgreSQL 資料類型都可以在外部資料表查詢 (表達式、結果和聯結) 中運作,就像在任何 PostgreSQL 查詢中一樣。下列各節是關於較窄的問題:您可以定義外部資料表資料欄的類型,以及分析引擎可以讀取 Parquet 或 Iceberg 資料欄的類型。此處不支援的類型無法用作外部資料表資料欄類型,但您仍可在相同查詢的其他位置自由使用該類型。
完全支援的類型
下列 PostgreSQL 資料類型完全支援為外部資料表資料欄類型:BOOLEAN、BYTEA、INTEGER、SMALLINT、BIGINTREAL、DOUBLE PRECISION、TEXT、JSON、 DATE和 UUID。
部分支援的類型
以下 PostgreSQL 資料類型受到限制的支援。
| PostgreSQL 類型 | 限制 |
|---|---|
VARCHAR, BPCHAR |
不支援長度限制 (例如 VARCHAR(n)或 CHAR(n))。 |
NUMERIC, DECIMAL |
必須明確定義精確度 (P) 和比例 (S)。P 必須介於 1 到 38 之間。S 必須介於 0 和 P 之間。 |
TIME, TIMETZ |
僅支援最高精確度 (6)。 |
TIMESTAMP, TIMESTAMPTZ |
僅支援最高精確度 (6)。 |
BIT, VARBIT |
不支援長度限制 (例如 BIT(n)或 VARBIT(n))。 |
INTERVAL |
僅支援最高精確度 (6)。NaN 不支援特殊值 -inf、 inf和 。 |
外部資料表資料欄不支援的類型
下列 PostgreSQL 資料類型不能用作外部資料表資料欄類型。如果外部資料表資料欄定義為其中一個類型 (或在結構描述推論期間來源資料欄映射至其中一個類型), 會CREATE FOREIGN TABLE傳回錯誤。您仍然可以在查詢的其他位置使用這些類型 (例如,在SELECT清單中建置JSONB值或使用 陣列篩選),因為限制在資料欄定義上,而不是在查詢用量上。
| PostgreSQL 類型 | 備註 |
|---|---|
JSONB |
— |
SMALLSERIAL, SERIAL, BIGSERIAL |
— |
| 陣列類型 | 例如 INTEGER[] 和 TEXT[]。 |
ENUM |
— |
INET, CIDR, MACADDR, MACADDR8 |
— |
MONEY |
— |
| 範圍類型 | 例如,INT4RANGE、TSRANGE、DATERANGE。 |
| 幾何類型 | 例如,POINT、LINE、POLYGON、CIRCLE。 |
TSVECTOR, TSQUERY |
— |
XML |
— |
注意
當 Aurora PostgreSQL 自動推斷外部資料表的結構描述,且來源包含無法映射的資料欄時,預設會發生錯誤。將 aurora_analytics.skip_unsupported_columns 參數設定為 true 以略過這些資料欄,並使用其餘支援的資料欄建立外部資料表。