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

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

开始使用

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

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

先决条件

步骤 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 表。您创建的表格将基于亚马逊示例CloudFront在该位置记录数据s3://athena-examples-myregion/cloudfront/plaintext/,其中我所在的地区是你现在的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 位置。

注意

对于 LOCATION 子句,指定 Amazon S3 文件夹位置,而不是特定文件。Athena 会扫描您指定的文件夹中的所有文件。

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 的完整示例:

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 语句将制表符指定为字段分隔符,则此特定字段中的单独组件不能分解为单独的列。要根据字段内的值创建列,可以使用正则表达式(正则表达式)包含正则表达式组。您指定的正则表达式组将成为单独的表列。要在您的 CREATE TABLE 语句中使用正则表达式,请使用类似下面的语法。此语法指示 Athena 使用 正则表达式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 查询编辑器为运行查询、格式化查询、行操作以及查找和替换等操作提供了许多键盘快捷键。有关更多信息和快捷方式的完整列表,请参阅在亚马逊 Athena 查询编辑器中使用键盘快捷键提高工作效率Amazon大数据博客

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

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

  • 当你键入数据库名称或表名后面加一个点时,编辑器会方便地显示一个可供选择的表或列列表。

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

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

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

连接到其他数据来源

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