本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Athena 建立表格
若要建立表格,您可以在 Athena 主控台中執行DDL陳述式、使用 Athena Create 表格表單,或使用JDBC或ODBC驅動程式。Athena 使用 Apache Hive 來定義資料表和建立資料庫,這本質上是資料表的邏輯命名空間。Athena 支援各種序列化程式-還原序列化程式 (SerDe) 程式庫,用於建立特定資料格式的表格。如需支援的 SerDe 程式庫清單,請參閱 SerDe 為您的資料選擇。
在 Athena 中建立資料庫和資料表時,您只需描述結構描述,以及位於 Amazon S3 中供讀取時間查詢的資料表資料所在的位置。Athena 不會修改您在 Amazon S3 中的資料。因此,資料庫和資料表會有與傳統關聯式資料庫系統稍微不同的意義,因為資料不會隨著資料庫和資料表的結構描述定義存放。
Athena 將結構描述儲存在 AWS Glue Data Catalog 並在使用查詢表時使用它來讀取數據SQL。這schema-on-read種方法可在您執行查詢時將結構描述投影到資料上,因此無需載入或轉換資料。
考量與限制
以下是 Athena 中針對資料表的一些重要限制和注意事項。
Amazon S3 考量
建立資料表時,您需使用 LOCATION
子句來指定基礎資料的 Amazon S3 儲存貯體位置。考慮下列各項:
-
Athena 只能查詢版本控制的 Amazon S3 儲存貯體上最新版本的資料,無法查詢之前版本的資料。
-
您必須擁有在 Amazon S3 位置處理資料的許可。如需詳細資訊,請參閱從 Athena 控制對 Amazon S3 的存取。
-
Athena 支援查詢的物件可以與多個儲存類別一起存放在
LOCATION
子句指定的相同儲存貯體中。例如,您可以在存放於 Amazon S3 中不同儲存類別 (標準、標準 – IA 和智慧型分層) 的物件中查詢資料。 -
Athena 支援申請者付款儲存貯體。如需有關如何對含有您要在 Athena 中查詢之來源資料的儲存貯體啟用申請者付款的資訊,請參閱建立工作群組。
-
您可以使用 Athena 從 S3 Glacier 彈性擷取 (先前稱為 Glacier) 和 S3 Glacier 深層存檔 Amazon S3 儲存類別查詢還原的物件,但您必須以每個表格為基礎啟用此功能。如果您在執行查詢之前未在資料表上啟用此功能,Athena 會在查詢執行期略過資料表的所有 S3 Glacier Flexible Retrieval 和 S3 Glacier Deep Archive 物件。如需詳細資訊,請參閱查詢還原的 Amazon S3 冰川物件。
如需儲存類別的相關資訊,請參閱 Amazon 簡單儲存服務使用者指南中的儲存類別、變更 Amazon S3 中物件的GLACIER儲存類別、轉換至儲存類別 (物件存檔) 和請求者付費儲存貯體。
-
如果您對具有大量物件的 Amazon S3 儲存貯體發出查詢,並且未將資料分割,這類查詢可能會影響 Amazon S3 中的 Get 請求率限制,並導致 Amazon S3 例外狀況。若要避免錯誤,請分割您的資料。此外,請考慮調校您的 Amazon S3 請求率。如需詳細資訊,請參閱請求率和效能考量。
如需在 Amazon S3 中為資料指定位置的詳細資訊,請參閱在 Amazon S3 中指定表格位置。
其他考量
-
不支援交易資料轉換 — Athena 不支援資料表資料上的交易型作業 (例如 Hive 或 Presto 中找到的作業)。如需不支援的關鍵字完整清單,請參閱不支援DDL。
-
表格上的作業為 ACID — 當您建立、更新或刪除資料表時,保證這些作業ACID符合規定。例如,如果多個使用者或用戶端同時嘗試建立或修改現有的資料表,只有其中一個會成功。
-
表是 EXTERNAL-除了在創建 Iceberg 表時,請始終使用
EXTERNAL
關鍵字。如果您在非 Iceberg 資料表上使用CREATE TABLE
卻沒有帶EXTERNAL
關鍵字,則 Athena 會發出錯誤。當您在 Athena 中捨棄資料表時,只會移除資料表中繼資料,資料會保留在 Amazon S3 中。 -
最大查詢字串長度 — 查詢字串長度上限為 256 KB。
如果您使用 AWS Glue CreateTableAPI作業或 AWS CloudFormation
AWS::Glue::Table
用於在 Athena 中使用的模板,而無需指定TableType
屬性,然後運行類似的DDL查詢MSCK REPAIR TABLE
,SHOW CREATE TABLE
或者,您可以收到錯誤消息FAILED: NullPointerException 名稱為空
。若要解決錯誤,請指定TableInput
TableType
屬性的值作為 AWS GlueCreateTable
API致電或 AWS CloudFormation 範本。TableType
可能的值包括EXTERNAL_TABLE
或VIRTUAL_VIEW
。只有當您使用 AWS Glue
CreateTable
API操作或模AWS::Glue::Table
板。如果您使 Athena DDL 陳述式或 AWS Glue 爬蟲,TableType
屬性是自動為您定義的。