在 Athena 中建立資料表 - Amazon Athena

在 Athena 中建立資料表

若要建立資料表,您可以使用 Athena 建立資料表表單,或使用 JDBC 或 ODBC 驅動器,在 Athena 主控台中執行 DDL 陳述式。Athena 使用 Apache Hive 來定義資料表和建立資料庫,這本質上是資料表的邏輯命名空間。Athena 支援各種不同的序列化程式-還原序列化程式 (SerDe) 程式庫,從而可針對特定資料格式建立資料表。如需支援的 SerDe 程式庫清單,請參閱為您的資料選擇 SerDe

在 Athena 中建立資料庫和資料表時,您只需描述結構描述,以及位於 Amazon S3 中供讀取時間查詢的資料表資料所在的位置。Athena 不會修改您在 Amazon S3 中的資料。因此,資料庫和資料表會有與傳統關聯式資料庫系統稍微不同的意義,因為資料不會隨著資料庫和資料表的結構描述定義存放。

Athena 會將結構描述存放在 AWS Glue Data Catalog 中,並在您採用 SQL 查詢資料表時使用該結構描述來讀取資料。此讀時模式方法可在您執行查詢時將結構描述投影到資料上,因此無需載入或轉換資料。

考量與限制

以下是 Athena 中針對資料表的一些重要限制和注意事項。

Amazon S3 考量事項

建立資料表時,您需使用 LOCATION 子句來指定基礎資料的 Amazon S3 儲存貯體位置。考慮下列各項:

  • Athena 只能查詢版本控制的 Amazon S3 儲存貯體上最新版本的資料,無法查詢之前版本的資料。

  • 您必須擁有使用 Amazon S3 位置中資料的許可。如需更多詳細資訊,請參閱 透過 Athena 控制 Amazon S3 的存取權

  • Athena 支援查詢的物件可以與多個儲存類別一起存放在 LOCATION 子句指定的相同儲存貯體中。例如,您可以在存放於 Amazon S3 中不同儲存類別 (標準、標準 – IA 和智慧型分層) 的物件中查詢資料。

  • Athena 支援申請者付款儲存貯體。如需有關如何對含有您要在 Athena 中查詢之來源資料的儲存貯體啟用申請者付款的資訊,請參閱建立工作群組

  • 您可以使用 Athena 查詢從 Amazon Glacier Flexible Retrieval (舊稱 Glacier) 和 Amazon Glacier Deep Archive Amazon S3 儲存類別中還原的物件,您必須基於每個資料表啟用該功能。如果您在執行查詢之前未在資料表上啟用此功能,Athena 會在查詢執行期略過資料表的所有 Amazon Glacier Flexible Retrieval 和 Amazon Glacier Deep Archive 物件。如需更多詳細資訊,請參閱 查詢還原的 Amazon Glacier 物件

    如需有關儲存類別的資訊,請參閱儲存類別在 Amazon S3 中變更物件的儲存類別轉換為 GLACIER 儲存類別 (物件封存),以及《Amazon Simple Storage Service 使用者指南》中的請求者支付儲存貯體

  • 如果您對具有大量物件的 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 CreateTable API 操作或 CloudFormation AWS::Glue::Table 範本建立一個要在 Athena 中使用的資料表,而不指定 TableType 屬性,然後執行像 SHOW CREATE TABLEMSCK REPAIR TABLE 的 DDL 查詢,您會收到錯誤訊息 FAILED: NullPointerException Name is null (失敗:NullPointerException 名稱為 null)。

    若要解決錯誤,請為 TableInput TableType 屬性指定值作為 AWS Glue CreateTable API 呼叫或 CloudFormation 範本的一部分。TableType 可能的值包括 EXTERNAL_TABLEVIRTUAL_VIEW

    此需求僅適用於當您使用 AWS Glue CreateTable API 操作或 AWS::Glue::Table 範本建立資料表時。如果您使用 DDL 陳述式或 AWS Glue 爬蟲程式建立 Athena 資料表,則系統會為您自動定義 TableType 屬性。