命名数据库、表和列
使用这些准则来命名 Athena 中的数据库、表和列。
数据库名称、表名和列名的要求
-
AWS Glue 中数据库名称、表名和列名的可接受字符必须是 UTF-8 字符串,并且应使用小写。请注意,当 Athena 创建数据库、表或列时,它会自动将 DDL 查询中的任何大写名称改为小写。字符串长度不得少于 1 个字节,也不得超过 255 个字节。
-
目前,可以在名称的开头使用前导空格。因为这些前导空格可能很难检测到,并且在创建后可能会导致可用性问题,所以请避免无意中创建带有前导空格的对象名称。
-
如果您使用 AWS::Glue::Database AWS CloudFormation 模板创建 AWS Glue 数据库而未指定数据库名称,AWS Glue 会自动以与 Athena 不兼容的
resource_name–random_string
格式生成数据库名称。 -
您可以使用 AWS Glue Catalog Manager 重命名列,但不重命名表名称或数据库名称。要解决此限制,必须使用旧数据库的定义来创建具有新名称的数据库。然后,使用旧数据库中的表定义在新数据库中重新创建表。为此,您可以使用 AWS CLI 或 AWS Glue 软件开发工具包。要查看步骤,请参阅 使用 AWS CLI 重新创建 AWS Glue 数据库及其表。
Athena 中的表名称和表列名称使用小写
Athena 在 DDL 和 DML 查询中接受混合大小写,但在执行查询时使用小写名称。因此,请避免使用混合大小写表或列名称,并且不要单独依赖 Athena 中的大小写来区分这些名称。例如,如果您使用 DDL 语句创建名为 Castle
的列,则创建的列将被转换成小写,castle
。如果您随后将 DML 查询中的列名指定为 Castle
或者 CASTLE
,Athena 会将名称转换为小写以为您运行查询,但使用您在查询中选择的大小写显示列标题。
数据库、表和列名的长度必须小于或等于 255 个字符。
以下划线开头的名称
创建表时,使用反引号将以下划线开头的表、视图或列名称括起来。例如:
CREATE EXTERNAL TABLE IF NOT EXISTS `_myunderscoretable`( `_id` string, `_index` string) LOCATION 's3://amzn-s3-demo-bucket/'
以数字开头的表、视图或列名称
在运行 SELECT
、CTAS
或 VIEW
查询中,用引号将以数字开头的表、视图或列名称等标识符括起来。例如:
CREATE OR REPLACE VIEW "123view" AS SELECT "123columnone", "123columntwo" FROM "234table"
列名和复杂类型
对于复杂类型,只有字母数字字符、下划线 (_
) 和句号 (.
) 允许在列名称中使用。要为包含受限字符的键创建表和映射,可以使用自定义 DDL 语句。有关更多信息,请参阅 AWS 大数据博客文章:使用 JSONSerDe 在 Amazon Athena 中通过嵌套 JSON 和映射来创建表
保留字
必须对 Athena 中的某些预留字进行转义。要对 DDL 语句中的保留关键字进行转义,请使用反引号 (`) 将其括起来。要对 SQL SELECT
语句以及视图的查询中的保留关键字进行转义,请使用双引号 ('') 将其括起来。
有关更多信息,请参阅 转义查询中的保留关键字。
其他资源
有关完整的数据库和表创建语法,请参阅以下页面。
有关 AWS Glue 中数据库和表的更多信息,请参阅《AWS Glue Developer Guide》中的 Databases 和 Tables。