使用查询结果、输出文件和查询历史记录 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用查询结果、输出文件和查询历史记录

Amazon Athena 会自动为运行的每个查询存储查询结果和元数据信息。查询结果位置您可以在 Amazon S3 中指定。如有必要,您可以在此位置访问这些文件以对其进行处理。您还可以直接从 Athena 控制台下载查询结果文件。

要首次设置 Amazon S3 查询结果位置,请参阅使用 Athena 控制台指定查询结果位置

运行的每个查询的输出文件都会自动保存,而无论查询本身是否保存。要访问和查看查询输出文件,IAM 委托人(用户和角色)需要 Amazon S3 的权限GetObject操作的查询结果位置,以及 Athena 的权限GetQueryResultsaction. 可对查询结果位置进行加密。如果该位置已加密,用户必须具有加密和解密查询结果位置的相应密钥权限。

重要

具有 Amazon S3 权限的 IAM 委托人GetObject操作可以从 Amazon S3 检索查询结果,即使 AthenaGetQueryResults操作被拒绝。

获取查询 ID

运行的每个查询称为查询执行。查询执行具有唯一的标识符,称为查询 ID 或查询执行 ID。要使用查询结果文件并快速查找查询结果文件,您需要查询 ID。在本主题中,我们将查询 ID 称为 QueryID

要使用 Athena 控制台获取QueryID运行的查询

  1. 从导航栏中选择 History (历史记录)

    
                        在 Athena 控制台中查看查询历史记录。
  2. 从查询列表中,选择-例如,Succeeded。查询 ID 显示在指针提示中。

    
                        查看查询 ID历史记录选 Athena。
  3. 要将 ID 复制到剪贴板,请选择查询 ID

    
                        将查询 ID 复制到历史记录选 Athena。

在 Amazon S3 中查找查询输出文件

查询输出文件存储在采用以下路径模式的 Amazon S3 上的子文件夹中,除非在其配置覆盖了客户端设置的工作组中进行查询。当工作组配置覆盖客户端设置时,查询将使用工作组指定的结果路径。

QueryResultsLocationInS3/[QueryName|Unsaved/yyyy/mm/dd/]
  • QueryResultsLocationInS3 是由工作组设置或客户端设置指定的查询结果位置。有关更多信息,请参阅本文后面的指定查询结果位置

  • 以下子文件夹仅为从控制台运行且工作组配置未覆盖其结果路径的查询而创建。运行的查询从Amazon CLI或使用 Athena API 将直接保存到查询结果位置 3

    • QueryName 是要保存其结果的查询的名称。如果查询已运行但未保存,则使用 Unsaved

    • yyyy/mm/dd 是查询运行的日期。

CREATE TABLE AS SELECT 查询关联的文件存储在以上模式的 tables 子文件夹中。

识别查询输出文件

查询输出文件会按照查询名称、查询 ID 和查询运行日期保存到 Amazon S3 中的查询结果位置。每个查询的文件都使用QueryID,这是 Athena 在每个查询运行时为其分配的唯一标识符。

会保存以下文件类型:

文件类型 文件命名模式 描述

查询结果文件

QueryID.csv

QueryID.txt

DML 查询结果文件以逗号分隔值 (CSV) 格式保存。

DDL 查询结果保存为纯文本文件。

您可以从控制台下载结果文件结果窗格中使用控制台或查询历史记录。有关更多信息,请参阅 使用 Athena 控制台下载查询结果文件

查询元数据文件

QueryID.csv.metadata

QueryID.txt.metadata

DML 和 DDL 查询元数据文件以二进制格式保存,无法人为读取。文件扩展名对应于相关的查询结果文件。在使用 Athena 读取查询结果时,Athena 使用元数据GetQueryResultsaction. 虽然可以删除这些文件,但我们不建议这样做,因为这样会丢失关于查询的重要信息。

数据清单文件

QueryID-manifest.csv

生成数据清单文件以跟踪 Athena 在 Amazon S3 数据源位置创建的文件,当INSERT INTO查询运行。如果查询失败,清单也将跟踪查询要写入的文件。清单对于识别由于查询失败而导致的孤立文件很有用。

使用Amazon CLI标识查询输出位置和文件

使用Amazon CLI标识查询输出位置和结果文件,请运行aws athena get-query-execution命令,如以下示例所示。用查询 ID 替换 abc1234d-5efg-67hi-jklm-89n0op12qr34

aws athena get-query-execution --query-execution-id abc1234d-5efg-67hi-jklm-89n0op12qr34

该命令返回的输出类似于下方内容。有关每个输出参数的说明,请参阅获取查询执行中的Amazon CLI命令参考

{ "QueryExecution": { "Status": { "SubmissionDateTime": 1565649050.175, "State": "SUCCEEDED", "CompletionDateTime": 1565649056.6229999 }, "Statistics": { "DataScannedInBytes": 5944497, "DataManifestLocation": "s3://aws-athena-query-results-123456789012-us-west-1/MyInsertQuery/2019/08/12/abc1234d-5efg-67hi-jklm-89n0op12qr34-manifest.csv", "EngineExecutionTimeInMillis": 5209 }, "ResultConfiguration": { "EncryptionConfiguration": { "EncryptionOption": "SSE_S3" }, "OutputLocation": "s3://aws-athena-query-results-123456789012-us-west-1/MyInsertQuery/2019/08/12/abc1234d-5efg-67hi-jklm-89n0op12qr34" }, "QueryExecutionId": "abc1234d-5efg-67hi-jklm-89n0op12qr34", "QueryExecutionContext": {}, "Query": "INSERT INTO mydb.elb_log_backup SELECT * FROM mydb.elb_logs LIMIT 100", "StatementType": "DML", "WorkGroup": "primary" } }

使用 Athena 控制台下载查询结果文件

运行查询后,您可以立即从查询窗格中下载查询结果 CSV 文件,也可使用查询 History (历史记录) 下载。

注意

Athena 查询结果文件为数据文件,其中包含了可以被单个用户配置的信息。读取和分析此数据的某些程序可能将某些数据解释为命令 (CSV 注入)。因此,将查询结果 CSV 数据导入到某个电子表格程序时,该程序可能警告您注意安全风险。为了确保系统安全,您应始终选择禁用下载查询结果中的链接或宏。

下载最新查询的查询结果文件

  1. 在查询编辑器中输入您的查询,然后选择 Run query (运行查询)

    查询完成运行后,Results (结果) 窗格将显示查询结果。

  2. 要下载查询结果文件,请在查询结果窗格中选择文件图标。根据您的浏览器和浏览器配置,您可能需要确认下载。

    
                        将查询结果保存到.csv文 Athena。

下载早期查询的查询结果文件

  1. 选择 History (历史记录)

  2. 浏览查询列表,直到找到查询,然后在操作对于查询,请选择下载结果

指定查询结果位置

Athena 使用的查询结果位置由工作组设置和客户端设置。客户端设置取决于您运行查询的方式。

  • 如果使用 Athena 控制台运行查询,Query result location (查询结果位置)在下输入设置决定客户端设置。

  • 如果您使用 Athena API 运行查询,OutputLocation参数StartQueryExecution操作决定客户端设置。

  • 如果您使用 ODBC 或 JDBC 驱动程序来运行查询,则连接 URL 中指定的 S3OutputLocation 属性决定客户端设置。

重要

当您使用 API 或使用 ODBC 或 JDBC 驱动程序运行查询时,控制台设置不适用。

每个工作组配置都有一个可启用的Override client-side settings (覆盖客户端设置) 选项。如果启用此选项,当与工作组关联的 IAM 委托人运行该查询时,工作组设置优先于适用的客户端设置。

使用 Athena 控制台指定查询结果位置

在运行查询之前,必须指定 Amazon S3 中的查询结果存储桶位置,或者您必须使用已指定存储桶且其配置覆盖客户端设置的工作组。如果未指定查询结果位置,则查询会失败并出现错误。

使用 Athena 控制台指定客户端设置查询结果位置

  1. 从导航栏中,选择设置

  2. 适用于Query result location (查询结果位置)中,输入现有 Amazon S3 文件夹的路径,包括尾部斜杠。

    注意

    请务必包含尾斜杠。如果不包含尾斜杠,则导致错误S3 文件夹位置无效

    您输入的 Amazon S3 位置将用于后续查询。如果需要,您可以稍后更改该位置。

    
                            在 Athena 控制台中指定查询结果位置

    如果您是指定查询结果位置并覆盖客户端设置的工作组的成员,则更改查询结果位置的选项不可用,如下图所示:

    
                            当工作组覆盖客户端设置时,查询结果位置设置不可用。

以前创建的默认位置

之前,如果您运行查询时没有指定Query result location (查询结果位置),并且查询结果位置设置未被工作组覆盖,Athena 为您创建默认位置。默认位置是aws-athena-query-results-MyAcctID-MyRegion,其中,MyAcctID是运行查询的 IAM 委托人的 Amazon Web Services 账户 ID,MyRegion是查询运行的区域(例如us-west-1。)

现在,您必须指定查询结果位置或使用覆盖查询结果位置设置的工作组,然后才能在您的账户以前未使用 Athena 的区域中运行 Athena 查询。虽然 Athena 不再为您创建默认查询结果位置,但之前创建的默认aws-athena-query-results-MyAcctID-MyRegion位置仍然有效,您可以继续使用它们。

使用工作组指定查询结果位置

您使用工作组配置中指定查询结果位置Amazon Web Services Management Console,Amazon CLI,或者 Athena API。

使用Amazon CLI中,使用OutputLocation参数--configuration选项,当您运行aws athena create-work-group或者aws athena update-work-group命令。

使用 Athena 控制台指定工作组的查询结果位置

  1. 选择工作组:CurrentWorkgroupName在导航栏中。

  2. 请执行下列操作之一:

    • 如果编辑现有组,请从列表中选择它,选择 View details (查看详细信息),然后选择 Edit Workgroup (编辑工作组)

    • 如果要创建新组,请选择 Create workgroup (创建工作组)

  3. 对于 Query result location (查询结果位置),请选择 Select (选择) 文件夹。

  4. 从 S3 位置的列表中,连续选择蓝色箭头,直到您要使用的存储桶和文件夹显示在顶行。选择 Select

  5. Settings (设置) 下,执行下列操作之一:

    • 选择 Override client-side settings (覆盖客户端设置),可在上面指定的位置保存此工作组成员运行的所有查询的查询文件。

    • ClearOverride client-side settings (覆盖客户端设置)只有当工作组成员使用 Athena API、ODBC 驱动程序或 JDBC 驱动程序运行查询而不在 Amazon S3 中指定输出位置时才会在上面指定的位置保存查询文件。

  6. 如果要编辑工作组,请选择 Save (保存)。如果要创建工作组,请选择 Create workgroup (创建工作组)

查看查询历史记录

您可以使用 Athena 控制台查看成功和失败的查询、下载成功查询的查询结果文件以及查看失败查询的错误详细信息。Athena 将查询历史记录保留 45 天。

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

  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. 选择 History 选项卡。History (历史记录) 选项卡显示有关运行的每个查询的信息。

    
                        在 Athena 控制台中查看查询历史记录。
  3. 请执行下列操作之一:

    • 要在查询编辑器中查看查询语句,请在 Query (查询) 列中选择查询的文本。较长的查询语句将采用缩写形式。

      
                                选择查询的文本以在查询编辑器中进行查看。
    • 要查看查询 ID,请选择其(Succeeded已失败,或者Cancelled)。查询 ID 显示在指针提示中。

      
                                查看查询 ID历史记录选 Athena。
    • 要将成功查询的结果下载到 .csv 文件中,请选择 Download results (下载结果)

      
                                下载查询结果从历史记录选 Athena。
    • 若要查看失败查询的详细信息,请选择该查询的 Error details (错误详细信息)

      
                                选择错误详细信息查看失败查询的详细信息。
      
                                查看失败查询的错误详细信息。

如果要将查询历史记录保留超过 45 天,您可以检索查询历史记录并将其保存到等 Amazon S3 等数据存储中。要自动执行此过程,您可以使用 Athena 和 Amazon S3 API 操作和 CLI 命令。以下过程总结了这些步骤。

以编程方式检索和保存查询历史记录

  1. 使用 AthenaListQueryExecutionsAPI 操作或列表查询执行CLI 命令检索查询 ID。

  2. 使用 Athena获取 GetQueryExecutionAPI 操作或获取查询执行CLI 命令,根据查询的 ID 检索有关各个查询的信息。

  3. 使用 Amazon S3PutObjectAPI 操作或put-objectCLI 命令将信息保存到 Amazon S3 中。