Amazon S3 中的資料表位置 - Amazon Athena

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

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 Simple Storage Service 使用者指南》中的儲存貯體限制

  • 如需有關在 Amazon S3 中使用資料夾的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的使用資料夾

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://bucketname/folder//folder/。雖然這是有效的 Amazon S3 路徑,但 Athena 不允許如此,而且會將其變更為 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

當 Athena 在分割資料表上執行查詢時,它會檢查是否已在查詢的 WHERE 子句中使用任何分割資料欄。如果使用分割資料行,Athena 會要求 AWS Glue 資料目錄傳回符合指定分割區資料行的分割區規格。該分割區規格包含 LOCATION 屬性,其會告知 Athena 在讀取資料時需要使用哪一個 Amazon S3 字首。在這種情況下,「只會」掃描存放在此字首中的資料。如果您未在 WHERE 子句中使用分割的資料欄,Athena 會掃描屬於資料表分割區的所有檔案。

如需使用 Athena 進行分割以改善查詢效能並降低查詢成本的範例,請參閱 Amazon Athena 的十大效能調整秘訣