本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon S3 中的資料表位置
當您在 Athena 執行CREATE TABLE
查詢時,Athena 會在資料目錄中註冊您的 AWS Glue 資料表,資料目錄是 Athena 儲存中繼資料的地方。
若要在 Amazon S3 中指定資料的路徑,請使用 LOCATION
屬性,如下列範例所示:
CREATE EXTERNAL TABLE `test_table`(
...
)
ROW FORMAT ...
STORED AS INPUTFORMAT ...
OUTPUTFORMAT ...
LOCATION s3://bucketname
/folder
/
Amazon S3 中的 LOCATION
會指定代表您資料表的所有檔案。
重要
Athena 會讀取在您指定的 Amazon S3 資料夾中存放的所有資料。如果您有不希望 Athena 讀取的資料,請勿使用與您希望 Athena 讀取之資料相同的 Amazon S3 資料夾存放該資料。若您使用的是分割,為確保 Athena 掃描分割區中的資料,WHERE
篩選條件必須包含分割區。如需詳細資訊,請參閱 資料表位置和分割區。
當您在 CREATE TABLE
陳述式中指定 LOCATION
時,請使用下列指導方針:
-
使用後置斜線。
-
您可以使用 Amazon S3 資料夾的路徑或 Amazon S3 存取點別名。如需有關 Amazon S3 存取點別名的資訊,請參閱《Amazon S3 使用者指南》中的為存取點使用儲存貯體型別名。
使用:
s3://bucketname
/folder
/
s3://access-point-name
-metadata
-s3alias/folder
/
請勿使用以下任何項目指定您資料的 LOCATION
。
-
請勿使用檔案名稱、底線、萬用字元或 glob 模式來指定檔案位置。
-
請勿將完整 HTTP 標記法 (例如
s3.amazon.com
) 新增至 Amazon S3 儲存貯體路徑。 -
請勿在路徑中使用
//
等使用空的資料夾,如下所示:S3://
。雖然這是有效的 Amazon S3 路徑,但 Athena 不允許如此,而且會將其變更為bucketname
/folder
//folder
/s3://
,並移除額外的bucketname
/folder
/folder
//
。請勿使用。
s3://path_to_bucket s3://path_to_bucket/* s3://path_to_bucket/mySpecialFile.dat s3://bucketname/prefix/filename.csv s3://test-bucket.s3.amazon.com S3://bucket/prefix//prefix/ arn:aws:s3:::bucketname/prefix s3://arn:aws:s3:
<region>
:<account_id>
:accesspoint/<accesspointname>
https://<accesspointname>
-<number>
.s3-accesspoint.<region>
.amazonaws.com
資料表位置和分割區
可以根據一組資料欄,將來源資料分組至名為 partitions 的 Amazon S3 資料夾。例如,這些欄可代表建立特定記錄的年、月、日。
當您建立資料表時,您可以選擇為其建立分割區。Athena 針對未分割的資料表執行 SQL 查詢時,它會使用資料表定義的 LOCATION
屬性作為要列出的基礎路徑,並掃描所有可用的檔案。但是,在查詢分區資料表之前,您必須使用分區資訊更新「資 AWS Glue 料目錄」。此資訊表示特定分割區中的檔案結構描述,以及分割區在 Amazon S3 中檔案的 LOCATION
。
-
若要瞭解 AWS Glue 爬行者程式如何新增分割區,請參閱爬行者程式如何判斷何時建立分割區? 在AWS Glue 開發人員指南中。
-
若要了解如何設定爬蟲程式,使其在現有分割區中為資料建立資料表,請參閱對爬蟲程式使用多個資料來源。
-
您也可以在 Athena 中直接於資料表內建立分割區。如需詳細資訊,請參閱 在 Athena 中分割資料。
當 Athena 在分割資料表上執行查詢時,它會檢查是否已在查詢的 WHERE
子句中使用任何分割資料欄。如果使用分割資料行,Athena 會要求 AWS Glue 資料目錄傳回符合指定分割區資料行的分割區規格。該分割區規格包含 LOCATION
屬性,其會告知 Athena 在讀取資料時需要使用哪一個 Amazon S3 字首。在這種情況下,「只會」掃描存放在此字首中的資料。如果您未在 WHERE
子句中使用分割的資料欄,Athena 會掃描屬於資料表分割區的所有檔案。
如需使用 Athena 進行分割以改善查詢效能並降低查詢成本的範例,請參閱 Amazon Athena 的十大效能調整秘訣