在 Athena 中创建表 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Athena 中创建表

您可以在 Athena 控制台中、使用 JDBC 或 ODBC 驱动程序,或使用 Athena添加表向导

当您在 Athena 中创建新表架构时,Athena 会将架构存储在数据目录中并在您运行查询时使用它。

Athena 使用一种称为读取时的架构,这意味着,架构会在您运行查询时投影到您的数据上。这样就无需加载或转换数据。

Athena 不修改您在 Amazon S3 中存储的数据。

Athena 使用 Apache Hive 定义表和创建在本质上为表的逻辑命名空间的数据库。

当您在 Athena 中创建数据库和表时,您只需描述架构和表数据在 Amazon S3 中的位置,以便进行读取时查询。因此,数据库和表与传统关系数据库系统的含义稍有不同,因为数据不与数据库和表的架构定义一起存储。

当您查询时,您会使用标准 SQL 来查询表,此时将读取数据。您可以使用Apache 配置单元文档,但以下提供了专门针对 Athena 的指导。

最大查询字符串长度为 256 KB。

Hive 通过使用串行器/解串器 (SerDe) 库来支持多种数据格式。您还可以使用正则表达式来定义复杂架构。有关受支持的 SerDe 库的列表,请参阅支持的 SerDes 和数据格式

注意事项和限制

以下是针对 Athena 中的表的一些重要限制和注意事项。

针对 Athena 中的表和 Amazon S3 中的数据的要求

当您创建表时,您需要使用LOCATION子句。请考虑以下事项:

  • Athena 只能在版本化的 Amazon S3 存储桶中查询最新版本的数据,并且无法查询以前版本的数据。

  • 您必须拥有合适的权限才能使用 Amazon S3 位置的数据。有关更多信息,请参阅对 Amazon S3 的访问权限

  • Athena 支持查询使用多个存储类存储在由LOCATION子句。例如,您可以在 Amazon S3 中查询存储在不同存储类中的对象中的数据(标准、标准 IA 和智能分层)。

  • Athena 支持申请方付款存储桶。有关如何针对包含您打算在 Athena 中查询的源数据的存储桶启用申请方付款,请参阅创建工作组

  • Athena 不支持查询S3 Glacier或 S3 Glacier Deep Archive 存储类别。将忽略 S3 Glacier 存储类中的对象。查询的 S3 Glacier Deep Archive 存储类中的对象将导致错误消息操作对于对象的存储类无效。Athena 即使在还原存储类对象后,Athena 也不再可读取或查询移到或转换为其中一个类中的数据。要使您希望查询的还原对象可供 Athena 读取,请将还原的对象复制回 Amazon S3 中以更改其存储类别。

    有关存储类别的信息,请参阅存储类在 Amazon S3 中更改对象的存储类别转换为 GLACIER 存储类别(对象存档), 和申请方付款存储桶中的Amazon Simple Storage Service 开发人员指南

  • 如果您针对包含大量对象且数据未分区的 Amazon S3 存储桶发出查询,则此类查询可能影响 Amazon S3 中的 Get 请求速率限制并导致 Amazon S3 异常。为防止错误发生,请将数据分区。另外,考虑调整的 Amazon S3 请求速率。有关更多信息,请参阅请求速率和性能注意事项

支持的函数

Athena 查询中支持的函数是在 Presto 中可找到的函数。有关更多信息,请参阅 Presto 版本的文档0.1720.217,这对应于 Athena 引擎版本 1 和 2。

不支持事务数据转换

Athena 不支持对表数据执行基于事务的操作(例如,在 Hive 或 Presto 中找到的操作)。有关不支持的关键字的完整列表,请参阅不支持的 DDL

更改表状态的操作是 ACID

当您创建、更新或删除表时,这些操作保证与 ACID 兼容。例如,如果多个用户或客户端同时尝试创建或更改现有的表,则只有一个会成功。

所有表都是 EXTERNAL

如果您使用CREATE TABLE不含EXTERNAL关键字后,Athena 会发出错误;仅包含EXTERNAL关键字。我们建议您始终使用 EXTERNAL 关键字。当您在 Athena 中删除表时,仅删除表元数据;数据将保留在 Amazon S3 中。

使用创建表Amazon Glue或 Athena 控制台

您可以在 Athena 中使用Amazon Glue、添加表向导或在 Athena 查询编辑器中运行 DDL 语句。

使用Amazon Glue Data Catalog

  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. 在查询编辑器中的 Database (数据库) 下,选择 Create table (创建表),然后选择 from Amazon Glue crawler (从 Amazon Glue 爬网程序)

  3. Go to Amazon Glue to set up a crawler (转到 Amazon Glue 以设置爬网程序) 对话框中,选择 Continue (继续)

  4. 按照 Amazon Glue 控制台中的步骤添加爬网程序。

    有关更多信息,请参阅 。使用Amazon Glue爬网程序

使用 Athena 添加表向导创建表

  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. 在查询编辑器中显示的数据库下,选择 Create table (创建表),然后选择 from S3 bucket data (从 S3 存储桶数据)

  3. Add table (添加表) 向导中,按照步骤操作以创建表。

    
                            按中的步骤操作。添加表向导使用 Amazon S3 数据在 Athena 中创建表。

使用 Hive DDL 创建表

  1. Database (数据库) 菜单,选择要为其创建表的数据库。如果您未在 CREATE TABLE 语句中指定数据库,则将在查询编辑器中当前选定的数据库内创建表。

    
                            在 Athena 查询编辑器中选择数据库。
  2. 输入类似以下内容的语句,然后选择 Run Query (运行查询),或者按 Ctrl+ENTER

    CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs ( `Date` Date, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, OS String, Browser String, BrowserVersion String ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$" ) LOCATION 's3://athena-examples-MyRegion/cloudfront/plaintext/';

    创建表后,您可以对数据运行查询。

显示表信息

在 Athena 中创建表后,您可以在 Athena 控制台中选择表名旁边的垂直三个点,以显示有关该表的信息并对其进行管理。


                选择表名旁边的垂直三个点。
  • 预览表— 通过运行SELECT * FROM "database_name"."table_name" LIMIT 10语 Athena。

  • 显示属性— 在第二个选项卡上显示表属性,如果表具有分区,则显示分区信息。

    • 表属性— 显示表名称、数据库名称、创建时间以及表是否已加密数据。

    • 分区— 列出表分区的名称及其对应的数据类型。仅当表具有分区时,才会显示此选项卡。

  • 删除表— 显示一个确认对话框,询问是否要删除表。如果您同意,请运行DROP TABLE table_name语 Athena。

  • 加载分区— 运行MSCK REPAIR TABLE table_name语 Athena。仅当表包含分区时,此选项才可用。

  • 生成创建表 DDL— 生成 DDL 语句,您可以使用该语句通过运行SHOW CREATE TABLE table_name语 Athena。