表、数据库和列的名称 - Amazon Athena

表、数据库和列的名称

使用这些技巧在 Athena 中命名数据库对象。

数据库名称、表名和列名的要求

  • AWS Glue 中可接受的数据库名称、表名以及列名的字符必须是 UTF-8 字符串。字符串长度不得少于 1 个字节,也不得超过 255 个字节。超过此限制会生成错误,例如“名称”处的值无法满足约束条件:成员的长度必须小于或等于 255 个字符。其中可以使用的字符包括空格,并由以下单行字符串模式定义字符:

    [\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]*
  • 目前,AWS Glue 正则表达式模式允许在名称的开头添加前导空格。但这些前导空格可能难以检测且创建后可能导致可用性问题,所以请避免创建带有前导空格的对象名称。

  • 如果您使用 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://DOC-EXAMPLE-BUCKET/'

以数字开头的表、视图或列名称

在运行 SELECTCTASVIEW 查询中,用引号将以数字开头的表、视图或列名称等标识符括起来。例如:

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》中的 DatabasesTables