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

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

在 Athena 中创建表

您可以在 Athena 控制台中、使用 JDBC 或 ODBC 驱动程序,或使用 Athena Add table (添加表) 向导运行 DDL 语句。

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

Athena 使用称为 框架上读取,这意味着在运行查询时,框架会计入您的数据。这样就无需加载或转换数据。

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

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

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

当您查询时,您会使用标准 SQL 来查询表,此时将读取数据。您可以使用 Apache Hive 文档查找有关如何创建数据库和表的指导,但下面提供专门针对 Athena 的指导。

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

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

注意事项和限制

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

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

创建表时,请使用 LOCATION 子句指定底层数据在 Amazon S3 存储桶中的位置。请考虑以下事项:

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

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

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

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

  • Athena 不支持查询 GLACIER 存储类中的数据。它会忽略基于 Amazon S3 生命周期策略转换为 GLACIER 存储类的对象。

    有关详细信息,请参阅 存储类别更改AmazonS3中对象的存储类别过渡至冰川存储类(对象归档) ,和 请求者支付桶Amazon Simple Storage Service 开发人员指南.

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

支持的函数

Athena 查询中支持的函数是在 Presto 中可找到的函数。有关更多信息,请参阅 Presto 文档中的 Presto 0.172 函数和运算符

不支持事务数据转换

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

更改表状态的操作是 ACID

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

所有表都是 EXTERNAL

如果您使用不带 EXTERNAL 关键字的 CREATE TABLE,则 Athena 将发出错误;只能创建具有 EXTERNAL 关键字的表。我们建议您始终使用 EXTERNAL 关键字。当您在 Athena 中删除表时,仅删除表元数据;数据将保留在 Amazon S3 中。

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

您可以使用 AWS Glue、添加表向导或在 Athena 查询编辑器中运行 DDL 语句,从而在 Athena 中创建表。

使用 AWS Glue 数据目录创建表

  1. https://console.amazonaws.cn/athena/ 打开 Athena 控制台。

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

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

    
                            选择 继续 转到 AWS Glue 控制台并设置爬网。
  4. 按照 AWS Glue 控制台中的步骤添加爬网程序。

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

使用 Athena 添加表向导创建表

  1. https://console.amazonaws.cn/athena/ 打开 Athena 控制台。

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

    
                            选择从 S3 存储桶数据创建表。
  3. Add table (添加表) 向导中,按照步骤操作以创建表。

    
                            按照 添加表格 向导以创建表格 Athena 从起 Amazon S3 数据。

使用 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/';

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