本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可能需要重新命名資料表以更正拼字、讓資料欄名稱更具描述性,或重複使用現有的資料欄以避免資料欄重新排序。
如果您將資料儲存在CSV和TSV、或中,且設定為按索引讀取ORC,則可以重新命名欄。如需相關資訊,請參閱 了解阿帕奇ORC和阿帕奇鑲木地板索引訪問。
Athena 會依結構描述TSV中資料行的順序讀取CSV和順序來讀取資料,並以相同的順序傳回資料。它不會使用欄名稱將資料對應至資料行,這就是為什麼您可以在CSV不中斷 Athena 查詢的TSV情況下重新命名資料行的原因。
重新命名資料欄的一種策略是根據相同的基礎資料建立一個新資料表,但使用新的資料欄名稱。下列範例建立新的 orders_parquet
資料表,名為 orders_parquet_column_renamed
。此範例會變更資料欄 `o_totalprice`
名稱為 `o_total_price`
,然後在 Athena 中執行查詢:
CREATE EXTERNAL TABLE orders_parquet_column_renamed (
`o_orderkey` int,
`o_custkey` int,
`o_orderstatus` string,
`o_total_price` double,
`o_orderdate` string,
`o_orderpriority` string,
`o_clerk` string,
`o_shippriority` int,
`o_comment` string
)
STORED AS PARQUET
LOCATION 's3://amzn-s3-demo-bucket/orders_parquet/';
在 Parquet 資料表案例中,以下查詢執行,但重新命名的資料欄不會顯示資料,因為資料欄是依名稱存取 (Parquet 的預設值),而不是依索引:
SELECT *
FROM orders_parquet_column_renamed;
包含資料表的查詢CSV看起來類似:
CREATE EXTERNAL TABLE orders_csv_column_renamed (
`o_orderkey` int,
`o_custkey` int,
`o_orderstatus` string,
`o_total_price` double,
`o_orderdate` string,
`o_orderpriority` string,
`o_clerk` string,
`o_shippriority` int,
`o_comment` string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://amzn-s3-demo-bucket/orders_csv/';
在資料CSV表案例中,會執行下列查詢,且資料會顯示在所有資料行中,包括已重新命名的資料行:
SELECT *
FROM orders_csv_column_renamed;