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

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

入门

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

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

Prerequisites

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

  • 使用相同的Amazon您用于 Athena 的区域(例如,美国西部(俄勒冈))和帐户,在 Amazon S3 中创建存储桶保存您的 Athena 查询结果。

第 1 步:创建数据库

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

创建数据库

  1. 打开 Athena 控制台。

  2. 如果这是您首次访问您目前的 Athena 控制台Amazon区域,选择开始使用以打开查询编辑器。如果您不是第一次访问,则会打开 Athena 查询编辑器。

  3. 选择链接在 Amazon S3 中设置查询结果位置

    
                        选择设置查询结果位置。
  4. 设置对话框中,执行下列操作之一:

    • 选择Select文件夹图标,选择您在当前区域中创建的 Amazon S3 存储桶,然后选择Select

    • Query result location (查询结果位置)文本框中,输入您在 Amazon S3 中为查询结果创建的存储桶路径。使用 s3:// 作为路径前缀,并在路径结尾添加正斜杠。

    
                        在 Amazon S3 中指定一个位置,以接收来自 Athena 的查询结果。
  5. 选择 Save

    如果您需要返回设置对话框中,选择设置选项。

    
                        使用设置选项指定查询结果位置。
  6. 在导航窗格的右侧,您可以使用 Athena 查询编辑器输入和运行查询和语句。

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

    CREATE DATABASE mydatabase
  8. 选择 Run query (运行查询) 或者按 Ctrl+ENTER

  9. 在左侧导航窗格中,从数据库列表中,选择mydatabase使其成为当前数据库。

    
                        从 Athena 控制台导航窗格中,选择您创建的数据库。

第 2 步:创建表

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

示例日志数据采用制表符分隔值 (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 位置。

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 使用Regex SerDe库和您指定的正则表达式。

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

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

现在,您已准备就绪,可以在 Athena 查询编辑器中创建表。这些区域有:CREATE TABLE语句和正则表达式。

创建 表

  1. 适用于数据库,请确保mydatabase处于选择状态。

  2. 在查询编辑器中选择加号 (+) 以创建带有新查询的选项卡。您最多可以同时打开十个查询选项卡。

    
                        选择加号图标以创建新查询。
  3. 在查询窗格中,输入以下 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/';
  4. LOCATION语句,将我的地区使用Amazon您当前正在使用的区域(例如us-west-1)。

  5. 选择 Run Query (运行查询)

    该表cloudfront_logs,并显示在(对于 )mydatabase数据库。

    
                        在 Athena 控制台中创建的表。

第 3 步:查询数据

现在,您已经拥有cloudfront_logs表,您可以根据 Amazon S3 中的数据运行 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 Query (运行查询)

    结果与以下内容类似:

    
                        在 Athena 控制台中查看查询结果。
  3. 您可以将查询的结果保存到.csv文件中的下载图标,方法是选择结果窗格。

    
                        以 CSV 格式下载查询结果。
  4. 选择历史记录选项卡可查看之前的查询。

    
                        选择历史记录以查看之前的查询。
  5. 选择 Download results (下载结果) 可下载之前查询的结果。查询历史记录保留 45 天。

    
                        在 Athena 控制台中查看查询历史记录。

    有关更多信息,请参阅使用查询结果、输出文件和查询历史记录

连接到其他数据源

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