從 Athena 註冊 S3 Tables 儲存貯體目錄和查詢資料表 - Amazon Athena

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

從 Athena 註冊 S3 Tables 儲存貯體目錄和查詢資料表

Amazon S3 Tables 儲存貯體是 Amazon S3 中的儲存貯體類型,專門用於在 Apache Iceberg 資料表中存放表格式資料。資料表儲存貯體可自動化資料表管理任務,例如壓縮、快照管理和垃圾回收,進而持續最佳化查詢效能並將成本降至最低。無論您是剛開始,還是在 Iceberg 環境中已擁有數千個資料表,資料表儲存貯體都可以簡化任何規模的資料湖。如需詳細資訊,請參閱資料表儲存貯體

考量與限制

  • S3 Tables 支援 Iceberg 資料表支援的所有 DDL 操作,除了以下例外:

    • 不支援 ALTER TABLE RENAMECREATE VIEWALTER DATABASE

    • OPTIMIZEVACUUM – 您可以在 S3 中管理壓縮和快照管理。如需詳細資訊,請參閱 S3 Tables 維護文件

  • 不支援對註冊為 Athena 資料來源的 S3 Tables 進行 DDL 查詢。

  • 不支援查詢結果重複使用。

  • 在已啟用 SSE-KMS、CSE-KMS 加密的工作群組中,您無法在 S3 Tables 上執行寫入操作,例如 INSERTUPDATEDELETEMERGE

  • 在已啟用 S3 請求者支付選項的工作群組中,您無法在 S3 Tables 上執行 DML 操作。

從 Athena 查詢 S3 Tables

在 Athena 中查詢 S3 Tables 之前,請先完成以下先決條件步驟
  1. 建立 S3 資料表儲存貯體。如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的建立資料表儲存貯體

  2. 請依照《Amazon Simple Storage Service 使用者指南》中的整合的先決條件將資料表儲存貯體與 AWS 分析服務整合,確保您的資料表儲存貯體已成功與 AWS Glue Data Catalog 和 AWS Lake Formation 整合。

    注意

    如果在步驟 1 中,您從 S3 主控台建立 S3 資料表儲存貯體時啟用了整合,則可以略過此步驟。

  3. 對於您用於藉助 Athena 執行查詢的主體,請透過 Lake Formation 主控台或 AWS CLI 授予 S3 Table 目錄的 Lake Formation 許可。

    AWS 管理主控台
    1. https://console.aws.amazon.com/lakeformation/ 開啟 AWS Lake Formation 主控台,並以資料湖管理員身分登入。如需如何建立資料湖管理員的詳細資訊,請參閱建立資料湖管理員

    2. 在導覽窗格中,選擇資料許可,然後選擇授予

    3. 授予許可頁面的主體下,選擇要用來從 Athena 提交查詢的主體。

    4. LF-標籤或型錄資源下,選擇已命名的的資料型錄資源

    5. 針對目錄,請選擇您從資料表儲存貯體整合中建立的 Glue 資料目錄。例如,<accoundID>:s3tablescatalog/amzn-s3-demo-bucket

    6. 對於目錄許可,選擇超級

    7. 選擇 Grant (授予)。

    AWS CLI

    使用 Lake Formation 資料湖管理員角色執行下列命令,以授予您用於從 Athena 提交查詢的主體存取權。

    aws lakeformation grant-permissions \ --region <region (Example,us-east-1)> \ --cli-input-json \ '{ "Principal": { "DataLakePrincipalIdentifier": "<user or role ARN (Example, arn:aws:iam::<Account ID>:role/ExampleRole>" }, "Resource": { "Catalog": { "Id":"<Account ID>:s3tablescatalog/amzn-s3-demo-bucket" } }, "Permissions": ["ALL"] }'
提交 S3 Tables 的查詢
  1. 使用上文授予的使用者/角色從 Athena 提交 CREATE DATABASE 查詢。在此範例中,s3tablescatalog 是從整合建立的父 Glue Data Catalog, s3tablescatalog/amzn-s3-demo-bucket 是為每個 S3 Tables 儲存貯體建立的子 Glue Data Catalog。您進行查詢的方式有兩種。

    Option 1

    直接從主控台或 AWS CLI 指定子 Glue Data Catalog (s3tablescatalog/amzn-s3-demo-bucket)。

    使用 AWS 管理主控台

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

    2. 在左側導覽中,對於資料來源名稱,選擇 AwsDataCatalog

    3. 對於目錄,選擇 s3tablescatalog/amzn-s3-demo-bucket

    4. 在查詢編輯器中,輸入類似 CREATE DATABASE test_namespace 的查詢。

    使用 AWS CLI

    執行下列命令。

    aws athena start-query-execution \ --query-string 'CREATE DATABASE `test_namespace`' \ --query-execution-context '{"Catalog": "s3tablescatalog/amzn-s3-demo-bucket"}' \ --work-group "primary"
    Option 2

    在 Athena 主控台中,從子 Glue Data Catalog 建立 Athena 資料目錄,並在查詢中將其指定為目錄。如需更多詳細資訊,請參閱 將 S3 Tables 儲存貯體目錄註冊為 Athena 資料來源

  2. 使用您在先前步驟中建立的資料庫,使用 CREATE TABLE 建立資料表。下列範例會在您先前在 s3tablescatalog/amzn-s3-demo-bucket Glue 目錄中建立的 test_namespace 資料庫中建立資料表。

    AWS 管理主控台
    1. 在左側導覽中,對於資料來源名稱,選擇 AwsDataCatalog

    2. 對於目錄,選擇 s3tablescatalog/amzn-s3-demo-bucket

    3. 對於資料庫,選擇 test_namespace

    4. 在查詢編輯器中,執行下列查詢。

      CREATE TABLE daily_sales ( sale_date date, product_category string, sales_amount double) PARTITIONED BY (month(sale_date)) TBLPROPERTIES ('table_type' = 'iceberg')
    AWS CLI

    執行下列命令。

    aws athena start-query-execution \ --query-string "CREATE TABLE daily_sales ( sale_date date, product_category string, sales_amount double) PARTITIONED BY (month(sale_date)) TBLPROPERTIES ('table_type' = 'iceberg')" \ --query-execution-context '{"Catalog": "s3tablescatalog/amzn-s3-demo-bucket", "Database":"test_namespace"}' \ --work-group "primary"
  3. 將資料插入您在上一個步驟中建立的資料表。

    AWS 管理主控台
    1. 在左側導覽中,對於資料來源名稱,選擇 AwsDataCatalog

    2. 對於目錄,選擇 s3tablescatalog/amzn-s3-demo-bucket

    3. 對於資料庫,選擇 test_namespace

    4. 在查詢編輯器中,執行下列查詢。

      INSERT INTO daily_sales VALUES (DATE '2024-01-15', 'Laptop', 900.00), (DATE '2024-01-15', 'Monitor', 250.00), (DATE '2024-01-16', 'Laptop', 1350.00), (DATE '2024-02-01', 'Monitor', 300.00);
    AWS CLI

    執行下列命令。

    aws athena start-query-execution \ --query-string "INSERT INTO \"s3tablescatalog/amzn-s3-demo-bucket\".test_namespace.daily_sales VALUES (DATE '2024-01-15', 'Laptop', 900.00), (DATE '2024-01-15', 'Monitor', 250.00), (DATE '2024-01-16', 'Laptop', 1350.00), (DATE '2024-02-01', 'Monitor', 300.00)"\ --work-group "primary"
  4. 將資料插入資料表後,即可進行查詢。

    AWS 管理主控台
    1. 在左側導覽中,對於資料來源名稱,選擇 AwsDataCatalog

    2. 對於目錄,選擇 s3tablescatalog/amzn-s3-demo-bucket

    3. 對於資料庫,選擇 test_namespace

    4. 在查詢編輯器中,執行下列查詢。

      SELECT product_category, COUNT(*) AS units_sold, SUM(sales_amount) AS total_revenue, AVG(sales_amount) AS average_price FROM daily_sales WHERE sale_date BETWEEN DATE '2024-02-01' AND DATE '2024-02-29' GROUP BY product_category ORDER BY total_revenue DESC
    AWS CLI

    執行下列命令。

    aws athena start-query-execution \ --query-string "SELECT product_category, COUNT(*) AS units_sold, SUM(sales_amount) AS total_revenue, AVG(sales_amount) AS average_price FROM \"s3tablescatalog/amzn-s3-demo-bucket\".test_namespace.daily_sales WHERE sale_date BETWEEN DATE '2024-02-01' AND DATE '2024-02-29' GROUP BY product_category ORDER BY total_revenue DESC"\ --work-group "primary"

在 Athena 中建立 S3 Tables

Athena 支援使用 CREATE DATABASE 陳述式在現有的 S3 Table 命名空間中或在 Athena 中建立的命名空間中建立資料表。若要從 Athena 建立 S3 資料表,則語法與建立一般 Iceberg 資料表時相同,只是您不需要指定 LOCATION,如下列範例所示。

CREATE TABLE [db_name.]table_name (col_name data_type [COMMENT col_comment] [, ...] ) [PARTITIONED BY (col_name | transform, ... )] [TBLPROPERTIES ([, property_name=property_value] )]

您也可以使用 CREATE TABLE AS SELECT (CTAS) 陳述式建立 S3 Tables。如需更多詳細資訊,請參閱 S3 Tables 的 CTAS

將 S3 Tables 儲存貯體目錄註冊為 Athena 資料來源

要向 Athena 主控台註冊 S3 Tables 儲存貯體目錄,請遵循下列步驟。

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

  2. 在導覽窗格中,選擇資料來源和目錄

  3. 資料來源和目錄頁面上,選擇建立資料來源

  4. 對於選擇資料來源,選擇 Amazon S3 - AWS Glue Data Catalog

  5. AWS Glue Data Catalog 區段中,對於資料來源帳戶,選擇此帳戶中的 AWS Glue Data Catalog

  6. 對於建立資料表或註冊目錄,選擇註冊新的 AWS Glue 目錄

  7. 資料來源詳細資訊區段中,對於資料來源名稱,輸入要用來在 SQL 查詢中指定資料來源的名稱,或使用產生的預設名稱。

  8. 對於目錄,選擇瀏覽,以搜尋相同帳戶中 AWS Glue 目錄的清單。如果沒有看到任何現有的目錄,請在 AWS Glue 主控台中建立一個。

  9. 瀏覽 AWS Glue 目錄對話方塊中,選取您要使用的目錄,然後選擇選擇

  10. (選用) 對於標籤,輸入您希望與資料來源關聯的鍵值對。

  11. 選擇下一步

  12. 檢閱和建立頁面上,驗證您輸入的資訊是否正確無誤,然後選擇建立資料來源

S3 Tables 的 CTAS

Amazon Athena 現在支援對 S3 Tables 執行 CREATE TABLE AS SELECT (CTAS) 操作。這項功能可讓您根據 SELECT 查詢的結果建立新的 S3 Tables。

與標準 Athena 資料表相比,為 S3 資料表建立 CTAS 查詢時,有幾項重要差異:

  • 您必須省略位置屬性,因為 S3 Tables 會自動管理自己的儲存位置。

  • table_type 屬性預設為 ICEBERG,因此您無需在查詢中明確進行指定。

  • 如果您未指定格式,則系統會自動使用 PARQUET 作為資料的預設格式。

  • 所有其他屬性都遵循與一般 Iceberg 資料表相同的語法。

使用 CTAS 建立 S3 Tables 之前,請確保您已在 AWS Lake Formation 中設定必要的許可。具體而言,您需要許可才能在 S3 Tables 目錄中建立資料表。如果沒有這些許可,您的 CTAS 操作將會失敗。

注意

如果您的 CTAS 查詢失敗,您可能需要使用 S3 Tables API 刪除資料表,然後才能嘗試重新執行查詢。您無法使用 Athena DROP TABLE 陳述式來移除部分由查詢建立的資料表。

範例

CREATE TABLE "s3tablescatalog/amzn-s3-demo-bucket"."namespace"."s3-table-name" WITH ( format = 'PARQUET' ) AS SELECT * FROM source_table;