开始使用 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

开始使用

本教程将指导您完成使用 Amazon Athena 来查询数据。您将根据 Amazon Simple Storage Service 中存储的示例数据创建表、查询表,并检查查询的结果。

本教程使用的是实时资源,因此,您需要为您运行的查询付费。您无需为本教程使用的位置中的示例数据付费,但如果您将自己的数据文件上载到 Amazon S3,则会收取费用。

先决条件

  • 如果您尚未完成此操作,注册 Amazon Web Services 账户

  • 使用与您在 Athena 中使用的相同 Amazon Web Services 区域(例如,美国西部(俄勒冈州))和账户,按照相应的步骤在 Amazon S3 中创建存储桶以保存您的 Athena 查询结果。您需要将此存储桶配置为查询输出位置。

步骤 1:创建数据库

首先,您需要在 Athena 中创建一个数据库。

创建 Athena 数据库
  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. 如果这是您首次在目前的 Amazon Web Services 区域 中访问 Athena 控制台,选择 Explore the query editor(浏览查询编辑器)以打开查询编辑器。否则,Athena 会在查询编辑器中打开。

  3. 选择 Edit Settings(编辑设置)以在 Amazon S3 中设置查询结果位置。

    
                        选择编辑设置。
  4. 对于 Manage settings(管理设置),执行以下操作之一:

    • Location of query result(查询结果位置)文本框中,输入您在 Amazon S3 中为查询结果创建的存储桶路径。在路径前添加前缀 s3://

    • 选择 Browse S3(浏览 S3),选择您为当前区域创建的 Amazon S3 存储桶,然后选择 Choose(选择)。

    
                        指定 Amazon S3 中的位置用于接收来自 Athena 的查询结果。
  5. 选择保存

  6. 选择 Editor(编辑器)以切换到查询编辑器。

    
                        选择 Editor(编辑器)。
  7. 在导航窗格的右侧,您可以使用 Athena 查询编辑器输入和运行查询和语句。

    
                        Athena 控制台中的查询编辑器。
  8. 要创建一个名为 mydatabase 的数据库,请输入以下 CREATE DATABASE 语句。

    CREATE DATABASE mydatabase
  9. 选择 Run(运行)或者按 Ctrl+ENTER

  10. 在左侧的 Database(数据库)列表中,选择 mydatabase 使其成为当前数据库。

    
                        选择您创建的数据库。

步骤 2:创建表

现在,您有了数据库,可以为其创建一个 Athena 表。您创建的表将基于该位置的示例 Amazon CloudFront 日志数据s3://athena-examples-myregion/cloudfront/plaintext/,其中 myregion 是您的当前Amazon Web Services 区域位置。

示例日志数据采用制表符分隔值(TSV)格式,这意味着将制表符用作分隔符来分隔字段。数据类似于以下示例。为了便于阅读,摘录中的制表符已转换为空格,并缩短了最后一个字段。

2014-07-05 20:00:09 DFW3 4260 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-1.jpeg 200 - Mozilla/5.0[...] 2014-07-05 20:00:09 DFW3 4252 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-2.jpeg 200 - Mozilla/5.0[...] 2014-07-05 20:00:10 AMS1 4261 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-3.jpeg 200 - Mozilla/5.0[...]

要让 Athena 读取这些数据,你可以创建一个如下所示的CREATE EXTERNAL TABLE简单语句。创建表的语句定义映射到数据的列,指定如何分隔数据,并指定包含示例数据的 Amazon S3 位置。请注意,由于 Athena 希望扫描文件夹中的所有文件,因此该子句指定了 Amazon S3 文件夹的位置,而不是特定的文件。LOCATION

暂时不要使用此示例,因为它有一个重要的限制,稍后将对此进行解释。

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, ClientInfo STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' LOCATION 's3://athena-examples-my-region/cloudfront/plaintext/';

此示例创建了一个名为 cloudfront_logs 的表,并为每个字段指定名称和数据类型。这些字段将成为表中的列。因为date保留字,所以使用反引号 (`) 字符对其进行转义。 ROW FORMAT DELIMITED意味着 Athena 将使用LazySimpleSerDe名为的默认库来实际解析数据。该示例还指定字段以制表符分隔(FIELDS TERMINATED BY '\t'),并且文件中的每条记录以换行符(LINES TERMINATED BY '\n)结束。最后,LOCATION 子句指定要读取的实际数据所在的 Amazon S3 中的路径。

如果您有自己的制表符或逗号分隔的数据,则可以使用类似刚才示例的CREATE TABLE语句,前提是您的字段不包含嵌套信息。但是,如果您有这样的列ClientInfo,其中包含使用不同分隔符的嵌套信息,则需要采用不同的方法。

从现场提取数据 ClientInfo

查看示例数据,以下是最后一个字段的完整示例ClientInfo

Mozilla/5.0%20(Android;%20U;%20Windows%20NT%205.1;%20en-US;%20rv:1.9.0.9)%20Gecko/2009040821%20IE/3.0.9

正如您所看到的,此字段是多值的。由于刚才呈现的示例CREATE TABLE语句将制表符指定为字段分隔符,因此它无法将ClientInfo字段内的各个组件拆分为单独的列。因此,需要一个新的CREATE TABLE语句。

要根据ClientInfo字段内的值创建列,可以使用包含正则表达式组的正则表达式 (regex)。您指定的正则表达式组将成为单独的表列。要在您的 CREATE TABLE 语句中使用正则表达式,请使用类似下面的语法。此语法指示 Athena 使用 Regex SerDe 库和您指定的正则表达式。

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ("input.regex" = "regular_expression")

正则表达式可用于根据复杂的 CSV 或 TSV 数据创建表,但可能难以编写和维护。幸运的是,还有其他库可以用于 JSON、Parquet 和 ORC 等格式。有关更多信息,请参阅 支持的 SerDes 和数据格式

现在您已准备就绪,可在 Athena 查询编辑器中创建表。已为您准备好 CREATE TABLE 语句和正则表达式。

在 Athena 中创建表
  1. 在导航窗格中,对于 Database(数据库),请确保选择了 mydatabase

  2. 要在查询编辑器中扩大空间,您可以选择箭头图标来折叠导航窗格。

    
                        选择箭头可折叠导航窗格。
  3. 要创建新查询的选项卡,请在查询编辑器中选择加号 (+)。您最多可以同时打开十个查询选项卡。

    
                        选择加号图标以创建新查询。
  4. 要关闭一个或多个查询选项卡,请选择加号旁边的箭头。要一次关闭所有选项卡,请选择箭头,然后选择 Close all tabs(关闭所有选项卡)。

    
                        选择箭头图标可关闭一个或多个查询选项卡。
  5. 在查询窗格中,输入以下 CREATE EXTERNAL TABLE 语句。正则表达式将操作系统、浏览器和浏览器版本信息从日志数据中的 ClientInfo 字段划分出来。

    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/';
  6. LOCATION 语句中,将 myregion 替换为您当前使用的 Amazon Web Services 区域(例如,us-west-1)。

  7. 选择运行

    cloudfront_logs 已创建,并显示在 mydatabase 数据库的 Tables(表)列表中。

步骤 3:查询数据

现在,您已根据 Amazon S3 中的数据在 Athena 中创建了 cloudfront_logs 表,您可以针对该表运行 SQL 查询,并在 Athena 中查看结果。有关在 Athena 中使用 SQL 的更多信息,请参阅 Athena 的 SQL 参考

运行查询
  1. 选择加号(+)以打开新的查询选项卡,然后在查询窗格中输入以下 SQL 语句。

    SELECT os, COUNT(*) count FROM cloudfront_logs WHERE date BETWEEN date '2014-07-05' AND date '2014-08-05' GROUP BY os
  2. 选择运行

    结果与以下内容类似:

    
                        在 Athena 控制台中查看查询结果。
  3. 要将查询结果保存到 .csv 文件,选择 Download results(下载结果)。

    
                        以 CSV 格式下载查询结果。
  4. 要查看或运行之前的查询,选择 Recent queries(最近的查询)选项卡。

    
                        选择 Recent queries(最近的查询)以查看以前的查询。
  5. 要从 Recent queries(最近的查询)选项卡下载以前查询的结果,请选择查询,然后选择 Download results(下载结果)。查询保留 45 天。

    
                        在 Athena 控制台中查看和下载最近的查询。
  6. 要将一个或多个最近的 SQL 查询字符串下载到 CSV 文件,请选择 Download CSV(下载 CSV)。

    
                        将最近的查询字符串下载到 CSV 文件。

    有关更多信息,请参阅 使用查询结果、最近查询和输出文件

保存查询

您可以使用某个名称来保存您在查询编辑器中创建或编辑的查询。Athena 会将这些查询存储在 Saved queries(已保存的查询)选项卡中。您可以使用 Saved queries(已保存的查询)选项卡来回调、运行、重命名或删除已保存的查询。有关更多信息,请参阅 使用已保存的查询

键盘快捷键和提前输入建议

Athena 查询编辑器提供了许多键盘快捷键,可用于运行查询、格式化查询、行操作以及查找和替换等操作。有关更多信息和快捷键完整列表,请参阅 Amazon 大数据博客中的通过在 Amazon Athena 查询编辑器中使用键盘快捷键提高工作效率

Athena 查询编辑器支持提前输入代码建议,以实现更快的查询创作体验。为了帮助您以更高的准确性和更高的效率编写 SQL 查询,该编辑器提供了以下功能:

  • 在您输入时,将实时显示关键字、局部变量、片段和目录项的建议。

  • 当您在数据库名称或表名称后面输入一个点时,该编辑器会显示一系列的表或列,方便您从中进行选择。

  • 当您将光标悬停在片段建议上时,摘要会显示该片段的语法和用法的简要概述。

  • 为了提高代码的可读性,还更新了关键字及其突出显示规则,使其与 Trino 和 Hive 的最新语法保持一致。

该功能已默认启用。要启用或禁用该功能,使用该查询编辑器窗口右下角的代码编辑器首选项(齿轮图标)。

连接到其他数据来源

本教程使用 Amazon S3 中 CSV 格式的数据来源。有关将 Athena 与 Amazon Glue 结合使用的信息,请参阅 使用 Amazon Glue 连接到 Simple Storage Service(Amazon S3)中的数据来源。您可以使用 ODBC 和 JDBC 驱动程序、外部 Hive 元存储和 Athena 数据来源连接器,将 Athena 连接到各种数据来源。有关更多信息,请参阅 连接到数据源