一般性问题
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 Athena 可帮助您分析存储在 Amazon S3 中的数据。您可以使用 ANSI SQL 通过 Athena 运行临时查询,而无需将数据聚合或加载到 Athena 中。Amazon Athena 能够处理非结构化、半结构化和结构化的数据集。示例包括 CSV、JSON、Avro 或列式数据格式,如 Apache Parquet 和 Apache ORC。此外,您还可以使用 Amazon Athena 生成报告,或借助商业智能工具或 SQL 客户端(通过 ODBC 或 JDBC 驱动程序进行连接)浏览数据。
问:如何开始使用 Amazon Athena?
要开始使用 Amazon Athena,您只需登录到 Athena 的 亚马逊云科技 管理控制台,然后通过在控制台中编写 DDL 语句或使用创建表向导来创建 schema 即可。然后,您可以使用内置的查询编辑器开始查询数据。Athena 直接从 Amazon S3 查询数据,因此无需加载数据。
问:如何访问 Amazon Athena?
您可以通过 亚马逊云科技 管理控制台、API 或者 ODBC 或 JDBC 驱动程序访问 Amazon Athena。您可以使用 ODBC 或 JDBC 驱动程序以编程方式运行查询、添加表或分区。
问:Amazon Athena 有哪些服务限制?
请单击此处了解有关服务限制的更多信息。
问:Amazon Athena 采用了何种基础技术?
Amazon Athena 使用完全支持标准 SQL 的 Presto,可处理 CSV、JSON、ORC、Avro 和 Parquet 等各种标准数据格式。Athena 能够处理复杂的分析,包括大型联接、开窗函数和数组。Amazon Athena 使用 Amazon S3 作为基础数据存储,因此可用性和持久性很高(数据冗余地存储在多个设施和每个设施中的多个设备上)。在此处了解有关 Presto 的更多信息。
问:Amazon Athena 如何存储表定义和 schema?
Amazon Athena 使用托管的数据目录来存储有关您为 Amazon S3 中存储的数据创建的数据库和表的信息及 schema。在提供 Amazon Glue 的区域内,您可以升级到结合使用 Amazon Glue 数据目录和 Amazon Athena。在不提供 Amazon Glue 的区域内,Athena 使用内部目录。
问:为什么要升级到 Amazon Glue 数据目录?
Amazon Glue 是一项完全托管的 ETL 服务。Glue 有三个主要组件:1) 抓取程序,用于自动扫描数据源、识别数据格式和推断 schema;2) 完全托管的 ETL 服务,支持您转换数据并将其移动至多个目标;以及 3) 数据目录,用于存储有关 S3 或者符合 ODBC 或 JDBC 规范的数据存储中所存储的数据库和表的元数据信息。要发挥 Glue 的优势,您必须从使用 Athena 的内部数据目录升级为使用 Glue 数据目录。
- 统一的元数据存储库: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 数据目录的更多信息。
问:是否有升级到 亚马逊云科技 数据目录的分步指导?
有。您可以在此处查看分步指南。
何时该使用 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 Metastore。如果您正在使用 EMR 并且已有 Hive Metastore,则只需在 Amazon Athena 上执行 DDL 语句,即可开始查询数据,不会对您的 Amazon EMR 作业产生任何影响。
创建表、数据格式和分区
问:如何在 Amazon S3 上为我的数据创建表和 schema?
Amazon Athena 使用 Apache Hive DDL 定义表。您可以使用 Athena 控制台、通过 ODBC 或 JDBC 驱动程序、通过 API 或使用 Athena 创建表向导来运行 DDL 语句。如果将 Amazon Glue 数据目录与 Athena 配合使用,您还可以使用 Glue 抓取程序来自动推断 schema 和分区。Amazon Glue 抓取程序可连接到数据存储,使用分类器的优先级列表来提取数据和其他统计数据的 schema,然后使用该元数据填充 Glue 数据目录。抓取程序可以定期运行以检测新数据的可用性以及对现有数据的更改,包括对表定义的更改。抓取程序会自动将新表、新分区添加到现有表以及新版本的表定义。您可以自定义 Glue 抓取程序,以对自己的文件类型进行分类。
当您在 Amazon Athena 中创建新的表 schema 时,schema 将存储在数据目录中,并在执行查询时使用,但不会修改您存储在 S3 中的数据。Athena 采用称作“基于读取的 schema”的方法,它会在您执行查询时将 schema 投射到数据。这样就无需加载或转换任何数据了。了解有关创建表的更多信息。
问:Amazon Athena 支持哪些数据格式?
Amazon Athena 支持许多类型的数据格式,如 CSV、TSV、JSON 或文本文件等;此外,它还支持开源列式格式,如 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 使用 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(串行器/解串器)吗?
目前,您无法向 Amazon Athena 添加自己的 SerDe。感谢您的反馈!如果您希望添加任何 SerDe,请与 Athena 团队 (Athena-feedback@amazon.com) 联系
问:我使用 Spark/Hive 创建了 Parquet/ORC 文件。我可以通过 Athena 查询它们吗?
可以。您可以在 Athena 中读取通过 Spark 创建的 Parquet 和 ORC 文件。
问:我的数据来自 Kinesis Firehose。如何使用 Athena 查询?
如果您的 Kinesis Firehose 数据存储在 Amazon S3 中,您可以使用 Amazon Athena 进行查询。只需在 Athena 中为您的数据创建 schema 并开始查询即可。建议您将数据组织到分区中,以优化性能。您可以使用 ALTER TABLE DDL 语句添加由 Kinesis Firehose 创建的分区。了解有关分区的更多信息。
问:Amazon Athena 是否支持数据分区?
支持。Amazon Athena 允许您对任意列上的数据进行分区。分区能够限制每次查询扫描的数据量,从而节省成本并提高性能。您可以在 CREATE TABLE 语句中使用 PARTITIONED BY 子句指定分区 scheme。了解有关数据分区的更多信息。
问:如何在 Amazon Athena 中向现有的表添加新数据?
如果您的数据已分区,只要 Amazon S3 上有新数据可用,就需要运行元数据查询 (ALTER TABLE ADD PARTITION) 将此分区添加到 Athena。如果您的数据未分区,只需将新数据(或文件)添加到现有前缀,即可将数据自动添加到 Athena。了解有关数据分区的更多信息。
问:我在 Amazon S3 中存储着大量日志数据。可以使用 Amazon Athena 进行查询吗?
可以。通过 Amazon Athena 您可以方便地对现有日志数据运行标准 SQL 查询。Athena 直接从 Amazon S3 查询数据,因此无需移动或加载数据。只需使用 DDL 语句定义 schema,即可开始查询数据。
查询和数据格式
问:Amazon Athena 支持哪些类型的查询?
Amazon Athena 支持 ANSI SQL 查询。Amazon Athena 使用 Presto(一种开源的内存分布式 SQL 引擎),能够处理复杂的分析,包括大型联接、开窗函数和数组。
问:Athena 是否支持其他 BI 工具和 SQL 客户端?
支持。Amazon Athena 附带 ODBC 和 JDBC 驱动程序,可以将其与其他商业智能工具和 SQL 客户端一起使用。详细了解如何将 ODBC 或 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 允许您使用 Amazon Identity and Access Management (IAM) 策略、访问控制列表 (ACL) 和 Amazon S3 存储桶策略控制对您数据的访问。通过 IAM 策略,您可以授予 IAM 用户对 S3 存储桶的细化控制权。通过控制对 S3 中数据的访问,您可以限制用户使用 Athena 查询数据。
问:Athena 是否可以查询 Amazon S3 中的加密数据?
可以,您可以查询使用 Amazon S3 托管加密密钥在服务器端加密的数据、使用 Amazon 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 费率向您收取这些结果集的费用。建议您监控这些存储桶,使用生命周期策略来控制保留多少数据。
问:使用 Amazon Glue 数据目录是否需要付费?
是。您需要单独支付使用 Amazon Glue 数据目录的费用。单击此处,详细了解 Glue 数据目录定价。