

# 在 Athena 控制台中使用表单添加 Amazon Glue 表
<a name="data-sources-glue-manual-table"></a>

以下过程演示了如何使用 Athena 控制台通过**根据 S3 存储桶数据创建表**表单添加表。

**使用表单添加表并输入架构信息**

1. 从 [https://console.aws.amazon.com/athena/](https://console.amazonaws.cn/athena/home) 打开 Athena 控制台。

1. 在查询编辑器中，选择 **Tables and views**（表和视图）旁边的 **Create**（创建），然后选择 **S3 bucket data**（S3 存储桶数据）。

1. 在**根据 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 库** – SerDe（串行器解串器）库用于解析特定的数据格式，以便 Athena 可以为其创建表。对于大多数格式，系统会为您选择默认 SerDe 库。对于以下格式，请根据您的需要选择库：
     + **Apache Web 日志** – 选择 **RegexSerDe** 或 **GrokSerDe** 库。对于 RegexSerDe，请在 **Regex definition**（正则表达式定义）框中提供一个正则表达式。对于 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)。
   + 对于 **Encryption**（加密），如果基础数据已在 Amazon S3 中加密，则选择 **Encrypted data set**（加密数据集）。此选项在 `CREATE TABLE` 语句中会将 `has_encrypted_data` 表属性设置为 true。

1. 对于 **Column details**（列详细信息），输入要添加到表中的列名称和数据类型。
   + 要添加更多列（一次添加一列），请选择 **Add a column (添加列)**。
   + 要快速添加更多列，请选择 **Bulk add columns (批量添加列)**。在文本框中，输入以逗号分隔的列列表，格式为 {{column\_name}} {{data\_type}}, {{column\_name}} {{data\_type}}[,…]，然后选择 **Add**（添加）。

1. （可选）对于 **Partition details**（分区详情），添加一个或多个列名称和数据类型。分区会根据列值将相关数据组合在一起，这可帮助减少每次查询扫描的数据量。有关分区的信息，请参阅 [对您的数据进行分区](partitions.md)。

1. （可选）对于 **Bucketing**（分桶），您可以指定包含要组合在一起的行的一列或多列，然后将这些行放入多个桶中。这让您能够在指定分桶列值时仅查询要读取的桶。
   + 对于 **Buckets**（桶），选择一个或多个具有大量唯一值（例如，主键）且经常用于筛选查询中数据的列。
   + 对于 **Number of buckets**（桶数量），输入可优化文件大小的数字。有关更多信息，请参阅 Amazon 大数据博客中的 [Top 10 Performance Tuning Tips for Amazon Athena](https://www.amazonaws.cn/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/)（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**（创建表），在查询编辑器中运行生成的语句并创建表。