问:什么是 Amazon Athena?

Amazon Athena 是一种交互式查询服务,可使用此服务通过标准 SQL 在 Amazon S3 中轻松分析数据。Athena 是无服务器服务,因此您无需设置或管理基础设施,可以立即开始分析数据。您甚至无需将数据加载到 Athena 中,因为它可以直接处理 S3 中存储的数据。要开始使用,您只需登录到 Athena 管理控制台、定义架构并开始查询。Amazon Athena 使用 Presto 并为标准 SQL 提供了完整的支持,可处理 CSV、JSON、ORC、Apache Parquet 和 Avro 等各种标准数据格式。Amazon Athena 不仅是快速、临时查询的理想选择,可与 Amazon QuickSight 集成轻松实现可视化,而且还能处理复杂的分析,包括大型联接、窗口函数和数组。

问:Amazon Athena 可以用来做什么?

Amazon Athena 可帮助您分析存储在 Amazon S3 中的数据。您可以使用 ANSI SQL 通过 Athena 运行临时查询,而无需将数据聚合或加载到 Athena 中。Amazon Athena 能够处理非结构化、半结构化和结构化的数据集。示例包括 CSV、JSON、Avro 或列式数据格式,如 Apache Parquet 和 Apache ORC。Amazon Athena 可与 Amazon QuickSight 集成并轻松地实现可视化。此外,您还可以使用 Amazon Athena 生成报表,或借助商业智能工具或 SQL 客户端浏览数据 (通过 JDBC 驱动程序进行连接)。

问:如何开始使用 Amazon Athena?

要开始使用 Amazon Athena,您只需登录到 Athena 的 AWS 管理控制台,然后通过在控制台中编写 DDL 语句或使用创建表向导来创建架构。然后,您可以使用内置的查询编辑器开始查询数据。Athena 直接从 Amazon S3 查询数据,因此无需加载数据。 

问:如何访问 Amazon Athena?

可以通过 AWS 管理控制台、API 或 JDBC 驱动程序访问 Amazon Athena。您可以使用 JDBC 驱动程序以编程方式运行查询、添加表或分区。

问:Amazon Athena 有哪些服务限制?

单击此处了解有关服务限制的更多信息。

问:Amazon Athena 采用了何种基础技术?

Amazon Athena 使用 Presto 并为标准 SQL 提供了完整的支持,可处理 CSV、JSON、ORC、Avro 和 Parquet 等各种标准数据格式。Athena 能够处理复杂的分析,包括大型联接、窗口函数和数组。Amazon Athena 使用 Amazon S3 作为基础数据存储,因此具有高可用性和持久性 (数据冗余地存储在多个设施和每个设施中的多个设备上)。

问:Amazon Athena 如何存储表定义和架构?

Amazon Athena 使用托管的数据目录来存储有关您为 Amazon S3 中存储的数据创建的数据库和表的信息及架构。在提供 AWS Glue 的地区内,您可以升级到结合使用 AWS Glue 数据目录和 Amazon Athena。在不提供 AWS Glue 的地区内,Athena 使用其内部目录。

您可以使用 DDL 语句或通过 AWS 管理控制台修改目录。您定义的任何架构都会自动保存,除非显式将其删除。Athena 使用基于读取的架构技术,这意味着表定义在执行查询时应用于您存储在 S3 中的数据。无需加载或转换数据。您可以删除表定义和架构,这不会影响到存储在 Amazon S3 上的基础数据。

问:我为什么应该升级到 AWS Glue 数据目录?

AWS Glue 是一项完全托管的 ETL 服务。Glue 有三个主要组件:1) 抓取程序,用于自动扫描数据源、识别数据格式和推断架构;2) 完全托管的 ETL 服务,支持您转换数据并将其制动至多个目标;以及 3) 数据目录,用于存储有关 S3 或符合 JDBC 规范的数据存储中所存储的数据库和表的元数据信息。要使用 Glue 的优势,您必须从使用 Athena 的内部数据目录升级为使用 Glue 数据目录。

升级到 Glue 数据目录具有以下优势:

  1. 统一的元数据存储库:AWS Glue 可以与各种 AWS 服务集成。AWS Glue 支持在 Amazon Aurora、Amazon RDS MySQL、Amazon RDS PostreSQL、Amazon Redshift 和 Amazon S3,以及 Amazon EC2 上运行的 Virtual Private Cloud (Amazon VPC) 中的 MySQL 和 PostgreSQL 数据库中存储的数据。AWS Glue 可与 Amazon Athena、Amazon EMR、Amazon Redshift Spectrum 以及任何 Apache Hive Metastore 兼容的应用程序进行开箱即用的集成。
  2. 自动架构和分区识别:AWS Glue 可以自动抓取您的数据源、识别数据格式并提出架构和转换建议。抓取程序可帮助自动创建表并自动加载分区。
  3. 轻松构建管道:AWS Glue 的 ETL 引擎能生成可自定义、可重用且可移植的 Python 代码。您可以使用喜爱的 IDE 或笔记本电脑编辑代码,并使用 GitHub 将其与其他人共享。ETL 任务准备就绪后,您可以安排它在 AWS Glue 完全托管的扩展 Spark 基础设施上运行。AWS Glue 是一项无服务器服务,因此它可以对运行 ETL 任务所需的资源进行预置、配置和扩展,从而让您能够将 ETL 与工作流紧密集成。

单击此处以了解有关 Glue 数据目录的更多信息。

问:是否有升级到 AWS 数据目录的分步指导?

有。您可以在此处查看分步指南。

问:Amazon Athena 在哪些区域可用?

有关 Amazon Athena 在各个区域的可用性的详细信息,请参阅区域产品和服务

问:Amazon Athena、Amazon EMR 和 Amazon Redshift 之间有何差异?

查询服务 (如 Amazon Athena)、数据仓库 (如 Amazon Redshift) 和复杂的数据处理框架 (如 Amazon EMR) 都可以满足不同的需求和使用案例。您只需要为任务挑选适当的工具。Amazon Redshift 为企业报告和商业智能工作负载提供最快的查询性能,这一点在涉及具有多个联接和子查询的极为复杂的 SQL 查询上尤为明显。与本地部署相比,Amazon EMR 使运行高度分布式的处理框架 (如 Hadoop、Spark 和 Presto) 变得简单且经济高效。Amazon EMR 非常灵活 – 您可以运行自定义的应用程序和代码,定义特定的计算、内存、存储和应用程序参数,以优化您的分析需求。Amazon Athena 为针对 S3 中的数据运行临时查询提供了最简单的方法,您不必设置或管理任何服务器。

问:什么时候该使用 Amazon Redshift 这样功能全面的企业数据仓库?什么时候该使用 Amazon Athena 这样的查询服务呢?

当您需要将许多不同来源 (如库存系统、财务系统和零售系统) 的数据汇总成一种通用格式并长期存储时,或者需要从历史数据生成复杂的业务报告时,像 Amazon Redshift 这样的数据仓库是您最好的选择。

数据仓库从公司的各个位置收集数据,并充当生成和分析报告的“单一信息源”。数据仓库从不同来源提取数据、格式化并组织数据、存储数据,同时支持生成业务报告的复杂、高速查询。Amazon Redshift 中的查询引擎经过优化,在“需要运行联接大量非常大的数据库表的复杂查询”使用案例中执行得非常好。TPC-DS 是旨在复制此使用案例的标准基准,与针对非结构化数据进行优化的查询服务相比,Redshift 将此类查询的运行速度提高了 20 倍。当需要针对高度结构化的数据运行查询并需要在许多大型表之间进行大量联接时,您应选择 Amazon Redshift。

相比之下,Amazon Athena 这样的查询服务可以直接对 Amazon S3 中的数据运行交互式查询,您不必操心格式化数据或管理基础设施之类的繁琐细节。例如,如果只需要对某些网络日志运行快速查询以诊断站点上的性能问题,则 Athena 就是一种很好的选择。通过查询服务,您可以迅速开始工作。您只需为数据定义一个表,即可使用标准 SQL 开始查询。

此外,您还可以将两项服务配合使用。如果您在将数据加载到 Amazon Redshift 之前将其暂存在 Amazon S3 上,则也可以将这些数据注册到 Amazon Athena 并通过其进行查询。

问:什么时候应该使用 Amazon EMR,而不是使用 Amazon Athena?

Amazon EMR 的功能远不止于运行 SQL 查询。借助 EMR,您可以为机器学习、图形分析、数据转换、流式处理数据以及您可以编写代码的几乎任何应用运行各种横向扩展的数据处理任务。如果需要使用自定义代码通过最新的大数据处理框架 (如 Spark、Hadoop、Presto 或 Hbase) 来处理和分析超大数据集,则应该使用 Amazon EMR。通过 Amazon EMR,您可以全面掌控群集及其上安装的软件的配置。

如果需要对 Amazon S3 上的数据运行临时的交互式 SQL 查询,又不想管理任何基础设施或群集,则应该使用 Amazon Athena。

问:可以使用 Amazon Athena 查询使用 Amazon EMR 处理的数据吗?

可以。Amazon Athena 支持许多与 Amazon EMR 相同的数据格式。Athena 的数据目录兼容 Hive 元存储。如果您正在使用 EMR 并且已有 Hive 元存储,则只需在 Amazon Athena 上执行 DDL 语句,即可开始查询数据,这不会对您的 Amazon EMR 任务产生任何影响。

问:如何在 Amazon S3 上为我的数据创建表和架构?

Amazon Athena 使用 Apache Hive DDL 定义表。您可以使用 Athena 控制台、通过 JDBC 驱动程序、通过 API 或使用 Athena 创建表向导来运行 DDL 语句。如果将 AWS Glue 数据目录与 Athena 配合使用,您还可以使用 Glue 抓取程序来自动推断架构和分区。AWS Glue 抓取程序可连接到数据存储,使用分类器的优先级列表来提取数据和其他统计数据的架构,然后使用该元数据填充 Glue 数据目录。抓取程序可定期运行,以检测新数据的可用性以及现有数据的更改,包括表定义的更改。抓取程序会自动将新表、新分区以及新版本的表定义添加到现有表。您可以自定义 Glue 抓取程序以对自己的文件类型进行分类。

当您在 Amazon Athena 中创建新的表架构时,架构将存储在数据目录中,并在执行查询时使用,但不会修改您存储在 S3 中的数据。Athena 采用称作“基于读取的架构”的方法,它在您执行查询时将架构投影到数据。这样就无需加载或转换任何数据。了解有关创建表的更多信息。

问:Amazon Athena 支持哪些数据格式?

Amazon Athena 支持许多类型的数据格式,如 CSV、TSV、JSON、Textfiles 等;此外,它还支持开源列格式,如 Apache ORC 和 Apache Parquet。Athena 还支持 Snappy、Zlib、LZO 和 GZIP 格式的压缩数据。通过压缩、分区和使用列格式,您可以提高性能并降低成本。

问:Amazon Athena 支持哪些数据类型?

Amazon Athena 支持简单数据类型 (如 INTEGER、DOUBLE、VARCHAR) 及复杂数据类型 (如 MAPS、ARRAY、STRUCT)。 

问:可以在 Athena 上运行任何 Hive 查询吗?

Amazon Athena 只将 Hive 用于 DDL (数据定义语言) 以及创建/修改和删除表和/或分区。请单击此处查看受支持语句的完整列表。在 Amazon S3 上运行 SQL 查询时,Athena 使用 Presto。您可以运行符合 ANSI 标准的 SQL SELECT 语句来查询 Amazon S3 中的数据。

问:什么是 SerDe?

SerDe 表示串行器/解串器 (Serializer/Deserializer),它们是告诉 Hive 如何解释数据格式的库。Hive DLL 语句要求您指定 SerDe,以便系统知道如何解释您指向的数据。Amazon Athena 使用 SerDes 解释从 Amazon S3 读取的数据。SerDes 在 Athena 中的概念与在 Hive 中使用的概念相同。Amazon Athena 支持以下 SerDes:

  1. Apache Web 日志:“org.apache.hadoop.hive.serde2.RegexSerDe”
  2. CSV:“org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe”
  3. TSV:“org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe”
  4. 自定义分隔符:“org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe”
  5. Parquet:“org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe”
  6. Orc:“org.apache.hadoop.hive.ql.io.orc.OrcSerde”
  7. JSON:“org.apache.hive.hcatalog.data.JsonSerDe”或“org.openx.data.jsonserde.JsonSerDe”

问:可以向 Amazon Athena 添加自己的 SerDe (串行器/解串器) 吗?

目前,您无法向 Amazon Athena 添加自己的 SerDe。感谢您的反馈!如果您希望添加任何 SerDes,请与 Athena 团队 (Athena-feedback@amazon.com) 联系

问:我使用 Spark/Hive 创建了 Parquet/ORC 文件。我可以通过 Athena 查询它们吗?

可以。您可以在 Athena 中读取通过 Spark 创建的 Parquet 和 ORC 文件。

问:我的数据来自 Kinesis Firehose。如何使用 Athena 查询?

如果您的 Kinesis Firehose 数据存储在 Amazon S3 中,您可以使用 Amazon Athena 进行查询。只需在 Athena 中为您的数据创建架构并开始查询。建议您将数据组织到分区中,以优化性能。您可以使用 ALTER TABLE DDL 语句添加 Kinesis Firehose 创建的分区。了解有关分区的更多信息。

问:Amazon Athena 是否支持数据分区?

可以。Amazon Athena 允许您对任意列上的数据进行分区。分区能够限制查询扫描的数据量,从而节省成本并提高性能。您可以在 CREATE TABLE 语句中使用 PARTITIONED BY 子句指定分区方案。了解有关分区数据的更多信息。

问:如何在 Amazon Athena 中向现有的表添加新数据?

如果您的数据已分区,只要 Amazon S3 上有新数据可用,就需要运行元数据查询 (ALTER TABLE ADD PARTITION) 将此分区添加到 Athena。如果您的数据未分区,只需将新数据 (或文件) 添加到现有前缀,即可将数据自动添加到 Athena。了解有关分区数据的更多信息。

问:我在 Amazon S3 中存储着大量日志数据。可以使用 Amazon Athena 进行查询吗?

可以。通过 Amazon Athena 您可以方便地对现有日志数据运行标准 SQL 查询。Athena 直接从 Amazon S3 查询数据,因此无需移动或加载数据。只需使用 DDL 语句定义架构,即可开始查询数据。

问:Amazon Athena 支持哪些类型的查询?

Amazon Athena 支持 ANSI SQL 查询。Amazon Athena 使用 Presto (一种开源的内存分布式 SQL 引擎),能够处理复杂的分析,包括大型联接、窗口函数和数组。

问:能否将 Amazon QuickSight 与 Amazon Athena 配合使用?

可以。Amazon Athena 与 Amazon QuickSight 集成,可方便地可视化存储在 Amazon S3 中的数据。

问:Athena 是否支持其他 BI 工具和 SQL 客户端?

可以。Amazon Athena 提供 JDBC 驱动程序,您可以将其与其他商业智能工具和 SQL 客户端配合使用。了解有关将 JDBC 驱动程序与 Athena 配合使用的更多信息。

问:Athena 支持用户自定义函数 (UDF) 吗?

Athena 目前不支持自定义 UDF。如果您需要自定义 UDF 支持,请给我们 (athena-feedback@amazon.com) 发送电子邮件,以便我们了解您的需求。

问:如何访问 Amazon Athena 支持的函数?

有关 Amazon Athena 支持的函数的更多信息,请单击此处

问:如何提高查询性能?

您可以通过压缩、分区或将数据转换为列格式来提高查询性能。Amazon Athena 支持开源列数据格式,如 Apache Parquet 和 Apache ORC。将数据转换为压缩的列格式可降低成本,并通过减少 Athena 在执行查询时从 S3 扫描的数据来提高查询性能。

问:如何控制对我的数据的访问?

Amazon Athena 允许您通过使用 AWS Identity and Access Management (IAM) 策略、访问控制列表 (ACL) 和 Amazon S3 存储桶策略来控制对数据的访问。通过 IAM 策略,您可以授予 IAM 用户对 S3 存储桶的细化控制权。通过控制对 S3 中数据的访问,您可以限制用户使用 Athena 对其进行查询。

Athena 可以查询 Amazon S3 中的加密数据吗?

可以。您可以查询使用 Amazon S3 托管加密密钥在服务器端加密的数据、使用 AWS Key Management Service (KMS) 托管密钥在服务器端加密的数据以及使用 KMS 托管的密钥在客户端加密的数据。Amazon Athena 还与 KMS 实现了集成,支持您加密您的结果集。

问:Athena 是否具有高可用性?

可以。Amazon Athena 具有高可用性,它会利用跨多个设施的计算资源执行查询,如果特定设施无法访问,它会适当地自动路由查询。Athena 使用 Amazon S3 作为基础数据存储,可确保您的数据具有高可用性和高持久性。Amazon S3 提供耐久的基础设施存储重要数据,其设计旨在为对象提供 99.999999999% 的耐久性。您的数据将跨多个设施和在各个设施的多个设备间冗余存储。

问:我可以提供对他人 S3 存储桶的跨账户访问权限吗?

可以。您可以提供对 Amazon S3 的跨账户访问权限。

问:Amazon Athena 如何定价?

Amazon Athena 按查询定价,并基于查询扫描的数据量收费。您可以在 Amazon S3 上存储各种格式的数据。如果您压缩数据、分区或将其转换为列式存储格式,则由于扫描的数据较少,您需要支付的费用也会减少。将数据转换为列格式能够让 Athena 只读取处理查询所需的列。有关更多详情,请参阅 Athena 定价页面

问:为什么使用列格式时收费较少?

Amazon Athena 根据查询扫描的数据量收取费用。压缩数据会减少 Amazon Athena 扫描的数据量。将数据转换为列格式能够让 Athena 选择性地只读取处理数据所必需的列。对数据进行分区也能限制 Athena 扫描的数据量。这能够节省成本并提高性能。有关详细信息,请参阅定价示例。

问:如何降低成本?

通过压缩、分区和将数据转换为列格式,可以节省 30%-90% 的查询成本,同时获得更好的性能。这几种操作都能减少 Amazon Athena 执行查询所需扫描的数据量。Amazon Athena 支持 Apache Parquet 和 ORC 这两种最为流行的开源列格式。您可以在 Athena 控制台中查看每个查询扫描的数据量。 

问:查询失败时 Amazon Athena 是否收费?

否。如果查询失败,系统不会向您收取费用。

问:如果取消查询,Amazon Athena 是否会收费?

会。如果手动取消查询,您需要为取消查询前已扫描的数据量付费。

问:Amazon Athena 还有任何其他收费项目吗?

Amazon Athena 直接从 Amazon S3 查询数据,因此,系统会针对您的源数据按 S3 费率收费。Amazon Athena 运行查询时将结果存储在您选择的 S3 存储桶中,这些结果集也按照标准 S3 费率计费。建议您监控这些存储桶,使用生命周期策略来控制保留多少数据。

问:使用 AWS Glue 数据目录是否需要付费?

是。您需要单独支付使用 AWS Glue 数据目录的费用。单击此处了解有关 Glue 数据目录定价的更多信息。