

# 命名数据库、表和列
<a name="tables-databases-columns-names"></a>

使用这些准则来命名 Athena 中的数据库、表和列。

## 数据库名称、表名和列名的要求
<a name="tables-databases-columns-names-requirements"></a>
+ AWS Glue 中数据库名称、表名和列名的可接受字符必须是 UTF-8 字符串，并且应使用小写。请注意，当 Athena 创建数据库、表或列时，它会自动将 DDL 查询中的任何大写名称改为小写。字符串长度不得少于 1 个字节，也不得超过 255 个字节。
+ 目前，可以在名称的开头使用前导空格。因为这些前导空格可能很难检测到，并且在创建后可能会导致可用性问题，所以请避免无意中创建带有前导空格的对象名称。
+ 如果您使用 [AWS::Glue::Database](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-database.html) CloudFormation 模板创建 AWS Glue 数据库而未指定数据库名称，AWS Glue 会自动以与 Athena 不兼容的 *resource\$1name–random\$1string* 格式生成数据库名称。
+ 您可以使用 AWS Glue Catalog Manager 重命名列，但不重命名表名称或数据库名称。要解决此限制，必须使用旧数据库的定义来创建具有新名称的数据库。然后，使用旧数据库中的表定义在新数据库中重新创建表。为此，您可以使用 AWS CLI 或 AWS Glue 软件开发工具包。要查看步骤，请参阅[使用 AWS CLI 重新创建 AWS Glue 数据库及其表](glue-recreate-db-and-tables-cli.md)。

## Athena 中的表名称和表列名称使用小写
<a name="table-names-and-table-column-names-in-ate-must-be-lowercase"></a>

Athena 在 DDL 和 DML 查询中接受混合大小写，但在执行查询时使用小写名称。因此，请避免使用混合大小写表或列名称，并且不要单独依赖 Athena 中的大小写来区分这些名称。例如，如果您使用 DDL 语句创建名为 `Castle` 的列，则创建的列将被转换成小写，`castle`。如果您随后将 DML 查询中的列名指定为 `Castle` 或者 `CASTLE`，Athena 会将名称转换为小写以为您运行查询，但使用您在查询中选择的大小写显示列标题。

数据库、表和列名的长度必须小于或等于 255 个字符。

## 以下划线开头的名称
<a name="names-that-begin-with-an-underscore"></a>

创建表时，使用反引号将以下划线开头的表、视图或列名称括起来。例如：

```
CREATE EXTERNAL TABLE IF NOT EXISTS `_myunderscoretable`(
  `_id` string, `_index` string)
LOCATION 's3://amzn-s3-demo-bucket/'
```

## 以数字开头的表、视图或列名称
<a name="table-names-that-include-numbers"></a>

在运行 `SELECT`、`CTAS` 或 `VIEW` 查询中，用引号将以数字开头的表、视图或列名称等标识符括起来。例如：

```
CREATE OR REPLACE VIEW "123view" AS
SELECT "123columnone", "123columntwo"
FROM "234table"
```

## 列名和复杂类型
<a name="tables-databases-columns-names-complex-types"></a>

对于复杂类型，只有字母数字字符、下划线 (`_`) 和句号 (`.`) 允许在列名称中使用。要为包含受限字符的键创建表和映射，可以使用自定义 DDL 语句。有关更多信息，请参阅 *AWS 大数据博客*文章：[使用 JSONSerDe 在 Amazon Athena 中通过嵌套 JSON 和映射来创建表](https://aws.amazon.com/blogs/big-data/create-tables-in-amazon-athena-from-nested-json-and-mappings-using-jsonserde/)。

## 保留字
<a name="tables-databases-columns-names-reserved-words"></a>

必须对 Athena 中的某些预留字进行转义。要对 DDL 语句中的保留关键字进行转义，请使用反引号 (`) 将其括起来。要对 SQL `SELECT` 语句以及[视图](views.md)的查询中的保留关键字进行转义，请使用双引号 ('') 将其括起来。

有关更多信息，请参阅 [转义查询中的保留关键字](reserved-words.md)。

## 其他资源
<a name="tables-databases-columns-names-additional-resources"></a>

有关完整的数据库和表创建语法，请参阅以下页面。
+ [CREATE DATABASE](create-database.md)
+ [CREATE TABLE](create-table.md)

有关 AWS Glue 中数据库和表的更多信息，请参阅《AWS Glue Developer Guide》**中的 [Databases](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-databases.html) 和 [Tables](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html)。