在 Athena 中建立資料表 - Amazon Athena

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

在 Athena 中建立資料表

您可以使用 JDBC 或 ODBC 驅動程式,或使用 Athena Create table (建立資料表) 表單,在 Athena 主控台中執行 DDL 陳述式。

您在 Athena 中建立新的資料表結構描述時,Athena 會將結構描述存放在資料目錄中,並在您執行查詢時使用它。

Athena 使用稱為的方法 schema-on-read,也就是說,在您執行查詢時,結構描述會投影到您的資料上。如此便不必載入或轉換資料。

Athena 不會修改您在 Amazon S3 中的資料。

Athena 使用 Apache Hive 來定義資料表和建立資料庫,這本質上是資料表的邏輯命名空間。

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

查詢時,您會使用標準 SQL 和查詢資料表,並在那時讀取資料。您可以使用 Apache Hive 文件來尋找如何建立資料庫和資料表的指導,但以下提供 Athena 的專用指導。

最大查詢字串長度為 256 KB。

蜂巢通過使用序列化程序解串器()庫的支持多種數據格式。SerDe您也可以使用規則表達式來定義複雜的結構描述。如需支援的 SerDe 程式庫清單,請參閱支援的 SerDes 和資料格式

考量與限制

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

Athena 資料表和 Amazon S3 資料的要求

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

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

  • 您必須擁有適當的許可,才可使用 Amazon S3 位置的資料。如需詳細資訊,請參閱 從 Athena 訪問 Amazon S3

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

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

  • Athena 不支援查詢 S3 Glacier Flexible Retrieval 中的資料或 S3 Glacier Deep Archive 儲存類別。在 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 儲存類別中忽略的物件。作為替代方法,可以使用 Amazon S3 Glacier Instant Retrieval 儲存類別,該儲存類別可由 Athena 查詢。如需詳細資訊,請參閱 Amazon S3 Glacier Instant Retrieval 儲存類別

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

  • 如果您對具有大量物件的 Amazon S3 儲存貯體發出查詢,並且未將資料分割,這類查詢可能會影響 Amazon S3 中的 Get 請求率限制,並導致 Amazon S3 例外狀況。若要避免錯誤,請分割您的資料。此外,請考慮調校您的 Amazon S3 請求率。如需詳細資訊,請參閱請求率和效能考量

  • 如果您使用 AWS Glue CreateTableAPI 作業或 AWS CloudFormation AWS::Glue::Table範本建立要在 Athena 中使用的資料表,但未指定TableType屬性,然後執行類似SHOW CREATE TABLE或的 DDL 查詢MSCK REPAIR TABLE,則可能會收到錯誤訊息 F AILED: NullPointerException 名稱為空值

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

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

支援的函數

Athena 查詢中支援的函數對應於 Trino 和 Presto 中的函數。如需有關每個函數的資訊,請參閱 TrinoPresto 文件中的函數和運算子部分。

不支援交易資料轉換

Athena 不支援對資料表資料進行以交易為基礎的操作 (例如可在 Hive 或 Presto 中找到的操作)。如需不支援的關鍵字完整清單,請參閱不支援的 DDL

變更資料表狀態的操作為 ACID

當您建立、更新或刪除資料表時,這些操作保證與 ACID 相容。例如,如果多個使用者或用戶端同時嘗試建立或修改現有的資料表,只有其中一個會成功。

資料表為 EXTERNAL

除了在建立 Iceberg 資料表時,請始終使用 EXTERNAL 關鍵字。如果您在非 Iceberg 資料表上使用 CREATE TABLE 卻沒有帶 EXTERNAL 關鍵字,則 Athena 會發出錯誤。當您在 Athena 中捨棄資料表時,只會移除資料表中繼資料,資料會保留在 Amazon S3 中。

使用 AWS Glue 或 Athena 主控台建立資料表

您可以使用新增表格表單 AWS Glue,或在 Athena 查詢編輯器中執行 DDL 陳述式,在 Athena 中建立資料表。

使用 AWS Glue 爬行者程式建立表格

  1. 前往 https://console.aws.amazon.com/athena/ 開啟 Athena 主控台。

  2. 在查詢編輯器中,選擇位於資料表和檢視旁的建立,然後選擇 AWS Glue 爬蟲程式

  3. 請依照 AWS Glue 主控台 Add crawler (新增爬蟲程式) 頁面上的步驟新增爬蟲程式。

    如需詳細資訊,請參閱 使用 AWS Glue 爬蟲

使用 Athena 新增資料表表單來建立資料表

  1. 前往 https://console.aws.amazon.com/athena/ 開啟 Athena 主控台。

  2. 在查詢編輯器中,選擇位在 Tables and views (資料表和檢視) 旁的 Create (建立),然後選擇 S3 bucket data (S3 儲存貯體資料)。

  3. Create Table From S3 bucket data (從 S3 儲存貯體資料建立資料表) 表單中,輸入用於建立資料表的資訊,然後選擇 Create table (建立資料表)。如需表單欄位的詳細資訊,請參閱使用表單新增資料表

使用 Hive DDL 建立資料表

  1. Database (資料庫) 選單中,選擇要為其建立資料表的資料庫。如果您未在 CREATE TABLE 陳述式中指定資料庫,則會在查詢編輯器中目前選取的資料庫中建立資料表。

  2. 在查詢編輯器中輸入類似下列的陳述式,然後選擇 Run (執行),或按 Ctrl+ENTER

    CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs ( `Date` Date, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, OS String, Browser String, BrowserVersion String ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$" ) LOCATION 's3://athena-examples-MyRegion/cloudfront/plaintext/';

顯示資料表資訊

在 Athena 中建立資料表之後,其名稱會顯示在左側的 Tables (資料表) 清單中。如需顯示有關資料表的資訊並進行管理,可以選擇 Athena 主控台中資料表名稱旁邊的三個垂直點。

  • 預覽資料表 – 透過執行 Athena 查詢編輯器中的 SELECT * FROM "database_name"."table_name" LIMIT 10 陳述式,顯示所有資料欄的前 10 列。

  • 產生建立資料表 DDL – 您可以透過執行 Athena 查詢編輯器中的 SHOW CREATE TABLE table_name 陳述式,產生可用來重新建立資料表的 DDL 陳述式。

  • 載入分割區 – 執行 Athena 查詢編輯器中的 MSCK REPAIR TABLE table_name 陳述式。僅當資料表有分割區時,才可使用此選項。

  • 插入編輯器中 - 在目前編輯位置將資料表的名稱插入查詢編輯器中。

  • Delete table (刪除資料表) – 顯示確認對話方塊,詢問您是否要刪除資料表。如果您同意,請執行 Athena 查詢編輯器中的 DROP TABLE table_name 陳述式。

  • Table properties (資料表屬性) – 顯示資料表名稱、資料庫名稱、建立時間,以及資料表是否有加密資料。