将 Athena 数据连接器用于外部配置单元存储 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

将 Athena 数据连接器用于外部配置单元存储

您可以使用外部 Hive 元存储的 Amazon Athena 数据连接器来查询 Amazon S3 中使用 Apache Hive 元存储的数据集。无需将元数据迁移到 Amazon Glue Data Catalog。在 Athena 管理控制台中,配置 Lambda 函数以与私有 VPC 中的 Hive 元存储进行通信,然后将它连接到元存储。从 Lambda 到 Hive 元存储的连接由私有 Amazon VPC 通道提供保护,并且不使用公共 Internet。您可以提供您自己的 Lambda 函数代码,也可以使用外部 Hive 元存储的 Athena 数据连接器的默认实施。

功能概览

利用适用于外部 Hive 元存储的 Athena 数据连接器,您可以执行以下任务:

  • 使用 Athena 控制台注册自定义目录并使用这些目录运行查询。

  • 为不同的外部 Hive 元存储定义 Lambda 函数,并在 Athena 查询中联接它们。

  • 使用Amazon Glue Data Catalog和您的外部 Hive 元存储在同一 Athena 查询中。

  • 在查询执行上下文中指定目录作为当前默认目录。这样一来,便无需在查询中将目录名称置于数据库名称的前面。您可以使用 database.table,而不是使用语法 catalog.database.table

  • 使用各种工具运行引用外部 Hive 元存储的查询。可以使用 Athena 控制台、Amazon CLI,Amazon开发工具包、Athena API 以及更新了 Athena JDBC 和 ODBC 驱动程序。更新后的驱动程序支持自定义目录。

API 支持

Athena 外部 Hive 元存储的 Athena 数据连接器包含对目录注册 API 操作和元数据 API 操作的支持。

  • Catalog 注册— 为外部 Hive 元存储注册自定义目录,联合身份数据源

  • Metadata— 使用元数据 API 提供Amazon Glue以及您向 Athena 注册的任何目录。

  • Athena JAVA SDK 客户端— 使用目录注册 API、元数据 API 和目录支持StartQueryExecution操作更新后的 Athena Java SDK 客户端。

参考实施

Athena 提供 Lambda 函数的参考实施,该函数连接到外部 Hive 元存储。参考实施在 GitHub 上作为 Athena Hive 元存储的开源项目提供。

参考实施在 Amazon Serverless Application Repository (SAR) 中作为以下两种 Amazon SAM 应用程序提供。您可以在 SAR 中使用这两种应用程序之一来创建 Lambda 函数。

  • AthenaHiveMetastoreFunction— Uber Lambda 函数.jar文件。一个 “优步” JAR(也称为具有依赖关系的胖 JAR 或 JAR)是一个.jar文件,该文件在单个文件中同时包含 Java 程序及其依赖关系。

  • AthenaHiveMetastoreFunctionWithLayer— Lambda 层和薄 Lambda 函数.jar文件。

Workflow

下图说明了 Athena 如何与外部 Hive 元存储进行交互。


                Athena 如何与外部 Hive 元存储进行交互。

在此工作流程中,您的数据库连接的 Hive 元存储位于您的 VPC 中。您使用 Hive Server2 通过 Hive CLI 管理 Hive 元存储。

使用 Athena 中的外部 Hive 元存储的工作流程包括以下步骤。

  1. 创建 Lambda 函数,将将 Athena 连接到 VPC 中的 Hive 元存储。

  2. 为 Hive 元存储注册唯一目录名称,并在账户中注册相应的函数名称。

  3. 当您运行使用目录名称的 Athena DML 或 DDL 查询时,Athena 查询引擎将调用与目录名称关联的 Lambda 函数名称。

  4. 使用 Amazon PrivateLink ,Lambda 函数与 VPC 中的外部 Hive 元存储进行通信,并接收对元数据请求的响应。Athena 使用外部 Hive 元存储中的元数据,就像使用默认中的元数据一样。Amazon Glue Data Catalog。

注意事项和限制

在为外部 Hive 元存储使用 Athena 数据连接器时,请考虑以下几点:

  • 对外部 Hive 元存储的 DDL 支持仅限于以下语句。

    • DESCRIBE TABLE

    • SHOW COLUMNS

    • SHOW TABLES

    • SHOW SCHEMAS

    • SHOW CREATE TABLE

    • SHOW TBLPROPERTIES

    • SHOW PARTITIONS

  • 您可以拥有的已注册目录的最大数量为 1000。

  • 您可以使用 CTAS 从对外部 Hive 元存储的查询中创建 Amazon Glue 表,但不能在外部 Hive 元存储上创建表。

  • 您可以使用 INSERT INTO 从对外部 Hive 元存储的查询中将数据插入 Amazon Glue 表,但不能将数据插入外部 Hive 元存储中。

  • Hive 视图与 Athena 视图不兼容,且不受支持。

  • 无法对 Hive 元存储进行 Kerberos 身份验证。

  • 若要将 JDBC 驱动程序与外部 Hive 元数据仓或联合查询,请包含MetadataRetrievalMethod=ProxyAPI在 JDBC 连接字符串中。有关 JDBC 驱动程序的信息,请参阅将 Athena 与 JDBC 驱动程序结合使用

Permissions

预构建和自定义数据连接器可能需要访问以下资源才能正常工作。检查您使用的连接器的信息,以确保您已正确配置 VPC。有关在 Athena 中运行查询和创建数据源连接器所需的 IAM 权限的信息,请参阅允许访问外部配置单元数据存储的 Athena 数据连接器允许 Lambda 函数访问外部 Hive 元存储

  • Amazon S3— 除了将查询结果写入 Amazon S3 中的 Athena 查询结果位置之外,数据连接器还会写入到 Amazon S3 中的溢出存储桶。此 Amazon S3 位置的连接和权限是必需的。有关更多信息,请参阅本主题后面的 Amazon S3 中的溢出位置

  • Athena— 需要访问权限才能检查查询状态并防止过度扫描。

  • Amazon Glue— 如果您的连接器使用Amazon Glue,以获取补充元数据或主元数据。

  • Amazon Key Management Service

  • 策略— Hive 元数据仓、Athena 查询联合和 UDF 需要除Amazon托管策略:AmazonAthenaFullAccess。有关更多信息,请参阅Athena 中的 Identity and Access Management

Amazon S3 中的溢出位置

由于limit,则大于阈值的响应会溢出到您在创建 Lambda 函数时指定的 Amazon S3 位置。Athena 直接从 Amazon S3 读取这些回复。

注意

Athena 不会删除 Amazon S3 上的响应文件。我们建议您设置保留策略以自动删除响应文件。