

# 表命名空间
<a name="s3-tables-namespace"></a>

在 Amazon S3 表存储桶中创建表时，可以将它们组织成称为*命名空间*的逻辑分组。与 S3 表和表存储桶不同，命名空间不是资源。命名空间是有助于您以可扩展的方式组织和管理表的构造。例如，公司中属于人力资源部门的所有表都可以分组到一个公共命名空间值 `hr` 下。

要控制对特定命名空间的访问权限，可以使用表存储桶资源策略。有关更多信息，请参阅 [S3 表类数据存储服务的基于资源的策略](s3-tables-resource-based-policies.md)。

以下规则适用于表命名空间：
+ 每个命名空间在表存储桶内都必须是唯一的。
+ 您可以为每个表存储桶创建最多 10000 个命名空间。
+ 每个表名称在命名空间内都必须是唯一的。
+ 每个表只能有一个级别的命名空间。命名空间不能嵌套。
+ 每个表都属于单个命名空间。
+ 您可以在命名空间之间移动表。

表命名空间在各种 AWS 服务和查询引擎中称为数据库。下表将 S3 表类数据存储服务命名空间使用的术语映射到一些常见的引擎和服务。


| **服务或引擎** | **术语**： | 
| --- | --- | 
| AWS Lake Formation | 数据库 | 
| AWS Glue Data Catalog | 数据库 | 
| Athena | 数据库 | 
| Spark | 命名空间 | 

**Topics**
+ [创建命名空间](s3-tables-namespace-create.md)
+ [删除命名空间](s3-tables-namespace-delete.md)

# 创建命名空间
<a name="s3-tables-namespace-create"></a>

表命名空间是在 Amazon S3 表存储桶中对表进行分组的逻辑构造。每个表都属于单个命名空间。在表存储桶中创建表之前，必须创建一个命名空间来对表进行分组。可以使用 Amazon S3 控制台、AWS Command Line Interface（AWS CLI）、Amazon S3 REST API、AWS SDK 或集成查询引擎创建命名空间。

**命名空间名称**

以下命名规则适用于命名空间：
+ 名称长度必须介于 1 到 255 个字符之间。
+ 名称只能由小写字母、数字和下划线 (`_`) 组成。命名空间名称的开头或结尾不支持使用下划线。
+ 名称必须以字母或数字开头和结尾。
+ 名称不得包含连字符 (`-`) 或句点 (`.`)。
+ 命名空间在表存储桶中必须是唯一的。
+ 命名空间名称不得以保留前缀 `aws` 开头。

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

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

以下过程通过**使用 Athena 创建表**工作流程在 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. 在**命名空间名称**字段中输入名称。命名空间名称必须为 1 到 255 个字符，并且在表存储桶中是唯一的。有效字符为 a–z、0–9 和下划线 (`_`)。命名空间名称的开头或结尾不支持使用下划线。

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

1. 如果您还想创建表，请选择**使用 Athena 创建表**。有关使用 Athena 创建表的更多信息，请参阅[使用 S3 控制台和 Amazon Athena](s3-tables-create.md#create-table-console)。如果您不想立即创建表，请选择**取消**。

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

此示例说明如何使用 AWS CLI 创建表命名空间。要使用此示例，请将 `user input placeholders` 替换为您自己的信息。

```
aws s3tables create-namespace \
    --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket1 \ 
    --namespace example_namespace
```

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

您可以在连接到 Amazon S3 表存储桶的 Apache Spark 会话中创建命名空间。

此示例向您展示如何在与 S3 表类数据存储服务集成的查询引擎中使用 `CREATE` 语句来创建表。要使用此示例，请将*用户输入占位符* 替换为您自己的信息。

```
spark.sql("CREATE NAMESPACE IF NOT EXISTS s3tablesbucket.my_namespace")
```

# 删除命名空间
<a name="s3-tables-namespace-delete"></a>

在从 Amazon S3 表存储桶中删除表命名空间之前，必须删除该命名空间中的所有表，或者将它们移到另一个命名空间下。可以使用 Amazon S3 REST API、AWS SDK、AWS Command Line Interface（AWS CLI）或集成查询引擎来删除命名空间。

有关删除命名空间所需的权限的信息，请参阅《Amazon Simple Storage Service API Reference》**中的 [https://docs.aws.amazon.com//AmazonS3/latest/API/API_s3TableBuckets_DeleteNamespace.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_s3TableBuckets_DeleteNamespace.html)。

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

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

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