

# S3 表存储桶中的表
<a name="s3-tables-tables"></a>

S3 表表示由基础表数据和相关元数据组成的结构化数据集。该数据作为子资源存储在表存储桶中。表存储桶中的所有表均以 [Apache Iceberg](https://iceberg.apache.org/docs/latest/) 表格式存储。Amazon S3 通过自动文件压缩和快照管理来管理表的维护。有关更多信息，请参阅 [表维护](s3-tables-maintenance.md)。

要使 AWS 分析服务可以访问您账户中的表，您可以将 Amazon S3 表存储桶与 Amazon SageMaker 智能湖仓集成。这种集成支持 Amazon Athena 和 Amazon Redshift 等 AWS 分析服务自动发现和访问您的表数据。

创建表时，Amazon S3 会自动为表生成仓库位置。这是一个唯一的 S3 位置，用于存储与表关联的对象。以下示例显示了仓库位置的格式：

```
s3://63a8e430-6e0b-46f5-k833abtwr6s8tmtsycedn8s4yc3xhuse1b--table-s3
```

在表存储桶中，可以将表组织成称为命名空间的逻辑分组。有关更多信息，请参阅 [表命名空间](s3-tables-namespace.md)。

您可以重命名表，但每个表都有自己唯一的 Amazon 资源名称（ARN）和唯一的表 ID。每个表还附加了资源策略。可以使用此策略来管理对表的访问权限。

表 ARN 使用以下格式：

```
arn:aws:s3tables:region:owner-account-id:bucket/bucket-name/table/table-id
```

默认情况下，您可以在表存储桶中创建多达 10000 个表。要请求增加表存储桶或表的配额，请联系 [支持](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase)。

Amazon S3 在表存储桶中支持以下类型的表：

**客户表**  
客户表是您可以读取和写入的表。您可以使用集成的查询引擎从这些表中检索数据。您可以使用 S3 API 操作或集成的查询引擎在其中插入、更新或删除数据。

**AWS 表**  
AWS 表是由 AWS 服务 代表您生成的只读表。这些表由 Amazon S3 管理，而不能由 Amazon S3 本身以外的任何 IAM 主体进行修改。您可以从这些表中检索信息，但无法修改表中的数据。AWS 表包括 S3 元数据表，其中包含从 S3 通用存储桶内的对象中捕获的元数据。有关更多信息，请参阅 [使用 S3 元数据表发现您的数据](metadata-tables-overview.md)。

**Topics**
+ [创建 Amazon S3 表](s3-tables-create.md)
+ [删除 Amazon S3 表](s3-tables-delete.md)
+ [查看有关 Amazon S3 表的详细信息](s3-tables-table-details.md)
+ [管理表策略](s3-tables-table-policy.md)
+ [将标签与 S3 表结合使用](table-tagging.md)

# 创建 Amazon S3 表
<a name="s3-tables-create"></a>

Amazon S3 表是表存储桶的子资源。表以 Apache Iceberg 格式存储，以便您通过使用查询引擎和其它支持 Apache Iceberg 的应用程序来处理这些表。Amazon S3 会持续优化表，以有助于降低存储成本并提高分析查询性能。

创建表时，Amazon S3 会自动为表生成*仓库位置*。仓库位置是一个唯一的 S3 位置，您可以在其中读取和写入与表关联的对象。以下示例显示了仓库位置的格式：

```
s3://63a8e430-6e0b-46f5-k833abtwr6s8tmtsycedn8s4yc3xhuse1b--table-s3
```

表具有以下 Amazon 资源名称（ARN）格式：

```
arn:aws:s3tables:region:owner-account-id:bucket/bucket-name/table/table-id
```

默认情况下，您可以在表存储桶中创建多达 10000 个表。要请求增加表存储桶或表的配额，请联系 [支持](https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase)。

可以使用 Amazon S3 控制台、Amazon S3 REST API、AWS SDK、AWS Command Line Interface（AWS CLI）或连接到表存储桶的查询引擎来创建表。

创建表时，您可以为该表指定加密设置，除非您使用 Athena 创建表。如果您未指定加密设置，则将使用表存储桶的默认设置对表进行加密。有关更多信息，请参阅 [为表指定加密](s3-tables-kms-specify.md#specify-kms-table)。

**创建表的先决条件**

要创建表，首先必须执行以下操作：
+ [创建表存储桶](s3-tables-buckets-create.md).
+ 在表存储桶中[创建命名空间](s3-tables-namespace-create.md)。
+ 确保您对 `s3tables:CreateTable` 和 `s3tables:PutTableData` 具有 AWS Identity and Access Management（IAM）权限。
+ 
**注意**  
如果您对表使用 SSE-KMS 加密，则需要对 `s3tables:PutTableEncryption` 拥有权限，并对所选 AWS KMS 密钥拥有 `DescribeKey` 权限。此外，您使用的 AWS KMS 密钥需要向 S3 表类数据存储服务授予执行自动表维护的权限。有关更多信息，请参阅 [S3 表类数据存储服务 SSE-KMS 加密的权限要求](s3-tables-kms-permissions.md)。

有关有效表名称的信息，请参阅[表和命名空间的命名规则](s3-tables-buckets-naming.md#naming-rules-table)。

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

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

以下过程使用 Amazon S3 控制台通过 Amazon Athena 来创建表。如果您尚未在表存储桶中创建命名空间，则可以在此过程中创建命名空间。在执行以下步骤之前，请确保您已在此区域中将表存储桶与 AWS 分析服务集成。有关更多信息，请参阅 [将 Amazon S3 表类数据存储服务与 AWS 分析服务集成](s3-tables-integrating-aws.md)。

**注意**  
当您使用 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 和下划线 (`_`)。命名空间名称的开头不支持使用下划线。
   + 选择 **Create namespace (创建命名空间)**。
   + 指定现有的命名空间。选择**指定此表存储桶中的现有命名空间**。然后选择**从现有命名空间中选择**或**输入现有命名空间名称**。如果存储桶中有超过 1000 个命名空间，则当命名空间名称未出现在列表中时，必须输入该名称。

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

1. Amazon Athena 控制台将打开，并出现 Athena 查询编辑器。**目录**字段中应填充 **s3tablescatalog/**，后跟表存储桶的名称，例如 **s3tablescatalog/*amzn-s3-demo-bucket***。**数据库**字段中应填充您之前创建或选择的命名空间。
**注意**  
如果您在**目录**和**数据库**字段中看不到这些值，请确保您已在该区域中将表存储桶与 AWS 分析服务集成。有关更多信息，请参阅 [将 Amazon S3 表类数据存储服务与 AWS 分析服务集成](s3-tables-integrating-aws.md)。

1. 查询编辑器中填充了一个可用于创建表的示例查询。修改此查询，以指定您希望表具有的表名称和列。

1. 修改完查询后，选择**运行**来创建表。
**注意**  
如果您在尝试在 Athena 中运行查询时收到错误“权限不足，无法执行查询。主体对指定的资源没有任何权限”，则必须向您授予对于表的必需 Lake Formation 权限。有关更多信息，请参阅 [授予对表或数据库的 Lake Formation 权限](grant-permissions-tables.md#grant-lf-table)。
如果您在尝试在 Athena 中运行查询时收到错误“Iceberg 无法访问所请求的资源”，请转到 AWS Lake Formation 控制台，并确保您已授予自己对您创建的表存储桶目录和数据库（命名空间）的权限。授予这些权限时请勿指定表。有关更多信息，请参阅 [授予对表或数据库的 Lake Formation 权限](grant-permissions-tables.md#grant-lf-table)。
如果在 Athena 中运行 `SELECT` 查询时收到以下错误消息，则此消息是由表名称中或表定义的列名称中具有大写字母而引起的：“GENERIC\$1INTERNAL\$1ERROR: Get table request failed: com.amazonaws.services.glue.model.ValidationException: Unsupported Federation Resource - Invalid table or column names.” 确保表名称和列名称全部为小写。

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

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

此示例展示了如何使用 AWS CLI 并使用 JSON 指定表元数据，来通过架构创建表。要使用此示例，请将 `user input placeholders` 替换为您自己的信息。

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

对于 `mytabledefinition.json` 文件，请使用以下示例表定义。要使用此示例，请将 `user input placeholders` 替换为您自己的信息。

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

## 使用查询引擎
<a name="create-table-engine"></a>

您可以在连接到表存储桶的受支持的查询引擎中创建表，例如在 Amazon EMR 上的 Apache Spark 会话中。

以下示例说明如何通过 Spark 使用 `CREATE` 语句创建表，以及如何使用 `INSERT` 语句或从现有文件中读取数据来添加表数据。要使用此示例，请将 `user input placeholders` 替换为您自己的信息。

```
spark.sql( 
" CREATE TABLE IF NOT EXISTS s3tablesbucket.example_namespace.`example_table` ( 
    id INT, 
    name STRING, 
    value INT 
) 
USING iceberg "
)
```

创建表后，可以将数据加载到表中。从以下方法中进行选择：
+ 使用 `INSERT` 语句向表中添加数据。

  ```
  spark.sql(
  """
      INSERT INTO s3tablesbucket.my_namespace.my_table 
      VALUES 
          (1, 'ABC', 100), 
          (2, 'XYZ', 200)
  """)
  ```
+ 加载现有的数据文件。

  1. 将数据读入 Spark：

     ```
     val data_file_location = "Path such as S3 URI to data file"
     val data_file = spark.read.parquet(data_file_location)
     ```

  1. 将数据写入 Iceberg 表：

     ```
     data_file.writeTo("s3tablesbucket.my_namespace.my_table").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()
     ```

# 删除 Amazon S3 表
<a name="s3-tables-delete"></a>

可以使用 Amazon S3 REST API、AWS SDK、AWS Command Line Interface（AWS CLI）或使用集成查询引擎来删除表。

**注意**  
S3 表类数据存储服务不支持 `purge=false` 的 `DROP TABLE` 操作。某些版本的 Apache Spark 始终将此标志设置为 `false`，即使在运行 `DROP TABLE PURGE` 命令时也是如此。要删除表，您可以使用 `purge=true` 重试 `DROP TABLE`，或者使用 S3 表类数据存储服务 [https://docs.aws.amazon.com//AmazonS3/latest/API/API_s3TableBuckets_DeleteTable.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_s3TableBuckets_DeleteTable.html) REST API 操作。

**重要**  
 删除表时，需要了解以下事项：  
删除表是永久性的，无法撤消。在删除表之前，请确保您已备份或复制所有重要数据。
与表关联的所有数据和配置都将永久移除。

## 使用 AWS CLI
<a name="delete-table-CLI"></a>

此示例说明如何使用 AWS CLI 删除表。要使用此命令，请将 `user input placeholders` 替换为您自己的信息。

```
aws s3tables delete-table \
    --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \
    --namespace example_namespace --name example_table
```

## 使用查询引擎
<a name="create-table-namespace-engine"></a>

您可以在连接到 Amazon S3 表存储桶的 Apache Spark 会话中删除表。

此示例说明如何使用 `DROP TABLE PURGE` 命令来删除表。要使用此命令，请将 `user input placeholders` 替换为您自己的信息。

```
spark.sql( 
" DROP TABLE [IF EXISTS] s3tablesbucket.example_namespace.example_table PURGE")
```

# 查看有关 Amazon S3 表的详细信息
<a name="s3-tables-table-details"></a>

您可以在控制台中或以编程方式查看表存储桶中表的一般详细信息，例如创建详细信息、格式和类型。您可以使用 S3 表类数据存储服务 REST API、AWS CLI 或 AWS SDK，以编程方式查看表加密设置和维护设置。

## 查看表详细信息
<a name="table-details-view"></a>

### 使用 AWS CLI
<a name="table-details-CLI"></a>

此示例说明如何使用 AWS CLI 获取有关表的详细信息。要使用此示例，请将*用户输入占位符* 替换为您自己的信息。

```
aws s3tables get-table --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket --namespace my-namespace --name my-table
```

### 使用 S3 控制台
<a name="table-details-console"></a>

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

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

1. 选择表存储桶，然后选择表。

1. 选择**属性**选项卡。

1. （可选）有关附加到表的权限策略的信息，请选择**权限**。

## 预览表数据
<a name="table-preview-data"></a>

### 使用 S3 控制台
<a name="table-preview-data-console"></a>

您可以利用以下过程从 Amazon S3 控制台直接预览表中的数据。

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

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

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

1. 选择要预览的表，然后选择**预览**。

**注意**  
预览显示表的前 10 行和最多 25 列。无法预览超过 50 mb 的表。

## 加密详细信息
<a name="table-encryption-view"></a>

有关表存储桶加密的更多信息，请参阅[在表存储桶中使用具有 AWS KMS 密钥的服务器端加密（SSE-KMS）](s3-tables-kms-encryption.md)。

### 使用 AWS CLI
<a name="table-encryption-view-CLI"></a>

此示例说明如何使用 AWS CLI 来获取有关表的加密设置的详细信息。要使用此示例，请将*用户输入占位符* 替换为您自己的信息。

```
aws s3tables get-table-encryption --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket --namespace my-namespace --name my-table
```

## 维护详细信息
<a name="table-maintenance-view"></a>

有关维护设置的信息，请参阅[表存储桶的维护](s3-table-buckets-maintenance.md) 

### 使用 AWS CLI
<a name="table-maintenance-view-CLI"></a>

此示例说明如何使用 AWS CLI 来获取有关表的维护配置设置的详细信息。要使用此示例，请将*用户输入占位符* 替换为您自己的信息。

```
aws s3tables get-table-maintenance-configuration --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket --namespace my-namespace --name my-table
```

# 管理表策略
<a name="s3-tables-table-policy"></a>

可以使用 Amazon S3 控制台、Amazon S3 REST API、AWS SDK 和 AWS CLI 来添加、删除、更新和查看表的表策略。有关更多信息，请参阅以下主题。有关 Amazon S3 表类数据存储服务支持的 AWS Identity and Access Management（IAM）操作和条件键的更多信息，请参阅 [S3 表类数据存储服务的访问管理](s3-tables-setting-up.md)。有关示例表策略，请参阅 [S3 表类数据存储服务的基于资源的策略](s3-tables-resource-based-policies.md)。

## 添加表策略
<a name="table-policy-add"></a>

要向表添加表策略，可以使用 Amazon S3 REST API、AWS SDK 和 AWS CLI。

### 使用 AWS CLI
<a name="table-policy-get-CLI"></a>

此示例说明如何使用 AWS CLI 查看附加到表的策略。要使用该命令，请将*用户输入占位符* 替换为您自己的信息。

```
aws s3tables get-table-policy \
    --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket1/table/tableID \
    --namespace my-namespace \
    --name my-table
```

### 使用 S3 控制台
<a name="table-policy-add-console"></a>

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择 **Amazon S3**。

1. 选择**表存储桶**并选择包含表的表存储桶名称，然后从该存储桶中选择您的表。

1. 选择 **Permissions（权限）**选项卡。

1. 在**表策略**下，选择**编辑**。

1. 在策略编辑器中，输入策略 JSON。

1. （可选）选择**策略示例**以查看可以根据需要调整的示例策略。

1. 输入您的策略后，选择**保存更改**。

## 查看表策略
<a name="table-policy-get"></a>

要查看附加到表的存储桶策略，可以使用 Amazon S3 REST API、AWS SDK 和 AWS CLI。

### 使用 AWS CLI
<a name="table-policy-get-CLI"></a>

此示例说明如何使用 AWS CLI 查看附加到表的策略。要使用该命令，请将*用户输入占位符* 替换为您自己的信息。

```
aws s3tables get-table-policy \
    --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket  \
    --namespace my-namespace \
    --name my-table
```

### 使用 S3 控制台
<a name="get-policy-table-console"></a>

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择 **Amazon S3**。

1. 选择**表存储桶**并选择包含表的表存储桶名称，然后从该存储桶中选择您的表。

1. 选择 **Permissions（权限）**选项卡。

## 删除表策略
<a name="table-policy-delete"></a>

要删除附加到表的策略，可以使用 Amazon S3 REST API、AWS SDK 和 AWS CLI。

### 使用 AWS CLI
<a name="table-policy-delete-CLI"></a>

此示例说明如何使用 AWS CLI 删除表策略。要使用该命令，请将*用户输入占位符* 替换为您自己的信息。

```
aws s3tables delete-table-policy \
    --table-ARN arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \
    --namespace your-namespace \
    --name your-table
```

### 使用 S3 控制台
<a name="table-policy-delete-console"></a>

1. 通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择 **Amazon S3**。

1. 选择**表存储桶**并选择包含表的表存储桶名称，然后从该存储桶中选择您的表。

1. 选择 **Permissions（权限）**选项卡。

1. 在**表存储桶策略**下，选择**删除**。

# 将标签与 S3 表结合使用
<a name="table-tagging"></a>

AWS 标签是用于保存有关资源（在本例中为 Amazon S3 表）的元数据的键值对。您可以在创建 S3 表时为其添加标签，也可以管理现有表上的标签。有关标签的一般信息，请参阅[添加标签以进行成本分配或基于属性的访问权限控制（ABAC）](tagging.md)。

**注意**  
在表上使用标签时，除了标准 S3 API 请求费率之外，没有任何其他费用。有关更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

## 将标签与表结合使用的常用方法
<a name="common-ways-to-use-tags-table"></a>

使用 S3 表上的标签来执行以下操作：

1. **成本分配**：在 AWS 账单与成本管理中按表标签跟踪存储成本。有关更多信息，请参阅 [Using tags for cost allocation](https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html#using-tags-for-cost-allocation)。

1. **基于属性的访问权限控制（ABAC）**：根据 S3 表的标签扩展访问权限并授予这些表的访问权限。有关更多信息，请参阅 [Using tags for ABAC](https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html#using-tags-for-abac)。

**注意**  
您可以将相同的标签同时用于成本分配和访问权限控制。

### 适用于 S3 表的 ABAC
<a name="abac-for-tables"></a>

Amazon S3 表支持使用标签进行基于属性的访问权限控制（ABAC）。请在您的 AWS Organizations、AWS Identity and Access Management（IAM）和 S3 表策略中使用基于标签的条件键。Amazon S3 中的 ABAC 支持跨多个 AWS 账户进行授权。

在您的 IAM 策略中，您可以使用 `s3tables:TableBucketTag/tag-key` 条件键或 [AWS 全局条件键](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys) `aws:ResourceTag/key-name`、`aws:RequestTag/key-name` 或 `aws:TagKeys`，根据表的标签控制对 S3 表的访问。

#### aws:ResourceTag/key-name
<a name="table-condition-key-resource-tag"></a>

使用此条件键可将您在策略中指定的标签键值对与附加到资源的键值对进行比较。例如，您可能会要求仅在表具有标签键 `Department` 和值 `Marketing` 时才允许访问该表。

此条件键将应用于使用 Amazon S3 控制台、AWS 命令行界面（CLI）、S3 API 或 AWS SDK 执行的表操作。

有关策略示例，请参阅 [1.1：用于使用标签限制对表的操作的表策略](#example-policy-table-resource-tag)。

有关更多示例策略和信息，请参阅《AWS Identity and Access Management 用户指南》**中的[控制对 AWS 资源的访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-resources)。

**注意**  
对于对表执行的操作，此条件键将对应用于表的标签起作用，而非应用于包含该表的表存储桶的标签。如果您希望 ABAC 策略在您执行表操作时对表存储桶的标签起作用，请改用 `s3tables:TableBucketTag/tag-key`。

#### aws:RequestTag/key-name
<a name="table-condition-key-request-tag"></a>

使用此条件键可将请求中传递的标签键值对与您在策略中指定的标签对进行比较。例如，您可以检查为表添加标签的请求是否包含标签键 `Department` 并具有值 `Accounting`。

在 `TagResource` 或 `CreateTable` API 操作请求中传递标签键时，或者使用 Amazon S3 控制台、AWS 命令行界面（CLI）或 AWS SDK 标记或创建带有标签的表时，此条件键适用。

有关策略示例，请参阅 [1.2：用于创建或修改具有特定标签的表的 IAM 策略](#example-policy-table-request-tag)。

有关更多示例策略和信息，请参阅《AWS Identity and Access Management 用户指南》**中的[在 AWS 请求期间控制访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-requests)。

#### aws:TagKeys
<a name="table-condition-key-tag-keys"></a>

使用此条件键可将请求中的标签键与您在策略中指定的键进行比较，从而定义允许用于访问操作的标签键。例如，要允许在 `CreateTable` 操作期间添加标签，必须创建一个同时允许 `s3tables:TagResource` 和 `s3tables:CreateTable` 操作的策略。然后，您可以使用 `aws:TagKeys` 条件键来强制仅在 `CreateTable` 请求中使用特定标签。

在 `TagResource`、`UntagResource` 或 `CreateTable` API 操作中传递标签键时，或者使用 AWS 命令行界面（CLI）或 AWS SDK 来标记、取消标记或创建带有标签的表时，此条件键适用。

有关策略示例，请参阅 [1.3：用于控制对现有资源上的标签的修改以保持标签治理的 IAM 策略](#example-policy-table-tag-keys)。

有关更多示例策略和更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[根据标签键控制访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-tag-keys)。

#### s3tables:TableBucketTag/tag-key
<a name="table-bucket-tag-condition-key"></a>

使用此条件键可通过标签授予对表存储桶中特定数据的权限。此条件键主要作用于针对所有 S3 表操作分配给表存储桶的标签。即使在您创建带有标签的表时，此条件键也会对应用于包含该表的表存储桶的标签起作用。下面是一些例外情况：
+ 当您创建带有标签的表存储桶时，此条件键会对请求中的标签起作用。

有关策略示例，请参阅 [1.4：使用 s3tables:TableBucketTag 条件键](#example-policy-table-bucket-tag-tables)。

#### 适用于表的示例 ABAC 策略
<a name="example-table-abac-policies"></a>

请参阅以下适用于 Amazon S3 表的示例 ABAC 策略。

**注意**  
如果您拥有基于 IAM 或 S3 表类数据存储服务资源的策略来根据主体标签限制 IAM 用户和 IAM 角色，则必须将相同的主体标签附加到 Lake Formation 用来访问 Amazon S3 数据的 IAM 角色（例如，LakeFormationDataAccessRole），并为该角色授予必要的权限。这是基于标签的访问控制策略与 S3 表类数据存储服务分析集成正常协同工作所必需的。

##### 1.1：用于使用标签限制对表的操作的表策略
<a name="example-policy-table-resource-tag"></a>

在此表策略中，指定的 IAM 主体（用户和角色）仅在表的 `project` 标签的值与主体的 `project` 标签的值匹配时，才能执行 `GetTable` 操作。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowGetTable",
      "Effect": "Allow",
      "Principal": {
        "AWS": "111122223333"
      },
      "Action": "s3tables:GetTable",
      "Resource": "arn:aws::s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket/my_example_tab;e",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/project": "${aws:PrincipalTag/project}"
        }
      }
    }
  ]
}
```

##### 1.2：用于创建或修改具有特定标签的表的 IAM 策略
<a name="example-policy-table-request-tag"></a>

在此 IAM 策略中，具有此策略的用户或角色仅在以下情况下才能创建 S3 表：他们在表创建请求中使用标签键 `project` 和标签值 `Trinity` 为表添加标签。他们还可以在现有 S3 表上添加或修改标签，前提是 `TagResource` 请求包含标签键值对 `project:Trinity`。此策略不授予对表或其对象的读取、写入或删除权限。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CreateTableWithTags",
      "Effect": "Allow",
      "Action": [
        "s3tables:CreateTable",
        "s3tables:TagResource"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/project": [
            "Trinity"
          ]
        }
      }
    }
  ]
}
```

##### 1.3：用于控制对现有资源上的标签的修改以保持标签治理的 IAM 策略
<a name="example-policy-table-tag-keys"></a>

在此 IAM 策略中，IAM 主体（用户或角色）仅在表的 `project` 标签的值与主体的 `project` 标签的值匹配时，才能修改表上的标签。对于这些表，只允许使用在 `aws:TagKeys` 条件键中指定的四个标签 `project`、`environment`、`owner` 和 `cost-center`。这有助于强制执行标签治理，防止未经授权修改标签，并使标签架构跨表保持一致。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EnforceTaggingRulesOnModification",
      "Effect": "Allow",
      "Action": [
        "s3tables:TagResource",
        "s3tables:UntagResource"
      ],
      "Resource": "arn:aws::s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket/my_example_table",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/project": "${aws:PrincipalTag/project}"
        },
        "ForAllValues:StringEquals": {
          "aws:TagKeys": [
            "project",
            "environment",
            "owner",
            "cost-center"
          ]
        }
      }
    }
  ]
}
```

##### 1.4：使用 s3tables:TableBucketTag 条件键
<a name="example-policy-table-bucket-tag-tables"></a>

在此 IAM 策略中，条件语句仅在表存储桶具有标签键 `Environment` 和标签值 `Production` 时，才支持访问表存储桶的数据。`s3tables:TableBucketTag/<tag-key>` 与 `aws:ResourceTag/<tag-key>` 条件键不同，因为除了根据标签控制对表存储桶的访问外，它还支持根据父表存储桶上的标签控制对表的访问。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowAccessToSpecificTables",
      "Effect": "Allow",
      "Action": "*",
      "Resource": "arn:aws::s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket/*",
      "Condition": {
        "StringEquals": {
          "s3tables:TableBucketTag/Environment": "Production"
        }
      }
    }
  ]
}
```

## 管理表的标签
<a name="table-working-with-tags"></a>

您可以使用 Amazon S3 控制台、AWS 命令行界面（CLI）、AWS SDK 或以下 S3 API 为 S3 表添加或管理标签：[TagResource](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_TagResource.html)、[UntagResource](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UntagResource.html) 和 [ListTagsForResource](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListTagsForResource.html)。有关更多信息，请参阅：

**Topics**
+ [将标签与表结合使用的常用方法](#common-ways-to-use-tags-table)
+ [管理表的标签](#table-working-with-tags)
+ [创建带有标签的表](table-create-tag.md)
+ [向表添加标签](table-tag-add.md)
+ [查看表标签](table-tag-view.md)
+ [从表删除标签](table-tag-delete.md)

# 创建带有标签的表
<a name="table-create-tag"></a>

您可以在创建 Amazon S3 表时为其添加标签。在表上使用标签时，除了标准 S3 API 请求费率之外，没有任何其他费用。有关更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。有关为表添加标签的更多信息，请参阅[将标签与 S3 表结合使用](table-tagging.md)。

## 权限
<a name="table-create-tag-permissions"></a>

要创建带有标签的表，您必须具有以下权限：
+ `s3tables:CreateTable`
+ `s3tables:TagResource`

## 错误故障排除
<a name="table-create-tag-troubleshooting"></a>

如果您在尝试创建带有标签的表时遇到错误，可以执行以下操作：
+ 验证您是否具有创建表并向其应用标签所需的[权限](#table-create-tag-permissions)。
+ 检查 IAM 用户策略，了解是否存在任何基于属性的访问权限控制（ABAC）条件。您的策略可能要求您仅使用特定的标签键和值为表添加标签。有关 ABAC 和示例表 ABAC 策略的更多信息，请参阅[适用于 S3 表的 ABAC](https://docs.aws.amazon.com/AmazonS3/latest/userguide/table-tagging.html#abac-for-tables)。

## Steps
<a name="table-create-tag-steps"></a>

您可以使用 AWS Command Line Interface（AWS CLI）、Amazon S3 表类数据存储服务 REST API 和 AWS SDK 来创建应用了标签的表。

## 使用 REST API
<a name="table-create-tag-api"></a>

有关 Amazon S3 表类数据存储服务 REST API 支持创建带有标签的表的相关信息，请参阅《Amazon Simple Storage Service API 参考》**中的以下部分：
+ [CreateTable](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3Buckets_CreateTable.html)

## 使用 AWS CLI
<a name="table-create-tag-cli"></a>

要安装 AWS CLI，请参阅《AWS Command Line Interface 用户指南》**中的[安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

以下 CLI 示例说明如何使用 AWS CLI 创建带有标签的表。要使用该命令，请将*用户输入占位符* 替换为您自己的信息。

创建表时，必须提供配置详细信息。有关更多信息，请参阅 [创建 Amazon S3 表](s3-tables-create.md)。您还必须使用符合表命名约定的名称来命名表。有关更多信息，请参阅 [Amazon S3 表存储桶、表和命名空间命名规则](s3-tables-buckets-naming.md)。

**请求**

```
aws --region us-west-2 \
s3tables create-table \
--endpoint https://ufwae60e2k.execute-api.us-west-2.amazonaws.com/personal/ \
--table-bucket-arn arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket
--tags '{"Department":"Engineering"}' \
--name my_table_abc \
--namespace my_namesapce_123a \
--format ICEBERG
```

# 向表添加标签
<a name="table-tag-add"></a>



您可以向 Amazon S3 表添加标签并修改这些标签。有关为表添加标签的更多信息，请参阅[将标签与 S3 表结合使用](table-tagging.md)。

## 权限
<a name="table-tag-add-permissions"></a>

要向表添加标签，您必须具有以下权限：
+ `s3tables:TagResource`

## 错误故障排除
<a name="table-tag-add-troubleshooting"></a>

如果您在尝试向表添加标签时遇到错误，可以执行以下操作：
+ 验证您是否具有向表添加标签所需的[权限](#table-tag-add-permissions)。
+ 如果您尝试添加以 AWS 保留前缀 `aws:` 开头的标签键，请更改标签键并重试。
+ 标签键是必需的。此外，请确保标签键和标签值不超过最大字符长度，并且不包含受限字符。有关更多信息，请参阅 [添加标签以进行成本分配或基于属性的访问权限控制（ABAC）](tagging.md)。

## Steps
<a name="table-tag-add-steps"></a>

您可以使用 Amazon S3 控制台、AWS 命令行界面（AWS CLI）、Amazon S3 表类数据存储服务 REST API 和 AWS SDK 向表添加标签。

## 使用 S3 控制台
<a name="table-tag-add-console"></a>

使用 Amazon S3 控制台向表添加标签：

1. 登录到 Amazon S3 控制台，网址为：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

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

1. 选择表存储桶名称。

1. 选择表名称。

1. 选择**属性**选项卡。

1. 滚动到**标签**部分，然后选择**添加新标签**。

1. 这会打开**添加标签**页面。最多可以输入 50 个标签键值对。

1. 如果您添加的新标签与现有标签具有相同的键名称，则新标签的值将覆盖现有标签的值。

1. 还可以在此页面上编辑现有标签的值。

1. 添加标签后，选择**保存更改**。

## 使用 REST API
<a name="table-tag-add-api"></a>

有关 Amazon S3 REST API 支持向表添加标签的相关信息，请参阅《Amazon Simple Storage Service API 参考》**中的以下部分：
+ [TagResource](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3Buckets_TagResource.html)

## 使用 AWS CLI
<a name="table-tag-add-cli"></a>

要安装 AWS CLI，请参阅《AWS Command Line Interface 用户指南》**中的[安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

以下 CLI 示例说明如何使用 AWS CLI 向表添加标签。要使用该命令，请将*用户输入占位符* 替换为您自己的信息。

**请求**

```
aws --region us-west-2 \ 
s3tables tag-resource \
--resource-arn arn:aws::s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket/table/my_example_table \
--tags '{"Department":"engineering"}'
```

# 查看表标签
<a name="table-tag-view"></a>

您可以查看或列出应用于 Amazon S3 表的标签。有关标签的更多信息，请参阅[将标签与 S3 表结合使用](table-tagging.md)。

## 权限
<a name="table-tag-view-permissions"></a>

要查看应用于表的标签，您必须具有以下权限：
+ `s3tables:ListTagsForResource`

## 错误故障排除
<a name="table-tag-view-troubleshooting"></a>

如果您在尝试列出或查看表的标签时遇到错误，可以执行以下操作：
+ 验证您是否具有查看或列出表的标签所需的[权限](#table-tag-view-permissions)。

## Steps
<a name="table-tag-view-steps"></a>

您可以使用 Amazon S3 控制台、AWS Command Line Interface（AWS CLI）、Amazon S3 REST API 和 AWS SDK 来查看应用于表的标签。

## 使用 S3 控制台
<a name="table-tag-view-console"></a>

使用 Amazon S3 控制台查看应用于表的标签：

1. 登录到 Amazon S3 控制台，网址为：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

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

1. 选择表存储桶名称。

1. 在表存储桶中选择表名称。

1. 选择**属性**选项卡。

1. 滚动至**标签**部分，以查看应用于表的所有标签。

1. 默认情况下，**标签**部分显示**用户定义的标签**。您可以选择 **AWS 生成的标签**选项卡来查看 AWS 服务应用到表的标签。

## 使用 REST API
<a name="table-tag-view-api"></a>

有关 Amazon S3 REST API 支持查看应用于表的标签的相关信息，请参阅《Amazon Simple Storage Service API 参考》**中的以下部分：
+ [ListTagsforResource](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3Buckets_ListTagsForResource.html)

## 使用 AWS CLI
<a name="table-tag-view-cli"></a>

要安装 AWS CLI，请参阅《AWS Command Line Interface 用户指南》**中的[安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

以下 CLI 示例说明如何查看应用于表的标签。要使用该命令，请将*用户输入占位符* 替换为您自己的信息。

**请求**

```
aws --region us-west-2 \ 
s3tables list-tags-for-resource \
--resource-arn arn:aws::s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket/table/my_example_table
```

# 从表删除标签
<a name="table-tag-delete"></a>

您可以从 Amazon S3 表删除标签。有关为表添加标签的更多信息，请参阅[将标签与 S3 表结合使用](table-tagging.md)。

**注意**  
如果您删除某个标签，但后来得知该标签用于跟踪成本或用于访问控制，则可以将该标签重新添加到表。

## 权限
<a name="table-tag-delete-permissions"></a>

要从表删除标签，您必须具有以下权限：
+ `s3tables:UntagResource`

## 错误故障排除
<a name="table-tag-delete-troubleshooting"></a>

如果在尝试从表删除标签时遇到错误，可以执行以下操作：
+ 验证您是否具有从表删除标签所需的[权限](#table-tag-delete-permissions)。

## Steps
<a name="table-tag-delete-steps"></a>

您可以使用 Amazon S3 控制台、AWS Command Line Interface（AWS CLI）、Amazon S3 表类数据存储服务 REST API 和 AWS SDK 从表删除标签。

## 使用 S3 控制台
<a name="table-tag-delete-console"></a>

使用 Amazon S3 控制台从表删除标签：

1. 登录到 Amazon S3 控制台，网址为：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

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

1. 选择表存储桶名称。

1. 选择表名称。

1. 选择**属性**选项卡。

1. 滚动到**标签**部分，然后选中要删除的一个或多个标签旁边的复选框。

1. 选择**删除**。

1. 将显示**删除用户定义的标签**弹出窗口，要求您确认删除所选的一个或多个标签。

1. 选择 **Delete (删除)** 以确认。

## 使用 REST API
<a name="table-tag-delete-api"></a>

有关 Amazon S3 REST API 支持从表删除标签的相关信息，请参阅《Amazon Simple Storage Service API 参考》**中的以下部分：
+ [UnTagResource](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3Buckets_UntagResource.html)

## 使用 AWS CLI
<a name="table-tag-delete-cli"></a>

要安装 AWS CLI，请参阅《AWS Command Line Interface 用户指南》**中的[安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

以下 CLI 示例说明如何使用 AWS CLI 从表删除标签。要使用该命令，请将*用户输入占位符* 替换为您自己的信息。

**请求**

```
aws --region us-west-2 \ 
s3tables untag-resource \
--resource-arn arn:aws::s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket/table/my_example_table \
--tag-keys '["department"]'
```