Amazon Athena Neptune 连接器 - Amazon Athena

Amazon Athena Neptune 连接器

Amazon Neptune 是一项快速、可靠且完全托管式的图数据库服务,可帮助您轻松构建和运行适用于高度互连数据集的应用程序。Neptune 的核心是一个专门打造的高性能图数据库引擎,它经过优化,可存储数十亿个关系并能以毫秒级延迟进行图形查询。有关更多信息,请参阅《Neptune 用户指南》。

Amazon Athena Neptune 连接器使 Athena 能够与您的 Neptune 图数据库实例进行通信,从而使您的 Neptune 图数据可以通过 SQL 查询访问。

如果您在账户中启用了 Lake Formation,则您在 AWS Serverless Application Repository 中部署的 Athena 联合身份 Lambda 连接器的 IAM 角色必须在 Lake Formation 中具有 AWS Glue Data Catalog 的读取权限。

先决条件

使用 Neptune 连接器需要以下三个步骤。

限制

目前,Neptune 连接器具有以下限制。

  • 不支持投影列,包括主键(ID)。

设置 Neptune 集群

如果您现在没有 Amazon Neptune 集群,或者您要使用的这种集群中没有属性图数据集,则您必须设置一个。

确保您在托管 Neptune 集群的 VPC 中拥有互联网网关和 NAT 网关。Neptune 连接器 Lambda 函数使用的私有子网应该具有通过此 NAT 网关连接到互联网的路由。Neptune 连接器 Lambda 函数使用 NAT 网关与 AWS Glue 通信。

有关设置新 Neptune 集群并使用示例数据集加载它的说明,请参阅 GitHub.com 上的 Neptune 集群设置示例

设置 AWS Glue Data Catalog

与传统的关系数据存储不同,Neptune 图形数据库 (DB) 节点和边缘不使用集架构。每个条目均可具有不同字段和数据类型。但是,由于 Neptune 连接器从 AWS Glue Data Catalog 检索元数据,您必须使用所需架构创建一个包含多个表的 AWS Glue 数据库。在创建 AWS Glue 数据库和表之后,该连接器可以填充表(可用于来自 Athena 的查询)的列表。

启用不区分大小写的列匹配

要使用正确的大小写来解析 Neptune 表中的列名称,即使列名称在 AWS Glue 全部为小写,也可以将 Neptune 连接器配置为不区分大小写的匹配。

要启用此功能,将 Neptune 连接器 Lambda 函数环境变量 enable_caseinsensitivematch 设置为 true

为大小写的表名称指定 AWS Glue glabel 表参数

由于 AWS Glue 仅支持小写表名称,因此在为 Neptune 创建 AWS Glue 表并且 Neptune 表名称包含大小写时,需要指定 glabel AWS Glue 表参数。

在 AWS Glue 表定义中,包含 glabel 参数并将其值设置为采用原始大小写的表名称。这样可以确保在 AWS Glue 与 Neptune 表进行交互时保留正确的大小写。以下示例将 glabel 的值设置为表名称 Airport

glabel = Airport
设置 glabel AWS Glue 表属性以保留 Neptune 表的表名称大小写

有关设置 AWS Glue Data Catalog 以与 Neptune 配合使用的更多信息,请参阅 GitHub.com 上的设置 AWS Glue 目录

Performance

Athena Neptune 连接器可执行谓词下推,以减少查询扫描的数据量。但是,使用主键结果的谓词会导致查询失败。LIMIT 子句会减少扫描的数据量,但如果未提供谓词,则预期要使用包含 LIMIT 子句的 SELECT 查询,来扫描至少 16 MB 的数据。Neptune 连接器能够灵活地应对并发造成的节流。

传递查询

Neptune 连接器支持传递查询。可以使用此功能在属性图上运行 Gremlin 查询,也可以对 RDF 数据运行 SPARQL 查询。

要使用 Neptune 创建传递查询,请使用以下语法:

SELECT * FROM TABLE( system.query( DATABASE => 'database_name', COLLECTION => 'collection_name', QUERY => 'query_string' ))

以下示例 Neptune 传递查询会筛选带有代码 ATL 的机场。双引号用于转义。

SELECT * FROM TABLE( system.query( DATABASE => 'graph-database', COLLECTION => 'airport', QUERY => 'g.V().has(''airport'', ''code'', ''ATL'').valueMap()' ))

其他 资源

有关此连接器的更多信息,请访问 GitHub.com 上的相应站点