跳至主要内容

Amazon Athena

Amazon Athena 常见问题

一般性问题

全部打开

Amazon Athena 是一种交互式查询服务,让您可以轻松使用标准 SQL 语言来分析 Amazon S3 中的数据。Athena 是无服务器式服务,因此您无需设置或管理基础设施即可马上开始分析数据。您甚至无需将数据加载到 Athena 中,因为它可以直接处理 S3 中存储的数据。要开始使用,您只需登录到 Athena 管理控制台,定义 schema,然后开始查询即可。Amazon Athena 使用的是拥有全面标准 SQL 支持的 Presto,并且可以处理各种标准数据格式,其中包括 CSV、JSON、ORC、Apache Parquet 和 Avro。虽然 Amazon Athena 非常适合快速的临时查询,但它也能处理复杂的分析,包括大型联接、窗口函数和阵列。

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

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

您可以通过亚马逊云科技管理控制台、API 或者 ODBC 或 JDBC 驱动程序来访问 Amazon Athena。您可以使用 ODBC 或 JDBC 驱动程序以编程方式运行查询、添加表或分区。

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

Amazon Athena 使用的是拥有全面标准 SQL 支持的 Presto,并且可以处理各种标准数据格式,其中包括 CSV、JSON、ORC、Avro 和 Parquet。Athena 能够处理复杂的分析,包括大型联接、窗口函数和数组。Amazon Athena 使用 Amazon S3 作为基础数据存储,因此可用性和持久性很高(数据冗余地存储在多个设施和每个设施中的多个设备上)。在此处了解更多关于 Presto 的信息。

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

您可以使用 DDL 语句或亚马逊云科技管理控制台来修改目录。您定义的任何 schema 都会自动保存,除非您明确将其删除。Athena 使用“读时模式”技术,也就是说在执行查询时,您的表定义会应用于 S3 中的数据。无需加载或转换数据。您可以删除表定义和 schema,而不会影响存储在 Amazon S3 上的基础数据。

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

升级到 Glue Data Catalog 的优点包括:

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

单击此处了解有关 Glue Data Catalog 的更多信息。

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

何时该使用 Athena,何时该使用其他大数据服务

全部打开

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

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

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

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

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

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

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

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

创建表、数据格式和分区

全部打开

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

当您在 Amazon Athena 中创建新的表 schema 时,schema 将存储在 Data Catalog 中,并在执行查询时使用,但不会修改您存储在 S3 中的数据。Athena 使用一种称为“读时模式”的方法,该方法允许您在执行查询时将 schema 投射到数据上。这样就无需加载或转换任何数据了。了解有关创建表的更多信息。

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

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

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

SerDe 表示串行器/解串器(Serializer/Deserializer),是告诉 Hive 如何解释数据格式的库。Hive DLL 语句要求您指定 SerDe,以便系统知道如何解释您指向的数据。Amazon Athena 使用 SerDe 解释从 Amazon S3 读取的数据。SerDe 在 Athena 中的概念与在 Hive 中使用的概念相同。Amazon Athena 支持以下 SerDe:
Apache Web 日志:“org.apache.hadoop.hive.serde2.RegexSerDe”
CSV:“org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe”
TSV:“org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe”
自定义分隔符:“org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe”
Parquet:“org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe”
Orc:“org.apache.hadoop.hive.ql.io.orc.OrcSerde”
JSON:“org.apache.hive.hcatalog.data.JsonSerDe”或“org.openx.data.jsonserde.JsonSerDe”

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

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

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

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

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

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

查询和数据格式

全部打开

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

是的。Amazon Athena 附带 ODBC 和 JDBC 驱动程序,可以将其与其他商业智能工具和 SQL 客户端一起使用。详细了解如何将 ODBC 或 JDBC 驱动程序与 Athena 配合使用。

目前,Athena 不支持自定义 UDF。如果您需要自定义 UDF 方面的支持,请发送电子邮件至 athena-feedback@amazon.com 联系我们

单击此处,详细了解 Amazon Athena 支持的函数。

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

安全性和可用性

全部打开

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

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

是的。Amazon Athena 具有高可用性,可在多个设施中使用计算资源执行查询,如果某特定设施无法访问,则会自动适当地路由查询。Athena 使用 Amazon S3 作为其底层数据存储,从而使您的数据可用性高、持久性强。Amazon S3 提供耐用的基础设施存储重要数据,其设计旨在为对象提供 99.999999999% 的耐用性。您的数据将通过冗余方式存储在多个设施以及一个设施内的多个设备上。

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

定价和计费

全部打开

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 S3 查询数据,因此,系统会按 S3 费率向您收取源数据费用。当 Amazon Athena 运行查询时,会将结果存储在您选择的 S3 存储桶中,并按照标准 S3 费率向您收取这些结果集的费用。我们建议您监控这些存储桶并使用生命周期策略来控制保留的数据量。

是。您需要单独支付使用 Amazon Glue Data Catalog 的费用。单击此处,详细了解 Glue Data Catalog 定价。