

# 教程：S3 表类数据存储服务入门
<a name="s3-tables-getting-started"></a>

在本教程中，您将创建一个表存储桶，并将您区域中的表存储桶与 AWS 分析服务集成。接下来，您将使用 AWS CLI 或控制台在表存储桶中创建第一个命名空间和表。然后，可以开始使用 Athena 查询您的表。

**提示**  
如果您要将表格数据从通用存储桶迁移到表存储桶，AWS 解决方案库提供了指导性解决方案来为您提供助力。此解决方案通过将 AWS Step Functions 和 Amazon EMR 与 Apache Spark 结合使用，自动将在 AWS Glue Data Catalog 中注册并存储在通用存储桶中的 Apache Iceberg 和 Apache Hive 表移到表存储桶。有关更多信息，请参阅 AWS 解决方案库中的[将表格数据从 Amazon S3 迁移到 S3 表的指南](https://aws.amazon.com/solutions/guidance/migrating-tabular-data-from-amazon-s3-to-s3-tables/)。

**Topics**
+ [步骤 1：创建表存储桶并将其与 AWS 分析服务集成](#s1-tables-tutorial-create-bucket)
+ [步骤 2：创建表命名空间和表](#s2-tables-tutorial-create-namespace-and-table)
+ [步骤 3：在 Athena 中使用 SQL 查询数据](#s4-query-tables)

## 步骤 1：创建表存储桶并将其与 AWS 分析服务集成
<a name="s1-tables-tutorial-create-bucket"></a>

在此步骤中，您使用 Amazon S3 控制台来创建第一个表存储桶。有关创建表存储桶的其它方法，请参阅 [Creating a table bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-buckets-create.html)。

**注意**  
默认情况下，Amazon S3 控制台会自动将表存储桶与 AWS Glue Data Catalog 集成，从而支持 AWS 分析服务自动发现和访问您的 S3 表类数据存储服务数据。如果您使用 AWS Command Line Interface（AWS CLI）、AWS SDK 或 REST API 以编程方式创建第一个表存储桶，则必须手动完成 AWS 分析服务集成。有关更多信息，请参阅 [将 Amazon S3 表类数据存储服务与 AWS 分析服务集成](s3-tables-integrating-aws.md)。

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在页面顶部的导航栏中，选择当前所显示 AWS 区域的名称。接下来，选择要在其中创建表存储桶的区域。

1. 在左侧导航窗格中，选择**表存储桶**。

1. 选择**创建表存储桶**。

1. 在**常规配置**下，输入表存储桶的名称。

   表存储桶名称必须满足以下要求：
   + 在当前区域中对于您的 AWS 账户是唯一的。
   + 长度必须介于 3 到 63 个字符之间。
   + 只能由小写字母、数字和连字符 (`-`) 组成。
   + 以字母或数字开头和结尾。

   创建表存储桶后，便无法更改其名称。创建表存储桶的 AWS 账户拥有该存储桶。有关命名表存储桶的更多信息，请参阅[表存储桶命名规则](s3-tables-buckets-naming.md#table-buckets-naming-rules)。

1. 在**与 AWS 分析服务集成**部分中，确保选中**启用集成**复选框。

   如果在使用控制台创建第一个表存储桶时选择了**启用集成**，则 Amazon S3 会尝试将表存储桶与 AWS 分析服务集成。这种集成可让您使用 AWS 分析服务来访问当前区域中的所有表。有关更多信息，请参阅 [将 Amazon S3 表类数据存储服务与 AWS 分析服务集成](s3-tables-integrating-aws.md)。

1. 选择 **创建存储桶 **。

## 步骤 2：创建表命名空间和表
<a name="s2-tables-tutorial-create-namespace-and-table"></a>

对于此步骤，可以在表存储桶中创建一个命名空间，然后在该命名空间下创建一个新表。可以使用控制台或 AWS CLI 创建表命名空间和表。

**重要**  
创建表时，请确保在表名称和表定义中全部使用小写字母。例如，请确保列名称全部为小写。如果表名称或表定义包含大写字母，则 AWS Lake Formation 或 AWS Glue Data Catalog 不支持该表。在这种情况下，Amazon Athena 等 AWS 分析服务将无法看到您的表，即使表存储桶与 AWS 分析服务集成，也不例外。  
如果表定义包含大写字母，则在 Athena 中运行 `SELECT` 查询时会收到以下错误消息：“GENERIC\_INTERNAL\_ERROR: Get table request failed: com.amazonaws.services.glue.model.ValidationException: Unsupported Federation Resource - Invalid table or column names.”

### 使用 S3 控制台和 Amazon Athena
<a name="s3-tables-tutorial-create-table-console"></a>

以下过程使用 Amazon S3 控制台通过 Amazon Athena 来创建命名空间和表。

**创建表命名空间和表**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择**表存储桶**。

1. 在**表存储桶**页面上，选择要在其中创建表的表存储桶。

1. 在表存储桶详细信息页面上，选择**使用 Athena 创建表**。

1. 在**使用 Athena 创建表**对话框中，选择**创建命名空间**，然后在**命名空间名称**字段中输入名称。命名空间名称必须为 1 到 255 个字符，并且在表存储桶中是唯一的。有效字符为 a–z、0–9 和下划线 (`_`)。命名空间名称的开头不支持使用下划线。

1. 选择**创建命名空间**。

1. 选择**使用 Athena 创建表**。

1. Amazon Athena 控制台将打开，并出现 Athena 查询编辑器。查询编辑器中填充了一个可用于创建表的示例查询。修改此查询，以指定您希望表具有的表名称和列。

1. 修改完查询后，选择**运行**来创建表。

如果表创建取得成功，则新表的名称将显示在 Athena 中的表列表中。当您导航回 Amazon S3 控制台时，刷新列表后，新表将出现在表存储桶的详细信息页面上的**表**列表中。

### 使用 AWS CLI
<a name="s3-tables-tutorial-create-table-CLI"></a>

要使用以下 AWS CLI 示例命令在表存储桶中创建命名空间，然后在该命名空间下使用架构创建新表，请将 `{{user input placeholder}}` 值替换为您自己的值。

**先决条件**
+ 将 [https://docs.aws.amazon.com//aws-managed-policy/latest/reference/AmazonS3TablesFullAccess.html](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/AmazonS3TablesFullAccess.html) 策略附加到您的 IAM 身份。
+ 安装 AWS CLI 版本 2.23.10 或更高版本。有关更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[安装或更新最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

1. 通过运行以下命令，在表存储桶中创建新的命名空间：

   ```
   aws s3tables create-namespace \
   --table-bucket-arn arn:aws:s3tables:{{us-east-1}}:{{111122223333}}:bucket/{{amzn-s3-demo-table-bucket}} \
   --namespace {{my_namespace}}
   ```

   1. 通过运行以下命令，确认您的命名空间已成功创建：

     ```
     aws s3tables list-namespaces \
     --table-bucket-arn arn:aws:s3tables:{{us-east-1}}:{{111122223333}}:bucket/{{amzn-s3-demo-table-bucket}}
     ```

1. 通过运行以下命令，使用表架构创建新表：

   ```
   aws s3tables create-table --cli-input-json file://{{mytabledefinition.json}}
   ```

   对于 `mytabledefinition.json` 文件，请使用以下示例表定义：

   ```
   {
       "tableBucketARN": "arn:aws:s3tables:{{us-east-1}}:{{111122223333}}:bucket/{{amzn-s3-demo-table-bucket}}",
       "namespace": "{{my_namespace}}",
       "name": "{{my_table}}",
       "format": "ICEBERG",
       "metadata": {
           "iceberg": {
               "schema": {
                   "fields": [
                        {{{"name": "id", "type": "int","required": true},
                        {"name": "name", "type": "string"},
                        {"name": "value", "type": "int"}}}
                   ]
               }
           }
       }
   }
   ```

## 步骤 3：在 Athena 中使用 SQL 查询数据
<a name="s4-query-tables"></a>

可以在 Athena 中使用 SQL 查询表。Athena 对于 S3 表类数据存储服务支持数据定义语言（DDL）、数据操作语言（DML）和数据查询语言（DQL）查询。

您可以从 Amazon S3 控制台或通过 Amazon Athena 控制台访问 Athena 查询。

### 使用 S3 控制台和 Amazon Athena
<a name="s4-query-tables-query-table-s3-console"></a>

以下过程使用 Amazon S3 控制台访问 Athena 查询编辑器，以便您可以使用 Amazon Athena 查询表。

**查询表**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择**表存储桶**。

1. 在**表存储桶**页面上，选择包含要查询的表的表存储桶。

1. 在表存储桶详细信息页面上，选择要查询的表名称旁边的选项按钮。

1. 选择**使用 Athena 查询表**。

1. Amazon Athena 控制台打开，Athena 查询编辑器随即出现，其中包含为您加载的示例 `SELECT` 查询。根据您的用例需要修改此查询。

1. 要运行查询，请选择 **Run**（运行）。

### 使用 Amazon Athena 控制台
<a name="s4-query-tables-query-table-athena-console"></a>

**查询表**

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

1. 查询表。下面是您可以修改的示例查询。确保将 `{{user input placeholders}}` 替换为您自己的信息。

   ```
   SELECT * FROM "s3tablescatalog/{{amzn-s3-demo-table-bucket}}"."{{my_namespace}}"."{{my_table}}" LIMIT 10
   ```

1. 要运行查询，请选择 **Run**（运行）。