

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

# 使用 Athena 查询
<a name="configure-custom-reports-example-sql-queries"></a>

本节提供您可以在 Athena 中运行的 SQL 查询来分析 Amazon S3 存储桶中的使用情况报告数据。

要创建指定月份所有会话的整合报告，请运行以下查询：

```
SELECT *
FROM "appstream-usage"."sessions"
WHERE year='four-digit-year'
AND month='two-digit-month'
```

您也可以在查询中执行**应用程序**表和 **会话**表之间的联接操作。例如，要查看在给定月份中启动每个应用程序的不同用户，请运行以下查询：

```
SELECT DISTINCT apps.application_name, sessions.user_id
FROM "appstream-usage"."applications" apps
   INNER JOIN "appstream-usage"."sessions" sessions ON (apps.user_session_id = sessions.user_session_id AND sessions.year='four-digit-year' AND sessions.month='two-digit-month')
WHERE apps.year='four-digit-year'
  AND apps.month='two-digit-month'
ORDER BY 1, 2
```

Athena 查询结果将作为 .csv 文件存储为您账户的 Amazon S3 存储桶中，名称为 `aws-athena-query-results-account-id-without-hyphens-region-code`。为便于查找查询结果，请选择 **Save as (另存为)** 并为您的查询提供名称，然后再运行它。您还可以选择 **Athena 结果**窗格中的下载图标，以 .csv 文件格式下载查询的结果。

要提高性能和降低成本，Athena 使用分区以减少查询中扫描的数据量。有关更多信息，请参阅[分区数据](https://docs.aws.amazon.com/athena/latest/ug/partitions.html)。使用情况报告在 Amazon S3 存储桶中按年、月和日分区。您可以使用 **year (年)**、** month (月)** 和 **day (日)** 字段作为查询中的条件，将查询限制为某些日期范围分区。例如，以下查询仅提取 2019 年 5 月 19 日这周的会话报告。

```
SELECT SUBSTRING(session_start_time, 1, 10) AS report_date, 
    COUNT(DISTINCT user_session_id) AS num_sessions
FROM "appstream-usage"."sessions"
WHERE year='2019'
   AND month='05'
   AND day BETWEEN '19' and '25'
GROUP BY 1
ORDER BY 1
```

相比较而言，以下查询将生成完全相同的结果，但因为它不限于任何分区，所以它提取存储在 Amazon S3 存储桶中的所有会话。

```
SELECT SUBSTRING(session_start_time, 1, 10) AS report_date, 
    COUNT(DISTINCT user_session_id) AS num_sessions
FROM "appstream-usage"."sessions"
WHERE session_end_time BETWEEN '2019-05-19' AND '2019-05-26'
GROUP BY 1
ORDER BY 1
```

如果会话跨多天，则会话和应用程序记录会分别显示在与会话结束日期对应的会话和应用程序报告中。因此，如果您需要查找与在给定日期范围处于活动状态的所有会话相关的记录，请考虑根据为您的实例集配置的最大会话长度扩大您的查询的分区集。

例如，要查看某个日历月期间给定实例集所有活动的会话，其中实例集的最大会话持续时间为 100 小时，请运行以下查询将您的分区设置扩展五天。

```
SELECT *
FROM "appstream-usage"."sessions"
WHERE fleet_name = 'fleet_name'
   AND session_start_time BETWEEN '2019-05-01' AND '2019-06-01'
   AND year='2019'
   AND (month='05' OR (month='06' AND day<='05'))
ORDER BY session_start_time
```

创建 AWS Glue 抓取工具的 CloudFormation 模板还在您的 Athena 账户中创建并保存了多个示例查询，您可以使用这些查询来分析您的使用数据。这些示例查询包含以下内容：
+ 聚合的月度会话报告
+ 每个堆栈的平均会话长度
+ 每天的会话数
+ 每个用户的总流式传输小时数
**注意**  
对于每个会话，按需使用费用会四舍五入到下一小时。
+ 每个应用程序的不同用户数

要使用其中任何查询，请执行以下步骤。

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/) 打开 Athena 控制台。

1. 选择 **Saved Queries (保存的查询)**。应显示此过程之前记下的五个查询。每个查询的名称都以 “AS2。” 例如，“AS2\$1users\$1per\$1app\$1curr\$1mo。”

1. 要运行查询，请选择查询名称而不是名称旁边的选项。

1. 查询的文本显示在查询窗格中。选择**运行查询**。

*要在单独的 CloudFormation 模板中查看这些查询，请参阅代码示例目录中的 [athena-sample-queries-appstream-usage-data\$1templat](https://docs.aws.amazon.com/code-samples/latest/catalog/cloudformation-appstream2-athena-sample-queries-appstream-usage-data_template.yml.html) e.yml。AWS *