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

入门

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

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

先决条件

  • 如果您尚未完成此操作,请在设置中注册账户。

  • 使用与您在 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. 选择 View Settings(查看设置)以在 Amazon S3 中设置查询结果位置。

    
                        选择 View Settings(查看设置)。
  4. Settings(设置)选项卡上,选择 Manage(管理)。

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

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

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

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

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

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

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

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

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

    
                        选择您创建的数据库。

步骤 2:创建表

现在,您有了数据库,可以为其创建一个 Athena 表。您创建的表将基于位置 s3://athena-examples-myregion/cloudfront/plaintext/ 中的示例 Amazon CloudFront 日志数据,其中 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 位置。

注意

对于 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 语句将制表符指定为字段分隔符,则此特定字段中的单独组件不能分解为单独的列。要从字段内的值创建列,可以使用包含正则表达式组的正则表达式(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. 选择 Run(运行)。

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

步骤 3:查询数据

现在,您已根据 Amazon S3 中的数据在 Athena 中创建了 cloudfront_logs 表,您可以针对该表运行 SQL 查询,并在 Athena 中查看结果。有关在 Athena 中使用 SQL 的更多信息,请参阅 Amazon 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. 选择 Run(运行)。

    结果与以下内容类似:

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

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

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

    
                        在 Athena 控制台中查看和下载最近的查询。

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

保存查询

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

连接到其他数据源

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