

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

# 使用 AWS Glue Data Catalog 連線到您的資料
<a name="data-sources-glue"></a>

Athena 使用 AWS Glue Data Catalog 來存放儲存在 Amazon S3 中資料的中繼資料，例如資料表和資料欄名稱。此中繼資料資訊會變成在 Athena 查詢編輯器中顯示的資料庫、資料表和檢視。

搭配 使用 Athena 時 AWS Glue Data Catalog，您可以使用 AWS Glue 來建立要在 Athena 中查詢的資料庫和資料表 （結構描述），也可以使用 Athena 來建立結構描述，然後在 AWS Glue 和相關服務中使用它們。

若要定義 的結構描述資訊 AWS Glue，您可以在 Athena 主控台中使用表單、在 Athena 中使用查詢編輯器，或在 AWS Glue console 中建立 AWS Glue 爬蟲程式。 AWS Glue 爬蟲程式會自動從 Amazon S3 中的資料推斷資料庫和資料表結構描述。使用表單可提供更多自訂選項。撰寫您自己的 `CREATE TABLE` 陳述式需要投入更多精力，但能提供充分控制。如需詳細資訊，請參閱[CREATE TABLE](create-table.md)。

## 其他資源
<a name="glue-additional-resources"></a>
+ 如需 的詳細資訊 AWS Glue Data Catalog，請參閱《 *AWS Glue 開發人員指南*》中的 中的[資料目錄和爬蟲程式 AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html)。
+ 如需示範如何使用 AWS Glue 和 Athena 處理 XML 資料的說明性文章，請參閱 AWS 大數據部落格中的[使用 和 Amazon Athena 處理和分析高度巢狀 AWS Glue 和大型 XML 檔案](https://aws.amazon.com/blogs/big-data/process-and-analyze-highly-nested-and-large-xml-files-using-aws-glue-and-amazon-athena/)。
+ 需支付個別費用 AWS Glue。如需詳細資訊，請參閱 [AWS Glue 定價](https://aws.amazon.com/glue/pricing)。

**Topics**
+ [其他資源](#glue-additional-resources)
+ [在 Athena 中註冊和使用資料目錄](gdc-register.md)
+ [從另一個帳戶註冊 Data Catalog](data-sources-glue-cross-account.md)
+ [使用 IAM 政策控制對資料目錄的存取](datacatalogs-iam-policy.md)
+ [使用 Athena 主控台中的表單來新增 AWS Glue 資料表](data-sources-glue-manual-table.md)
+ [使用編目程式新增資料表](schema-crawlers.md)
+ [使用 AWS Glue 分割區索引和篩選來最佳化查詢](glue-best-practices-partition-index.md)
+ [使用 AWS CLI 重新建立 AWS Glue 資料庫及其資料表](glue-recreate-db-and-tables-cli.md)
+ [建立用於 ETL 任務的資料表](schema-classifier.md)
+ [在 中使用 CSV 資料 AWS Glue](schema-csv.md)
+ [在 中使用地理空間資料 AWS Glue](schema-geospatial.md)

# 在 Athena 中註冊和使用資料目錄
<a name="gdc-register"></a>

Athena 支援掛載和連接至多個資料目錄。
+ 您可以在 中掛載 Amazon Redshift 資料 AWS Glue Data Catalog ，並從 Athena 查詢資料，而無需複製或移動資料。如需詳細資訊，請參閱[將 Amazon Redshift 資料帶入 AWS Glue Data Catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-namespaces-datacatalog.html)。
+  使用 AWS Glue 連線將 AWS Glue Data Catalog 連接到外部資料來源，並使用 Lake Formation 建立聯合目錄，透過精細存取控制集中管理對資料的許可。如需詳細資訊，請參閱[將您的連線註冊為 Glue Data Catalog](register-connection-as-gdc.md)。
+ 從 Amazon S3 Tables 儲存貯體建立目錄，並使用 Lake Formation 集中管理存取許可，以及限制使用者存取資料表儲存貯體中的物件。如需詳細資訊，請參閱《Amazon S3 開發人員指南》中的[使用 Amazon S3 Tables 和資料表儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables.html)。

**注意**  
對於任何 Glue 目錄，您只能註冊多層級目錄，例如 `123412341234:my_catalog/my_child`。您無法註冊單一層級目錄，例如 `123412341234:linkcontainer` 或 `my_catalog`。單一層級目錄只能使用 Glue 資料目錄直接在 Athena 查詢中進行查詢。如需詳細資訊，請參閱[在 Athena 中查詢 AWS Glue 資料目錄](gdc-register-query-the-data-source.md)。

**Topics**
+ [在 Athena 中註冊 Redshift 資料目錄](gdc-register-rs.md)
+ [在 Athena 中註冊聯合目錄](gdc-register-federated.md)
+ [從 Athena 註冊 S3 Tables 儲存貯體目錄和查詢資料表](gdc-register-s3-table-bucket-cat.md)
+ [在 Athena 中查詢 AWS Glue 資料目錄](gdc-register-query-the-data-source.md)

# 在 Athena 中註冊 Redshift 資料目錄
<a name="gdc-register-rs"></a>

Athena 可以讀取和寫入存放在 Redshift 叢集或已在 AWS Glue Data Catalog中註冊的無伺服器命名空間中的資料。這可與 搭配運作 AWS Lake Formation，可提供集中式安全與控管，確保跨不同查詢引擎持續管理資料存取，並維護共用 Redshift 資料的精細存取控制。

## 考量和限制
<a name="gdc-register-rs-considerations-and-limitations"></a>
+ **具體化視觀表** – Amazon Redshift 具體化視觀表可從 Athena 查詢，但不支援使用 Athena 或 Spark 建立具體化視觀表。
+ 不支援 DDL 操作，包括在 Amazon Redshift 受管儲存資料表上設定 AWS Glue Data Catalog 組態和操作。

## 先決條件
<a name="gdc-register-rs-prerequisites"></a>

在從 Athena 查詢 AWS Glue 資料目錄之前，請先完成下列任務：

1. 建立 Amazon Redshift 叢集或無伺服器命名空間，並將其註冊至 AWS Glue Data Catalog。如需詳細資訊，請參閱《Amazon Redshift 管理指南》中的[將叢集註冊至 AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/mgmt/register-cluster.html) 或[將命名空間註冊至 AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless_datasharing-register-namespace.html)。

1.  AWS Lake Formation 從註冊的命名空間在 中建立資料目錄。如需詳細資訊，請參閱[《 開發人員指南》中的建立 Amazon Redshift 聯合目錄](https://docs.aws.amazon.com/lake-formation/latest/dg/create-ns-catalog.html)。 AWS Lake Formation 

1. (選用) 使用 Lake Formation 在目錄上設定精細存取控制。如需詳細資訊，請參閱[《 開發人員指南》中的將您的資料帶入 AWS Glue Data Catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/bring-your-data-overview.html) 。 AWS Lake Formation 

## 向 Athena 主控台註冊 Redshift 資料目錄
<a name="gdc-register-rs-console-steps"></a>

要向 Athena 主控台註冊 Redshift 資料目錄，請遵循下列步驟。

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

1. 在導覽窗格中，選擇**資料來源和目錄**。

1. 在**資料來源和目錄**頁面上，選擇**建立資料來源**。

1. 對於**選擇資料來源**，選擇 **Amazon S3 - AWS Glue Data Catalog**。

1. 在 **AWS Glue Data Catalog** 區段中，對於**資料來源帳戶**，選擇**此帳戶中的AWS Glue Data Catalog **。

1. 針對**建立資料表或註冊目錄**，選擇**註冊新的 AWS Glue 目錄**。

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

1. 針對**目錄**，選擇**瀏覽**以搜尋相同帳戶中的 AWS Glue 目錄清單。如果沒有看到任何現有的目錄，請在 [AWS Glue 主控台](https://console.aws.amazon.com/glue/)中建立一個。

1. 在**瀏覽 AWS Glue 目錄**對話方塊中，選取您要使用的目錄，然後選擇**選擇**。

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

1. 選擇**下一步**。

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

# 在 Athena 中註冊聯合目錄
<a name="gdc-register-federated"></a>

建立聯合資料來源的連線後，您可以將其註冊為聯合資料目錄，以簡化資料探索，並使用 Lake Formation 管理具有精細許可的資料存取。如需詳細資訊，請參閱[將您的連線註冊為 Glue Data Catalog](register-connection-as-gdc.md)。

## 考量和限制
<a name="gdc-register-federated-consideration"></a>
+ 聯合目錄不支援 DDL 操作。
+ 您可以註冊下列連接器，以與 整合 AWS Glue 以進行精細存取控制：
  + [Azure Data Lake 儲存體](connectors-adls-gen2.md)
  + [Azure Synapse](connectors-azure-synapse.md)
  + [BigQuery](connectors-bigquery.md)
  + [CMDB](connectors-cmdb.md)
  + [Db2](connectors-ibm-db2.md)
  + [Db2 iSeries](connectors-ibm-db2-as400.md)
  + [DocumentDB](connectors-docdb.md)
  + [DynamoDB](connectors-dynamodb.md)
  + [Google 雲端儲存](connectors-gcs.md)
  + [HBase](connectors-hbase.md)
  + [MySQL](connectors-mysql.md)
  + [OpenSearch](connectors-opensearch.md)
  + [Oracle](connectors-oracle.md)
  + [PostgreSQL](connectors-postgresql.md)
  + [Redshift](connectors-redshift.md)
  + [SAP HANA](connectors-sap-hana.md)
  + [Snowflake](connectors-snowflake.md)
  + [SQL Server](connectors-microsoft-sql-server.md)
  + [Timestream](connectors-timestream.md)
  + [TPC-DS](connectors-tpcds.md)
+ 為 Glue 連線聯合建立資源連結時，[資源連結](https://docs.aws.amazon.com/lake-formation/latest/dg/create-resource-link-database.html)的名稱必須與生產者的資料庫名稱相同。
+ 目前，即使資料來源不區分大小寫，也只能辨識小寫的資料表和資料欄名稱。

# 從 Athena 註冊 S3 Tables 儲存貯體目錄和查詢資料表
<a name="gdc-register-s3-table-bucket-cat"></a>

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

## 考量和限制
<a name="gdc-register-s3-table-consideration"></a>
+ S3 Tables 支援 Iceberg 資料表支援的所有 DDL 操作，除了以下例外：
  + 不支援 `ALTER TABLE RENAME`、`CREATE VIEW` 和 `ALTER DATABASE`。
  + `OPTIMIZE` 和 `VACUUM` – 您可以在 S3 中管理壓縮和快照管理。如需詳細資訊，請參閱 [S3 Tables 維護文件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance.html)。
+ 不支援對註冊為 Athena 資料來源的 S3 Tables 進行 DDL 查詢。
+ 不支援查詢結果重複使用。
+ 在已啟用 SSE-KMS、CSE-KMS 加密的工作群組中，您無法在 S3 Tables 上執行寫入操作，例如 `INSERT`、`UPDATE`、`DELETE` 或 `MERGE`。
+ 在已啟用 S3 請求者支付選項的工作群組中，您無法在 S3 Tables 上執行 DML 操作。

## 從 Athena 查詢 S3 Tables
<a name="gdc-register-s3-table-prereq-setup"></a>

**在 Athena 中查詢 S3 Tables 之前，請先完成以下先決條件步驟**

1. 建立 S3 資料表儲存貯體。如需詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》中的[建立資料表儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-create.html)。

1. 請確定資料表儲存貯體與 的整合 AWS Glue Data Catalog 成功。如需必要的許可和設定步驟，請參閱《 AWS Glue 開發人員指南》中的 [ S3 Tables 整合和啟用 S3 Tables 與 Glue Data Catalog 整合的先決條件](https://docs.aws.amazon.com/glue/latest/dg/s3tables-catalog-prerequisites.html)。 [ S3 ](https://docs.aws.amazon.com/glue/latest/dg/enable-s3-tables-catalog-integration.html) 

1. 對於您使用 Athena 執行查詢的委託人，請使用下列其中一種方法授予 S3 Table 目錄的許可：

   **選項 1：使用 IAM 許可**

   使用 IAM 存取控制時，您的主體需要 AWS Glue Data Catalog 資源和 Amazon S3 Tables 資源的許可。

   下列清單包含對 Athena 中的 S3 資料表執行任何支援的 DDL 或 DML 操作所需的所有`s3tables`許可：
   + `s3tables:GetTableBucket`
   + `s3tables:GetNamespace`
   + `s3tables:GetTable`
   + `s3tables:GetTableData`
   + `s3tables:PutTableData`
   + `s3tables:ListNamespaces`
   + `s3tables:ListTables`
   + `s3tables:DeleteNamespace`
   + `s3tables:DeleteTable`
   + `s3tables:CreateNamespace`
   + `s3tables:CreateTable`
   + `s3tables:UpdateTableMetadataLocation`

   將這些許可套用至特定的 S3 資料表儲存貯體和 S3 資料表資源，或使用 `*`做為資源，以授予您帳戶中所有資料表儲存貯體和資料表的存取權。這些許可可以與 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAthenaFullAccess.html)受管政策結合，以啟用完整的功能。

   **選項 2：使用 Lake Formation 許可**

   或者，若要啟用精細存取控制，您可以透過 Lake Formation 主控台或 授予 S3 Table 目錄的 Lake Formation 許可 AWS CLI。這需要將您的 S3 資料表儲存貯體註冊為 Lake Formation 資料位置。如需詳細資訊，請參閱 Lake Formation 開發人員指南[中的建立 Amazon S3 Tables 目錄 AWS Glue Data Catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/create-s3-tables-catalog.html)。

------
#### [ AWS 管理主控台 ]

   1. 開啟位於 的 AWS Lake Formation 主控台[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)，並以資料湖管理員身分登入。如需如何建立資料湖管理員的詳細資訊，請參閱[建立資料湖管理員](https://docs.aws.amazon.com/lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)。

   1. 在導覽窗格中，選擇**資料許可**，然後選擇**授予**。

   1. 在**授予許可**頁面的**主體**下，選擇要用來從 Athena 提交查詢的主體。

   1. 在 **LF-標籤或型錄資源**下，選擇**已命名的的資料型錄資源**。

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

   1. 對於**目錄許可**，選擇**超級**。

   1. 選擇 **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 ]

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

   **使用 AWS 管理主控台**

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

   1. 在左側導覽中，對於**資料來源名稱**，選擇 **AwsDataCatalog**。

   1. 對於**目錄**，選擇 **s3tablescatalog/*amzn-s3-demo-bucket***。

   1. 在查詢編輯器中，輸入類似 `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 資料來源](#gdc-register-s3-table-console-steps)。

------

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

------
#### [ AWS 管理主控台 ]

   1. 在左側導覽中，對於**資料來源名稱**，選擇 **AwsDataCatalog**。

   1. 對於**目錄**，選擇 **s3tablescatalog/*amzn-s3-demo-bucket***。

   1. 對於**資料庫**，選擇 **test\$1namespace**。

   1. 在查詢編輯器中，執行下列查詢。

      ```
      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"
   ```

------

1. 將資料插入您在上一個步驟中建立的資料表。

------
#### [ AWS 管理主控台 ]

   1. 在左側導覽中，對於**資料來源名稱**，選擇 **AwsDataCatalog**。

   1. 對於**目錄**，選擇 **s3tablescatalog/*amzn-s3-demo-bucket***。

   1. 對於**資料庫**，選擇 **test\$1namespace**。

   1. 在查詢編輯器中，執行下列查詢。

      ```
      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"
   ```

------

1. 將資料插入資料表後，即可進行查詢。

------
#### [ AWS 管理主控台 ]

   1. 在左側導覽中，對於**資料來源名稱**，選擇 **AwsDataCatalog**。

   1. 對於**目錄**，選擇 **s3tablescatalog/*amzn-s3-demo-bucket***。

   1. 對於**資料庫**，選擇 **test\$1namespace**。

   1. 在查詢編輯器中，執行下列查詢。

      ```
      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
<a name="gdc-create-s3-tables-athena"></a>

Athena 支援使用 `CREATE DATABASE` 陳述式在現有的 S3 Table 命名空間中或在 Athena 中建立的命名空間中建立資料表。若要從 Athena 建立 S3 資料表，則語法與[建立一般 Iceberg 資料表](querying-iceberg-creating-tables.md)時相同，只是您不需要指定 `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](#ctas-s3-tables)。

## 將 S3 Tables 儲存貯體目錄註冊為 Athena 資料來源
<a name="gdc-register-s3-table-console-steps"></a>

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

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

1. 在導覽窗格中，選擇**資料來源和目錄**。

1. 在**資料來源和目錄**頁面上，選擇**建立資料來源**。

1. 對於**選擇資料來源**，選擇 **Amazon S3 - AWS Glue Data Catalog**。

1. 在 **AWS Glue Data Catalog** 區段中，對於**資料來源帳戶**，選擇**此帳戶中的AWS Glue Data Catalog **。

1. 針對**建立資料表或註冊目錄**，選擇**註冊新的 AWS Glue 目錄**。

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

1. 針對**目錄**，選擇**瀏覽**以搜尋相同帳戶中的 AWS Glue 目錄清單。如果沒有看到任何現有的目錄，請在 [AWS Glue 主控台](https://console.aws.amazon.com/glue/)中建立一個。

1. 在**瀏覽 AWS Glue 目錄**對話方塊中，選取您要使用的目錄，然後選擇**選擇**。

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

1. 選擇**下一步**。

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

## S3 Tables 的 CTAS
<a name="ctas-s3-tables"></a>

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

與標準 Athena 資料表相比，為 S3 資料表建立 CTAS 查詢時，有幾項重要差異：
+ 您必須省略位置屬性，因為 S3 Tables 會自動管理自己的儲存位置。
+ `table_type` 屬性預設為 `ICEBERG`，因此您無需在查詢中明確進行指定。
+ 如果您未指定格式，則系統會自動使用 `PARQUET` 作為資料的預設格式。
+ 所有其他屬性都遵循與一般 Iceberg 資料表相同的語法。

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

**注意**  
如果您的 CTAS 查詢失敗，您可能需要使用 [S3 Tables API](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-delete.html) 刪除資料表，然後才能嘗試重新執行查詢。您無法使用 Athena `DROP TABLE` 陳述式來移除部分由查詢建立的資料表。

**範例**

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

# 在 Athena 中查詢 AWS Glue 資料目錄
<a name="gdc-register-query-the-data-source"></a>

若要從 Athena 查詢資料目錄，請執行下列其中一項動作。
+ 在 Athena 中將目錄註冊為資料來源，然後使用資料來源名稱查詢目錄。在這種用法中，下列查詢是相同的。

  ```
  SELECT * FROM my_data_source.my_database.my_table
  ```
+ 如果您要查詢尚未註冊為 Athena 資料來源的目錄，您可以在 `SELECT` 查詢中提供目錄的完整路徑，如下列範例所示。

  ```
  SELECT * FROM "my_catalog/my_subcatalog".my_database.my_table
  ```
+ 您也可以透過 執行此操作 AWS 管理主控台。

  1. 前往 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/) 開啟 Athena 主控台

  1. 在查詢編輯器中，對於**資料來源**，選擇 **AwsDataCatalog**。

  1. 對於**目錄**，選擇您要使用的目錄的名稱。

  1. 對於**資料庫**，選擇包含您要查詢的資料表的資料庫。

  1. 輸入類似 `SELECT * FROM my_table` 的查詢，然後選擇**執行**。

# 從另一個帳戶註冊 Data Catalog
<a name="data-sources-glue-cross-account"></a>

您可以使用 Athena 的跨帳戶 AWS Glue 目錄功能，從非您自己的帳戶註冊 AWS Glue 目錄。在您為 AWS Glue 設定所需的 IAM 許可，並將目錄註冊為 Athena `DataCatalog` 資源後，您可以使用 Athena 來執行跨帳戶查詢。如需有關設定所需許可的詳細資訊，請參閱[設定 AWS Glue 資料目錄的跨帳戶存取](security-iam-cross-account-glue-catalog-access.md)。

下列程序說明如何使用 Athena 在 Amazon Web Services AWS Glue Data Catalog 帳戶中設定 ，而非您自己的資料來源。

## 從主控台註冊
<a name="data-sources-glue-cross-account-console"></a>

1. 請按照 [設定 AWS Glue 資料目錄的跨帳戶存取](security-iam-cross-account-glue-catalog-access.md) 中的步驟，確保您已獲得許可，能查詢其他帳戶中的資料目錄。

1. 前往 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 開啟 Athena 主控台。

1. 如果未顯示主控台的導覽窗格，請選擇左側的展開選單。  
![\[選擇展開選單。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/nav-pane-expansion.png)

1. 選擇**資料來源和目錄**。

1. 在右上角，選擇 **Create data source** (建立資料來源)。

1. 在**選擇資料來源**頁面上，針對**資料來源**選擇 **S3 - AWS Glue Data Catalog**，然後選擇**下一步**。

1. 在 **Enter data source details** (輸入資料來源詳細資訊) 頁面上的 **AWS Glue Data Catalog** 區段，針對**選擇 AWS Glue Data Catalog**，在另一個帳户選擇 **AWS Glue Data Catalog **。

1. 在 **Data source details** (資料來源詳細資訊) 輸入以下資訊：
   + **Data source name** (資料來源名稱) – 輸入您希望在 SQL 查詢中使用的名稱，以參考其他帳戶中的資料目錄。
   + **Description** (描述) – (選填) 輸入其他帳戶裡資料目錄的描述。
   + **Catalog ID** (目錄 ID) – 輸入資料目錄所屬帳戶的 12 位數 Amazon Web Services 帳戶 ID。Amazon Web Services 帳戶 ID 即為目錄 ID。

1. (選用) 在 **Tags** (標籤)中，輸入您希望與資料來源相關聯的鍵值對。如需標籤的詳細資訊，請參閱[標記 Athena 資源](tags.md)。

1. 選擇**下一步**。

1. 在 **Review and create** (檢閱並建立) 頁面上，檢閱您提供的資訊，然後選擇 **Create data source** (建立資料來源)。**Data source details** (資料來源詳細資訊) 頁面列出了註冊資料型錄的資料庫和標籤。

1. 選擇**資料來源和目錄**。您註冊的資料型錄列於 **Data Source Name** (資料來源名稱) 資料欄。

1. 若要檢視或編輯資料型錄的相關資訊，請選擇型錄，然後選擇 **Actions** (動作)、**Edit** (編輯)。

1. 若要刪除新資料型錄，請選擇型錄，然後選擇 **Actions** (動作)、**Delete** (刪除)。

## 使用 API 操作註冊
<a name="data-sources-glue-cross-account-api"></a>

1. 下列`CreateDataCatalog`請求內文會註冊 AWS Glue 目錄以進行跨帳戶存取：

   ```
   # Example CreateDataCatalog request to register a cross-account Glue catalog:
   {
       "Description": "Cross-account Glue catalog",
       "Name": "ownerCatalog",
       "Parameters": {"catalog-id" : "<catalogid>"  # Owner's account ID
       },
       "Type": "GLUE"
   }
   ```

1. 以下範本程式碼會使用 Java 用戶端來建立 `DataCatalog` 物件。

   ```
   # Sample code to create the DataCatalog through Java client
   CreateDataCatalogRequest request = new CreateDataCatalogRequest()
       .withName("ownerCatalog")
       .withType(DataCatalogType.GLUE)
       .withParameters(ImmutableMap.of("catalog-id", "<catalogid>"));
   
   athenaClient.createDataCatalog(request);
   ```

   在這些步驟之後，借用者應會在呼叫 [ListDataCatalogs](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListDataCatalogs.html) API 操作時看到 *`ownerCatalog`*。

## 使用 註冊 AWS CLI
<a name="data-sources-glue-cross-account-cli"></a>

使用下列範例 CLI 命令從 AWS Glue Data Catalog 另一個帳戶註冊

```
aws athena create-data-catalog \
  --name cross_account_catalog \
  --type GLUE \
  --description "Cross Account Catalog" \
  --parameters catalog-id=<catalogid>
```

如需詳細資訊，請參閱 *AWS 大數據部落格*中的[使用 Amazon Athena 查詢跨帳戶 AWS Glue Data Catalog](https://aws.amazon.com/blogs/big-data/query-cross-account-aws-glue-data-catalogs-using-amazon-athena/)。

# 使用 IAM 政策控制對資料目錄的存取
<a name="datacatalogs-iam-policy"></a>

若要控制對資料目錄的存取，請使用資源層級 IAM 許可或身分型 IAM 政策。

下列程序專用於 Athena。

如需 IAM 特定的資訊，請參閱本節最後列出的連結。如需範例 JSON 資料目錄政策的相關資訊，請參閱[資料目錄範例政策](datacatalogs-example-policies.md)。

**若要在 IAM 主控台中使用視覺化編輯器來建立資料目錄政策**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左邊的導覽窗格中，選擇 **Policies** (政策)，然後選擇 **Create policy** (建立政策)。

1. 在 **Visual editor** (視覺化編輯器) 標籤上，選擇 **Choose a service** (選擇一項服務)。接著選擇 Athena 以新增到政策。

1. 選擇 **Select actions** (選取動作)，然後選擇要新增到政策的動作。視覺化編輯器會顯示 Athena 中可用的動作。如需詳細資訊，請參閱《服務授權參考》**中的 [Amazon Athena 的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html)。

1. 選擇 **add actions** (新增動作) 來輸入特定動作，或使用萬用字元 (\$1) 來指定多個動作。

   預設情況下，您建立的政策允許執行選擇的操作。對於 Athena 中的 `datacatalog` 資源，如果您選擇的一個或多個動作支援資源層級許可，則編輯器會列出 `datacatalog` 資源。

1. 選擇 **Resources (資源)** 來為您的政策指定資料目錄。如需 JSON 資料目錄政策範例，請參閱[資料目錄範例政策](datacatalogs-example-policies.md)。

1. 如下所示指定 `datacatalog` 資源：

   ```
   arn:aws:athena:<region>:<user-account>:datacatalog/<datacatalog-name>
   ```

1. 選擇 **Review policy** (檢閱政策)，然後為您正在建立的政策輸入 **Name** (名稱) 與 **Description** (描述) (選用)。檢閱政策摘要來確認您已授予想要的許可。

1. 選擇 **Create policy** (建立政策) 儲存您的新政策。

1. 將此以身分為基礎的政策連接到使用者、群組或角色，並指定其可存取的 `datacatalog` 資源。

如需詳細資訊，請參閱《服務授權參考》**與《IAM 使用者指南》**中的下列主題：
+ [Amazon Athena 的操作、資料和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html)
+ [使用視覺化編輯器來建立政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor)
+ [新增和移除 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)
+ [控制資源的存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html#access_controlling-resources)

如需 JSON 資料目錄政策範例，請參閱[資料目錄範例政策](datacatalogs-example-policies.md)。

如需 AWS Glue 許可和 AWS Glue 爬蟲程式許可的相關資訊，請參閱《 *AWS Glue 開發人員指南*》中的[設定 和爬蟲程式先決條件的 IAM 許可 AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/getting-started-access.html)。 [https://docs.aws.amazon.com/glue/latest/dg/crawler-prereqs.html](https://docs.aws.amazon.com/glue/latest/dg/crawler-prereqs.html)

如需 Amazon Athena 動作的完整清單，請參閱《[Amazon Athena API 參考](https://docs.aws.amazon.com/athena/latest/APIReference/)》中的 API 動作名稱。

# 資料目錄範例政策
<a name="datacatalogs-example-policies"></a>

本節包含可讓您在資料目錄上用來啟用各種動作的政策範例。

資料目錄是由 Athena 管理的 IAM 資源。因此，如果您的資料目錄政策使用 `datacatalog` 做為輸入的動作，您必須指定資料目錄的 ARN，如下所示：

```
"Resource": [arn:aws:athena:<region>:<user-account>:datacatalog/<datacatalog-name>]
```

`<datacatalog-name>` 是資料目錄的名稱。例如，對於名為 `test_datacatalog` 的資料目錄，將其指定為資源，如下所示：

```
"Resource": ["arn:aws:athena:us-east-1:123456789012:datacatalog/test_datacatalog"]
```

如需 Amazon Athena 動作的完整清單，請參閱《[Amazon Athena API 參考](https://docs.aws.amazon.com/athena/latest/APIReference/)》中的 API 動作名稱。如需有關 IAM 政策的詳細資訊，請參閱《IAM 使用者指南》**中的[使用視覺化編輯器來建立政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-visual-editor)。如需有關為工作群組建立 IAM 政策的詳細資訊，請參閱[使用 IAM 政策控制對資料目錄的存取](datacatalogs-iam-policy.md)。
+ [Example Policy for Full Access to All Data Catalogs](#datacatalog-policy-full-access-to-all-data-catalogs)
+ [Example Policy for Full Access to a Specified Data Catalog](#datacatalog-policy-full-access-to-a-specified-catalog)
+ [Example Policy for Querying a Specified Data Catalog](#datacatalog-policy-querying-a-specified-data-catalog)
+ [Example Policy for Management Operations on a Specified Data Catalog](#datacatalog-policy-management-operations-on-a-specified-catalog)
+ [Example Policy for Listing Data Catalogs](#datacatalog-policy-listing-data-catalogs)
+ [Example Policy for Metadata Operations on Data Catalogs](#datacatalog-policy-metadata-operations)

**Example 適用於完整存取所有資料目錄的政策範例**  
以下政策允許完整存取帳戶中可能存在的所有資料目錄資源。對於您的帳戶中必須為所有其他使用者管理資料目錄的那些使用者，我們建議您使用此政策。    
****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "athena:*"
         ],
         "Resource":[
            "*"
         ]
      }
   ]
}
```

**Example 適用於完整存取指定資料目錄的政策範例**  
以下政策允許完整存取名為 `datacatalogA` 的單一特定的資料目錄資源。對於能夠完全控制特定資料目錄的使用者，您可以使用此政策。    
****  

```
{ "Version":"2012-10-17",		 	 	  "Statement":[ { "Effect":"Allow", "Action":[
   "athena:ListDataCatalogs", "athena:ListWorkGroups", "athena:GetDatabase", "athena:ListDatabases",
   "athena:ListTableMetadata", "athena:GetTableMetadata" ], "Resource":"*" }, { "Effect":"Allow",
   "Action":[ "athena:StartQueryExecution", "athena:GetQueryResults", "athena:DeleteNamedQuery",
   "athena:GetNamedQuery", "athena:ListQueryExecutions", "athena:StopQueryExecution",
   "athena:GetQueryResultsStream", "athena:ListNamedQueries", "athena:CreateNamedQuery",
   "athena:GetQueryExecution", "athena:BatchGetNamedQuery", "athena:BatchGetQueryExecution",
   "athena:DeleteWorkGroup", "athena:UpdateWorkGroup", "athena:GetWorkGroup",
   "athena:CreateWorkGroup" ], "Resource":[
      "arn:aws:athena:us-east-1:123456789012:workgroup/*"
   ] }, { "Effect":"Allow", "Action":[ "athena:CreateDataCatalog", "athena:DeleteDataCatalog",
   "athena:GetDataCatalog", "athena:GetDatabase", "athena:GetTableMetadata", "athena:ListDatabases",
   "athena:ListTableMetadata", "athena:UpdateDataCatalog" ],
      "Resource":"arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA"
   } ] }
```

**Example 適用於查詢指定資料目錄的政策範例**  
在以下政策中，允許使用者在指定的 `datacatalogA` 中執行查詢。不允許使用者對資料目錄本身執行管理任務，例如更新或刪除。    
****  

```
{ "Version":"2012-10-17",		 	 	  "Statement":[ { "Effect":"Allow", "Action":[
   "athena:StartQueryExecution" ], "Resource":[
      "arn:aws:athena:us-east-1:123456789012:workgroup/*"
   ] }, { "Effect":"Allow", "Action":[ "athena:GetDataCatalog" ], "Resource":[
      "arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA"
   ] } ] }
```

**Example 適用於指定資料目錄上管理操作的政策範例**  
在以下政策中，允許使用者建立、刪除、取得詳細資訊和更新資料目錄 `datacatalogA`。    
****  

```
{ "Version":"2012-10-17",		 	 	  "Statement": [ { "Effect": "Allow", "Action": [
    "athena:CreateDataCatalog", "athena:GetDataCatalog", "athena:DeleteDataCatalog",
    "athena:UpdateDataCatalog" ], "Resource": [
        "arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA"
    ] } ] }
```

**Example 適用於列出資料目錄的政策範例**  
以下政策可讓所有使用者列出所有資料目錄：    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:ListDataCatalogs"
            ],
            "Resource": "*"
        }
    ]
}
```

**Example 適用於資料目錄上中繼資料操作的政策範例**  
下列政策允許對資料目錄進行中繼資料操作：    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "athena:GetDatabase",
                "athena:GetTableMetadata",
                "athena:ListDatabases",
                "athena:ListTableMetadata"
            ],
            "Resource": "*"
        }
    ]
}
```

# 使用 Athena 主控台中的表單來新增 AWS Glue 資料表
<a name="data-sources-glue-manual-table"></a>

下列程序會說明如何利用 Athena 主控台，使用 **Create Table From S3 bucket data** (從 S3 儲存貯體資料建立資料表) 表單新增資料表。

**新增資料表和使用表單輸入結構描述資訊**

1. 前往 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 開啟 Athena 主控台。

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

1. 在 **Create Table From S3 bucket data** (從 S3 儲存貯體資料建立資料表) 表單上，對於 **Table name** (資料表名稱)，輸入資料表的名稱。如需有關 Athena 中資料庫名稱、資料表名稱和資料欄名稱可接受字元的資訊，請參閱 [為資料庫、資料表和資料欄命名](tables-databases-columns-names.md)。

1. 對於 **Database configuration** (資料庫組態)，選擇現有資料庫或建立新資料庫。

1. 對於 **Location of Input Data Set** (輸入資料集的位置)，請指定 Amazon S3 中的資料夾路徑，該資料夾包含您要處理的資料集。請勿在路徑中包含檔案名稱。Athena 會掃描您指定之資料夾中的所有檔案。如果您的資料已經進行分割 (例如，

    s3://amzn-s3-demo-bucket/logs/year=2004/month=12/day=11/)，僅輸入基本路徑 (例如，s3://amzn-s3-demo-bucket/logs/)。

1. 在 **Data Format** (資料格式) 中，請選擇下列選項：
   + 對於 **Table type** (資料表類型)，選擇 **Apache Hive**、**Apache Iceberg** 或 **Delta Lake**。Athena 預設使用 Apache Hive 資料表類型。如需有關在 Athena 中查詢 Apache Iceberg 的詳細資訊，請參閱 [查詢 Apache Iceberg 資料表](querying-iceberg.md)。如需有關在 Athena 中使用 Delta Lake 資料表的詳細資訊，請參閱 [查詢 Linux Foundation Delta Lake 資料表](delta-lake-tables.md)。
   + 在 **File format** (檔案格式) 中，選擇資料所在的檔案或使用的日誌格式。
     + 對於 **Text File with Custom Delimiters (含自訂分隔符號的文字檔)** 選項，指定 **Field terminator (欄位結束字元)** (亦即資料欄分隔符號)。或者，您可以指定標記陣列類型結尾的 **Collection terminator** (集合結束符號)，或指定標記地圖資料類型結尾的 **Collection terminator** (集合結束符號)。
   + **SerDe library** (SerDe 程式庫) – SerDe (序列化程式-還原序列化程式) 程式庫會解析特定的資料格式，以便 Athena 可以為其建立資料表。對於大多數格式，系統會為您選擇預設的 SerDe 程式庫。對於下列格式，請根據您的需求選擇程式庫：
     + **Apache Web 日誌** – 選擇 **RegexSerDe** 或 **GrokSerDe** 程式庫。對於 RegexSerDe，請在 **Regex definition** (Regex 定義) 方塊中提供規則表達式。對於 GrokSerDe，請為 `input.format` SerDe 屬性提供一系列具名規則表達式。具名的規則表達式比規則表達式更容易讀取和維護。如需詳細資訊，請參閱[查詢存放在 Amazon S3 中的 Apache 日誌](querying-apache-logs.md)。
     + **CSV** – 如果您的逗號分隔資料不包含以雙引號括住的值，或資料使用 `java.sql.Timestamp` 格式，請選擇 **LazySimpleSerDe**。如果您的資料包含引號或使用 UNIX 數值格式的 `TIMESTAMP` (例如 `1564610311`)，請選擇 **OpenCSVSerDe**。如需詳細資訊，請參閱[適用於 CSV、TSV 和自訂分隔檔案的 Lazy Simple SerDe](lazy-simple-serde.md)及[用於處理 CSV 的 Open CSV SerDe](csv-serde.md)。
     + **JSON** – 選擇 **OpenX** 或 **Hive** JSON SerDe 程式庫。這兩種格式都預期每個 JSON 文件都以單行文字表示，而且欄位不以換行字元分隔。OpenX SerDe 提供了一些額外屬性。如需這些屬性的相關資訊，請參閱[OpenX JSON SerDe](openx-json-serde.md)。如需有關 Hive SerDe 的資訊，請參閱 [Hive JSON SerDe](hive-json-serde.md)。

     如需有關在 Athena 中使用 SerDe 程式庫的詳細資訊，請參閱[為您的資料選擇 SerDe](supported-serdes.md)。

1. 在 **SerDe properties** (SerDe 屬性) 中，請根據您使用的 SerDe 程式庫和您的需求，新增、編輯或移除屬性和值。
   + 若要新增 SerDe 屬性，請選擇 **Add SerDe property** (新增 SerDe 屬性)。
   + 在 **Name** (名稱) 欄位中，輸入屬性的名稱。
   + 在 **Value** (值) 欄位中，輸入屬性的值。
   + 若要移除 SerDe 屬性，請選擇 **Remove** (移除)。

1. 在 **Table properties** (資料表屬性) 中，請根據您的需求選擇或編輯資料表屬性。
   + 在 **Write compression** (寫入壓縮) 中，選擇壓縮選項。是否提供寫入壓縮選項和可用壓縮選項取決於資料格式。如需詳細資訊，請參閱[在 Athena 中使用壓縮](compression-formats.md)。
   + 如果基礎資料是在 Amazon S3 中加密，在 **Encryption** (加密) 中，選取 **Encrypted data set** (加密的資料集)。此選項會在 `CREATE TABLE` 陳述式中將 `has_encrypted_data` 資料表屬性設定為 true。

1. 在 **Column details** (資料欄詳細資訊) 中，輸入要新增至資料表的資料欄名稱和資料類型。
   + 若要一次新增更多資料欄，請選擇 **Add a column (新增資料欄)**。
   + 若要快速新增更多資料欄，請選擇 **Bulk add columns (大量新增資料欄)**。在文字方塊中，輸入逗號分隔的資料欄清單，格式為 *column\$1name* *data\$1type*, *column\$1name* *data\$1type*[, ...]，然後選擇 **Add** (新增)。

1. (選用) 對於 **Partition details** (分割區詳情)，新增一個或多個資料欄名稱和資料類型。分割會根據資料欄值將相關資料保存在一起，有助於減少每次查詢掃描的資料量。如需分割的相關資訊，請參閱[分割您的資料](partitions.md)。

1. (選用) 在 **Bucketing** (歸納) 中，您可以指定包含要組合在一起的資料列的一個或多個資料欄，然後將這些資料列放入多個儲存貯體中。這可允許您在指定已歸納的資料欄值時僅查詢要讀取的儲存貯體。
   + 在 **Buckets** (儲存貯體) 中，請選取具有大量唯一值 (例如主索引鍵) 且經常用來篩選查詢中資料的一個或多個資料欄。
   + 在 **Number of buckets** (儲存貯體數量) 中，輸入可讓檔案具有最佳大小的儲存貯體數量。如需詳細資訊，請參閱 AWS 大數據部落格中的 [Amazon Athena 的前 10 個效能調校秘訣](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/)。
   + 若要指定歸納的資料欄，`CREATE TABLE` 陳述式會使用下列語法：

     ```
     CLUSTERED BY (bucketed_columns) INTO number_of_buckets BUCKETS
     ```
**注意**  
**Bucketing** (歸納) 選項不適用於 **Iceberg** 資料表類型。

1. **Preview table query** (預覽資料表查詢) 方塊顯示由您所輸入到表單中的資訊產生的 `CREATE TABLE` 陳述式。無法直接編輯預覽陳述式。若要變更陳述式，請修改預覽上方的表單欄位，或不使用表單，在查詢編輯器中[直接建立陳述式](creating-tables-how-to.md#to-create-a-table-using-hive-ddl)。

1. 選擇 **Create table** (建立資料表) 以在查詢編輯器中執行產生的陳述式並建立資料表。

# 使用編目程式新增資料表
<a name="schema-crawlers"></a>

AWS Glue 爬蟲程式可協助探索資料集的結構描述，並將其註冊為 AWS Glue Data Catalog 中的資料表。爬蟲程式可逐一瀏覽您的資料，並判斷結構描述。此外，爬蟲程式可偵測和登錄分割區。如需詳細資訊，請參閱《AWS Glue 開發人員指南》**中的[定義爬蟲程式](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)。可從 Athena 查詢來自已成功編目的資料的資料表。

**注意**  
Athena 無法辨識您為 AWS Glue 爬蟲程式指定的[排除模式](https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude)。例如，如果您的 Simple Storage Service (Amazon S3) 儲存貯體同時包含 `.csv` 和 `.json` 檔案，並且您將 `.json` 檔案從爬蟲程式中排除，Athena 會查詢這兩個檔案群組。若要避免這種情況，請將您要排除的檔案放在不同的位置。

## 建立 AWS Glue 爬蟲程式
<a name="data-sources-glue-crawler-setup"></a>

您可以從 Athena 主控台開始建立爬蟲程式，然後以整合方式使用 AWS Glue 主控台。建立爬蟲程式時，需要在 Amazon S3 中指定要網路爬取的資料位置。

**從 Athena 主控台 AWS Glue 開始在 中建立爬蟲程式**

1. 前往 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 開啟 Athena 主控台。

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

1. 在 **AWS Glue** 主控台的 **Add crawler (新增爬蟲程式)** 頁面上，依照步驟建立爬蟲程式。如需詳細資訊，請參閱本指南中的[使用 AWS Glue 爬蟲程式](#schema-crawlers)和《 *AWS Glue 開發人員指南*》中的[填入 AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/populate-catalog-methods.html) 。

**注意**  
Athena 無法辨識您為 AWS Glue 爬蟲程式指定的[排除模式](https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude)。例如，如果您的 Simple Storage Service (Amazon S3) 儲存貯體同時包含 `.csv` 和 `.json` 檔案，並且您將 `.json` 檔案從爬蟲程式中排除，Athena 會查詢這兩個檔案群組。若要避免這種情況，請將您要排除的檔案放在不同的位置。

在爬蟲程式之後， AWS Glue 爬蟲程式會自動指派特定資料表中繼資料，以協助使其與其他外部技術相容，例如 Apache Hive、Presto 和 Spark。有時爬蟲程式可能不正確地指派中繼資料屬性。使用 Athena 查詢資料表 AWS Glue 之前，手動更正 中的屬性。如需詳細資訊，請參閱《AWS Glue 開發人員指南》中的**[檢視與編輯資料表詳細資訊](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html#console-tables-details)。

AWS Glue 當 CSV 檔案的每個資料欄位有引號時， 可能會錯誤指派中繼資料，導致 `serializationLib` 屬性錯誤。如需詳細資訊，請參閱[處理以引號括住的 CSV 資料](schema-csv.md#schema-csv-quotes)。

# 對編目程式使用多個資料來源
<a name="schema-crawlers-data-sources"></a>

當 AWS Glue 爬蟲程式掃描 Amazon S3 並偵測多個目錄時，它會使用啟發式來判斷資料表的根目錄在目錄結構中的位置，以及哪些目錄是資料表的分割區。在某些情況下，在兩個或多個目錄偵測到類似的結構描述時，爬蟲程式可能會將它們視為分割區，而不是個別的資料表。協助爬蟲程式探索個別資料表的其中一種方法是，將每個資料表的根目錄新增為爬蟲程式的資料存放區。

Amazon S3 中的下列分割區為範例：

```
s3://amzn-s3-demo-bucket/folder1/table1/partition1/file.txt
s3://amzn-s3-demo-bucket/folder1/table1/partition2/file.txt
s3://amzn-s3-demo-bucket/folder1/table1/partition3/file.txt
s3://amzn-s3-demo-bucket/folder1/table2/partition4/file.txt
s3://amzn-s3-demo-bucket/folder1/table2/partition5/file.txt
```

如果 `table1`和 的結構描述`table2`類似，且單一資料來源在 `s3://amzn-s3-demo-bucket/folder1/`中設定為 AWS Glue，爬蟲程式可能會建立具有兩個分割區資料欄的單一資料表：一個包含 `table1`和 的分割區資料欄`table2`，以及第二個包含`partition1`透過 的分割區資料欄`partition5`。

若要讓 AWS Glue 爬蟲程式建立兩個不同的資料表，請將爬蟲程式設定為有兩個資料來源 `s3://amzn-s3-demo-bucket/folder1/table1/`和 `s3://amzn-s3-demo-bucket/folder1/table2`，如下列程序所示。

**若要將 S3 資料存放區新增至 中的現有爬蟲程式 AWS Glue**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 開啟 AWS Glue 主控台。

1. 在導覽窗格中，選擇 **Crawlers** (爬蟲程式)。

1. 選擇您的爬蟲程式連結，然後選擇 **Edit** (編輯)。

1. 對於 **Step 2: Choose data sources and classifiers** (步驟 2：選擇資料來源和分類器)，選擇 **Edit** (編輯)。

1. 對於**資料來源和目錄**，選擇**新增資料來源**。

1. 在 **Add data source** (新增資料來源) 對話方塊中，用於**S3 path** (S3 路徑)，選擇 **Browse** (瀏覽)。

1. 選取您想要使用的儲存貯體，然後選擇 **Choose** (選擇)。

   您新增的資料來源會顯示在 **Data sources** (資料來源)的清單中。

1. 選擇**下一步**。

1. 在 **Configure Security Settings** (設定安全設定) 頁面上，建立或選擇爬蟲程式的 IAM 角色，然後選擇**Next (下一步)**。

1. 確定 S3 路徑結尾為尾端斜線，然後選擇 **Add an S3 data source** (新增 S3 資料來源)。

1. 在 **Set output and scheduling** (設定輸出與排程) 頁面上，針對 **Output configuration** (輸出組態)，選擇目標資料庫。

1. 選擇**下一步**。

1. 在 **Review** (檢閱和更新) 頁面上，檢閱您所做的選擇。若要編輯步驟，請選擇 **Edit** (編輯)。

1.  選擇**更新**。

# 排程爬蟲程式，讓 AWS Glue Data Catalog 和 Amazon S3 保持同步
<a name="schema-crawlers-schedule"></a>

AWS Glue 爬蟲程式可以設定為按排程或隨需執行。如需詳細資訊，請參閱《AWS Glue 開發人員指南》**中的[任務和爬蟲程式的時間排程](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html)。

如果您有資料在固定時間抵達分割的資料表，您可以設定 AWS Glue 爬蟲程式，以按排程執行，以偵測和更新資料表分割區。您不再需要花費大量時間和金錢執行 `MSCK REPAIR` 命令，也不需要再手動執行 `ALTER TABLE ADD PARTITION` 命令。如需詳細資訊，請參閱《AWS Glue 開發人員指南》**中的[資料表分割區](https://docs.aws.amazon.com/glue/latest/dg/tables-described.html#tables-partition)。

# 使用 AWS Glue 分割區索引和篩選來最佳化查詢
<a name="glue-best-practices-partition-index"></a>

當 Athena 查詢已分割的資料表時，會擷取和篩選可用資料表分割區至與您的查詢相關的子集。隨著新資料和分割區的增加，處理分割區需要更長的時間，執行查詢的時間可能會增加。如果您有一個具有大量分割區的資料表，並且分割區的數量隨著時間的推移而增加，請考慮使用 AWS Glue 分割區索引和篩選。分割區索引允許 Athena 最佳化分割區處理，並改善高度已分割的資料表的查詢效能。在資料表屬性中設定分割區篩選，一共有兩個步驟：

1. 在 AWS Glue建立分割區索引。

1. 啟用資料表的分割區篩選。

## 建立分割區索引
<a name="glue-best-practices-partition-index-creating"></a>

如需在 中建立分割區索引的步驟 AWS Glue，請參閱《 AWS Glue 開發人員指南》中的[使用分割區索引](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html)。如需 中分割區索引的限制 AWS Glue，請參閱該頁面上的[關於分割區索引](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html#partition-index-1)一節。

## 啟用分割區篩選
<a name="glue-best-practices-partition-filtering-enabling"></a>

如需啟用資料表的分割區篩選，您必須在 AWS Glue設定新資料表屬性。如需如何在 中設定資料表屬性的步驟 AWS Glue，請參閱[設定分割區投影](https://docs.aws.amazon.com/athena/latest/ug/partition-projection-setting-up.html)頁面。當您在 中編輯資料表詳細資訊時 AWS Glue，請將下列索引鍵/值對新增至**資料表屬性**區段：
+ 對於 **Key** (索引鍵)，新增 `partition_filtering.enabled`。
+ 對於 **Value** (數值)，新增 `true`

您可以將 `partition_filtering.enabled` 設定為 `false`，隨時停用此資料表上的分割區篩選。

完成上述步驟後，您可以返回 Athena 主控台以查詢資料。

如需使用分割區索引和篩選的詳細資訊，請參閱*AWS 大數據部落格*中的[使用 AWS Glue Data Catalog 分割區索引改善 Amazon Athena 查詢效能](https://aws.amazon.com/blogs/big-data/improve-amazon-athena-query-performance-using-aws-glue-data-catalog-partition-indexes/)。

# 使用 AWS CLI 重新建立 AWS Glue 資料庫及其資料表
<a name="glue-recreate-db-and-tables-cli"></a>

無法直接重新命名 AWS Glue 資料庫，但您可以複製其定義、修改定義，並使用定義以不同名稱重新建立資料庫。同樣地，您可以複製舊資料庫中資料表的定義、修改定義，並使用修改後的定義重新建立新資料庫中的資料表。

**注意**  
 顯示的方法不會複製資料表分割區。

下列 Windows 程序假設您的 AWS CLI 已設定為 JSON 輸出。若要變更 中的預設輸出格式 AWS CLI，請執行 `aws configure`。

**使用 複製 AWS Glue 資料庫 AWS CLI**

1. 在命令提示字元中，執行下列 AWS CLI 命令來擷取您要複製的 AWS Glue 資料庫定義。

   ```
   aws glue get-database --name database_name
   ```

   如需有關 `get-database` 命令的詳細資訊，請參閱 [get-database](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/get-database.html)。

1. 將 JSON 輸出儲存到桌面上的檔案中，該檔案包含新資料庫的名稱 (例如 `new_database_name.json`)。

1. 在文字編輯器中開啟 `new_database_name.json` 檔案。

1. 在 JSON 檔案中，執行下列步驟：

   1. 移除檔案結尾的外部 `{ "Database":` 項目和對應的大括弧 `}`。

   1. 將 `Name` 項目變更為新的資料庫名稱。

   1. 移除 `CatalogId` 欄位。

1. 儲存檔案。

1. 在命令提示字元中，執行下列 AWS CLI 命令來使用修改過的資料庫定義檔案，以新名稱建立資料庫。

   ```
   aws glue create-database --database-input "file://~/Desktop\new_database_name.json"
   ```

   如需有關 `create-database` 命令的詳細資訊，請參閱 [create-database](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/create-database.html)。如需有關從檔案載入 AWS CLI 參數的資訊，請參閱*AWS Command Line Interface 《 使用者指南*》中的[從檔案載入 AWS CLI 參數](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-file.html)。

1. 若要驗證是否已在 中建立新資料庫 AWS Glue，請執行下列命令：

   ```
   aws glue get-database --name new_database_name
   ```

現在，您已準備好取得要複製到新資料庫的資料表的定義、修改定義，並使用修改後的定義在新資料庫中重新建立資料表。此程序不會變更資料表名稱。

**使用 複製 AWS Glue 資料表 AWS CLI**

1. 在命令提示字元中，執行下列 AWS CLI 命令。

   ```
   aws glue get-table --database-name database_name --name table_name
   ```

   如需有關 `get-table` 命令的詳細資訊，請參閱 [get-table](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/get-table.html)。

1. 將 JSON 輸出儲存到 Windows 桌面上的檔案中，該檔案包含資料表名稱 (例如 *table\$1name*.json)。

1. 在文字編輯器中開啟該檔案。

1. 在 JSON 檔案中，移除檔案結尾的外部 `{"Table": ` 項目和對應的大括弧 `}`。

1. 在 JSON 檔案中，移除下列項目及其值：
   + `DatabaseName` – 因為 `create-table` CLI 命令使用 `--database-name` 參數，所以不需要此項目。
   + `CreateTime`
   + `UpdateTime`
   + `CreatedBy`
   + `IsRegisteredWithLakeFormation`
   + `CatalogId`
   + `VersionId`

1. 儲存資料表定義檔案。

1. 在命令提示字元中，執行下列 AWS CLI 命令以在新資料庫中重新建立資料表：

   ```
   aws glue create-table --database-name new_database_name --table-input "file://~/Desktop\table_name.json"     
   ```

   如需有關 `create-table` 命令的詳細資訊，請參閱 [create-table](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/create-table.html)。

   資料表現在會出現在 中的新資料庫中 AWS Glue ，並且可以從 Athena 查詢。

1. 重複步驟，以將每個其他資料表複製到 AWS Glue中的新資料庫。

# 建立用於 ETL 任務的資料表
<a name="schema-classifier"></a>

您可以使用 Athena 建立 AWS Glue 可用於 ETL 任務的資料表。 AWS Glue jobs 會執行 ETL 操作。 AWS Glue 任務會執行指令碼，從來源擷取資料、轉換資料，並將其載入目標。如需詳細資訊，請參閱[《 開發人員指南》中的在 AWS Glue 中編寫任務](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html)。 *AWS Glue *

## 為 AWS Glue ETL 任務建立 Athena 資料表
<a name="schema-etl-tables"></a>

您在 Athena 中建立的資料表必須新增一個資料表屬性，稱為 `classification`，它可以識別資料格式。這可讓 AWS Glue 對 ETL 任務使用資料表。分類值可以是 `avro`、`csv`、`json`、`orc`、`parquet` 或 `xml`。Athena 中的 `CREATE TABLE` 陳述式範例如下所示：

```
CREATE EXTERNAL TABLE sampleTable (
  column1 INT,
  column2 INT
  ) STORED AS PARQUET
  TBLPROPERTIES (
  'classification'='parquet')
```

如果在建立`classification`資料表時未新增資料表屬性，您可以使用 AWS Glue 主控台新增它。

**使用 AWS Glue 主控台新增分類表屬性**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 開啟 AWS Glue 主控台。

1. 在主控台導覽窗格中，選擇 **Tables** (資料表)。

1. 選擇您想要編輯的資料表連結，然後選擇 **Action** (動作)、**Edit table** (編輯資料表)。

1. 向下捲動到 **Table properties** (資料表屬性) 的區段中。

1. 選擇**新增**。

1. 在 **Key** (索引鍵) 欄位，輸入 **classification**。

1. 在 **Value** (值) 欄位，輸入資料類型 (例如，**json**)。

1. 選擇**儲存**。

   在 **Table details** (資料表詳細資訊) 區段中，您輸入的資料類型會顯示在 **Classification** (分類) 表格的欄位。

如需詳細資訊，請參閱《AWS Glue 開發人員指南》**中的[使用資料表](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html)。

## 使用 ETL 任務來最佳化查詢效能
<a name="schema-etl-performance"></a>

AWS Glue 任務可協助您將資料轉換為可在 Athena 中最佳化查詢效能的格式。資料格式對於 Athena 中的查詢效能和查詢成本有重大影響。

AWS Glue 支援寫入 Parquet 和 ORC 資料格式。您可以使用此功能來轉換資料，以便在 Athena 中使用。如需有關使用 Parquet 和 ORC 以及其他提高效能的方式的詳細資訊，請參閱 [Amazon Athena 的十大效能調校秘訣](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/)。

**注意**  
為了降低 Athena 無法讀取 AWS Glue ETL 任務產生的 `SMALLINT`和 `TINYINT` 資料類型的可能性，請在建立將資料轉換為 ORC 的 ETL 任務`TINYINT``INT`時，將 `SMALLINT`和 轉換為 。

## 自動化 ETL AWS Glue 的任務
<a name="schema-etl-automate"></a>

您可以設定 AWS Glue ETL 任務根據觸發條件自動執行。當來自外部的資料 AWS 推送至 Amazon S3 儲存貯體時，此功能非常適合在 Athena 中查詢，否則為次佳格式。如需詳細資訊，請參閱《 *AWS Glue 開發人員指南*》中的[觸發 AWS Glue 任務](https://docs.aws.amazon.com/glue/latest/dg/trigger-job.html)。

# 在 中使用 CSV 資料 AWS Glue
<a name="schema-csv"></a>

此頁面說明如何使用 從每個資料欄的資料值有引號的 CSV 檔案 AWS Glue ，或從包含標頭值的 CSV 檔案建立結構描述。

## 處理以引號括住的 CSV 資料
<a name="schema-csv-quotes"></a>

假設一個 CSV 檔案中的資料欄位以雙引號括住，如下列範例所示。

```
"John","Doe","123-555-1231","John said \"hello\""
"Jane","Doe","123-555-9876","Jane said \"hello\""
```

若要在 Athena 中對從具有引號值的 CSV 檔案建立的資料表執行查詢，您必須在 中修改資料表屬性 AWS Glue ，才能使用 OpenCSVSerDe。如需 OpenCSV SerDe 的詳細資訊，請參閱[用於處理 CSV 的 Open CSV SerDe](csv-serde.md)。

**在 AWS Glue 主控台中編輯資料表屬性**

1. 在 AWS Glue 主控台導覽窗格中，選擇**資料表**。

1. 選擇您想要編輯的資料表連結，然後選擇 **Action** (動作)、**Edit table** (編輯資料表)。

1. 在 **Edit table** (編輯資料表) 頁面上，進行下列變更：
   + 對於 **Serialization lib** (序列化程式庫)，請輸入 `org.apache.hadoop.hive.serde2.OpenCSVSerde`。
   + 對於 **Serde parameters** (SerDe 參數)，請輸入金鑰 `escapeChar`、`quoteChar` 以及 `separatorChar` 的值：
     + 對於 `escapeChar`，請輸入反斜線 (**\$1**)。
     + 對於 `quoteChar`，請輸入雙引號 (**"**)。
     + 對於 `separatorChar`，請輸入逗號 (**,**)。

1. 選擇**儲存**。

如需詳細資訊，請參閱《AWS Glue 開發人員指南》中的**[檢視與編輯資料表詳細資訊](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html#console-tables-details)。

您也可以以程式設計方式更新 AWS Glue 資料表屬性。使用 AWS Glue [UpdateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateTable.html) API 操作或 [update-table](https://docs.aws.amazon.com/cli/latest/reference/glue/update-table.html) AWS CLI 命令來修改資料表定義中的`SerDeInfo`區塊，如下列 JSON 範例所示。

```
"SerDeInfo": {
   "name": "",
   "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
   "parameters": {
      "separatorChar": ","
      "quoteChar": "\""
      "escapeChar": "\\"
      }
},
```

## 處理具有標頭的 CSV 檔案
<a name="schema-csv-headers"></a>

當您在 Athena 中以 `CREATE TABLE` 陳述式定義資料表時，您可以使用 `skip.header.line.count` 資料表屬性忽略 CSV 資料中的標頭，如下列範例所示。

```
...
STORED AS TEXTFILE
LOCATION 's3://amzn-s3-demo-bucket/csvdata_folder/';
TBLPROPERTIES ("skip.header.line.count"="1")
```

或者，您也可以事先移除 CSV 標頭，使標頭資訊不包含在 Athena 查詢結果中。可達成此目的的其中一種方法是使用 AWS Glue 任務，它會執行擷取、轉換和載入 (ETL) 工作。您可以使用 PySpark Python 方言延伸 AWS Glue 的語言，在 中撰寫指令碼。如需詳細資訊，請參閱[《 開發人員指南》中的在 AWS Glue 中編寫任務](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html)。 *AWS Glue *

下列範例顯示 AWS Glue 指令碼中的函數，該函數使用 來寫入動態影格`from_options`，並將`writeHeader`格式選項設定為 false，這會移除標頭資訊：

```
glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://amzn-s3-demo-bucket/MYTABLEDATA/"}, format = "csv", format_options = {"writeHeader": False}, transformation_ctx = "datasink2")
```

# 在 中使用地理空間資料 AWS Glue
<a name="schema-geospatial"></a>

AWS Glue 原生不支援已知文字 (WKT)、已知二進位 (WKB) 或其他 PostGIS 資料類型。 AWS Glue 分類器會剖析地理空間資料，並使用格式支援的資料類型進行分類，例如 `varchar` CSV。如同其他 AWS Glue 資料表，您可能需要更新從地理空間資料建立之資料表的屬性，以允許 Athena 依原狀剖析這些資料類型。如需詳細資訊，請參閱[使用編目程式新增資料表](schema-crawlers.md)及[在 中使用 CSV 資料 AWS Glue](schema-csv.md)。Athena 可能無法依原狀剖析 AWS Glue 資料表中的某些地理空間資料類型。如需在 Athena 中使用地理空間資料的詳細資訊，請參閱[查詢地理空間資料](querying-geospatial-data.md)。