View a markdown version of this page

資料格式和類型映射 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

資料格式和類型映射

當您建立外部資料表時,延伸項目會將資料類型從 Parquet 或 Iceberg 映射到 PostgreSQL 資料類型。本節說明 Aurora PostgreSQL 如何執行類型映射,以及支援哪些 PostgreSQL 資料類型。

自動資料類型映射

當您建立外部資料表而不指定資料欄定義 (使用空白括號) 時,Aurora PostgreSQL 會自動從遠端資料來源推斷資料欄名稱和資料類型。

下表顯示如何推斷 Parquet 和 Iceberg 中存在的來源類型。

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 來源類型的類型推論
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傳回錯誤:

  • STRUCT

  • MAP

  • LIST

  • GEOMETRY

  • GEOGRAPHY

您可以透過兩種方式處理這些資料欄:

  • 略過它們: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 以略過這些資料欄,並使用其餘支援的資料欄建立外部資料表。