Loading...

案例中心

使用 Amazon Athena Neptune 连接器查询 RDF 图和使用 Gremlin 查询

使用 Amazon Athena Neptune 连接器查询RDF图和属性图

关键要点

Amazon Athena 的数据联邦查询功能让用户能够同时访问包括 Amazon Neptune 的多种数据来源。Athena Neptune 连接器 现支持通过 SPARQL 查询 RDF 数据,同时支持 Gremlin 查询属性图数据。本文提供如何集成和使用 Athena Neptune 连接器以查询 Neptune 数据集的逐步指南。

在现代分析中,能让 Amazon Athena 从多个数据源获取数据尤为重要,因此 Athena 推出了 联邦查询 功能,使其能够连接多个来源,包括来自 AWS 的托管图数据库服务 Amazon Neptune。

要在 Athena 中查询 Neptune 数据库,你可以使用 Amazon Athena Neptune 连接器,这是一个连接到 Neptune 集群并代表 Athena 执行查询的 AWS Lambda 函数。我们在文章 使用 Amazon Neptune Amazon Athena 联邦查询 和 Amazon QuickSight 构建交互式图数据分析及可视化 中介绍了这个连接器。本篇文章讨论连接器的两个新特性:

一元机场配置文件对 RDF 的支持:Neptune 支持两种通用的图表示法:标记属性图和 资源描述框架 (RDF)。自首次发布以来,该连接器允许使用 Apache TinkerPop Gremlin 查询语言来查询 Neptune 中的属性图数据。现在,连接器还支持使用 SPARQL 查询语言查询 Neptune 中的 RDF 数据。属性图的自定义视图:之前,连接器只能对顶点和边执行预配置的 Gremlin 查询,而现在提供了指定自定义 Gremlin 查询的灵活性。

接下来,我们将提供使用 Gremlin 和 SPARQL 查询 Neptune 集群以及集成 Athena Neptune 连接器的新版本的逐步实施指南。

解决方案概述

要实施此解决方案,您需要创建一个 Neptune 集群,加载样本数据集,并集成 Athena Neptune 连接器以使用 Gremlin 和 SPARQL 查询数据。请注意,该解决方案中使用的 AWS 服务在部署期间会产生费用。

以下图表代表了该解决方案的高层次架构。

工作流程包括以下步骤:

终端用户可以使用 Neptune 笔记本将样本数据集加载到 Neptune 集群的图数据库中。在 AWS Glue 数据目录中配置表,以存储查询结果的架构元数据,并在 Athena 中显示为表格。部署 Athena Neptune 连接器,这是设置过程中的一次性活动。终端用户使用 Athena 查询新创建的数据目录中的表,此时会调用 Lambda 函数查询 Neptune 集群。

您可以针对属性图和 RDF 重复步骤 24,以验证 Gremlin 和 RDF 的查询功能。

查询 Neptune 属性图数据

以下步骤演示如何使用 Athena Neptune 连接器的新功能来查询属性图数据。您可以在连接器可用的任何 AWS 区域进行部署。

创建 Neptune 数据库集群并加载样本数据集

首先,设置 Neptune 数据库集群。如果您已经有集群,可以跳过此步骤。

在 Neptune 控制台中,选择 启动 Amazon Neptune。选择一个引擎类型在本篇文章中,我们选择 无服务器。

在 DB 集群名称中输入名称例如,neptuneserverlessdb。

选择集群的虚拟私有云 (VPC) 和私有子网。

其余配置保持默认。

有关如何使用 AWS 管理控制台 手动创建集群的详细信息,请参见 使用 AWS 管理控制台启动 Neptune DB 集群。确保集群与 Amazon S3 和 AWS Glue 具有网络连接。其中一种方法是创建 AWS Glue VPC 端点。请参考 Amazon S3 的网关端点 和 AWS Glue 和接口 VPC 端点 (AWS PrivateLink) 以进行设置。

使用 Amazon Athena Neptune 连接器查询 RDF 图和使用 Gremlin 查询

配置数据目录表

在部署 Athena Neptune 连接器之前,您需要创建数据目录的数据库和表,这些将映射到 Neptune 集群数据集。您可以使用 AWS CloudFormation 来完成。

根据以下步骤使用提供的 CloudFormation 模板 部署数据目录的数据库和表,以获取航空航线数据集:

在 AWS CloudFormation 控制台中,选择 创建堆栈 和 使用新资源标准。选择 选择现有模板 和 Amazon S3 URL。选择 下一步,保持默认设置,然后继续创建堆栈。

部署过程可能需要几分钟时间。完成后,导航到 AWS Glue 控制台,验证数据库及其相应的表是否已创建。以下截图显示通过 CloudFormation 模板创建的两个数据库。

以下截图显示在 graphdatabase 下创建的表。

我们来看看 customairport 表。此表使用以下 Gremlin 查询定义的自定义视图:

gremlingV()hasLabel(airport)as(source)out(route)as(destination)select(source destination)by(code)limit(10)

此查询查找标记为 airport 的节点,将这些节点称为 source。从这些节点出发,沿着标记为 route 的边查找目标节点,并将其称为 destination。查询通过 select 返回源和目标节点。更具体地说,它返回这些节点的 code 属性。

在 AWS Glue 表中,source 和 destination 是列,已从查询进行映射。

除了自定义视图外,连接器还支持顶点和边表。您可以通过指定顶点标签来配置顶点表。表的列包括顶点 ID 及该标签的顶点属性。连接器运行一个 Gremlin 查询,查找具有该标签的顶点。它将顶点 ID 和属性映射到列结构。airport 是顶点表的示例。

同样,您可以通过指定边标签来配置边表。表的列包括边 ID、源和目标顶点 ID 以及边属性。连接器运行一个 Gremlin 查询,查找具有该标签的边,并将结果映射回列结构。route 是边表的示例。

部署属性图的 Athena Neptune 连接器

您可以通过 AWS 无服务器应用程序库 部署 Neptune 连接器。这需要几个参数。按照 GitHub repo 中的 逐步说明 部署 Athena Neptune 连接器。

以下截图显示在为属性图部署 NeptuneAthenaConnector 堆栈时要指定的输入参数。

每个设置的目的在页面上都有说明。以下是一些额外的注意事项:

SpillBucket:溢出存储桶为连接器使用,主要用于存储不适合内存的结果。请提供同一账户和区域中的 S3 存储桶名称。LambdaMemory 和 LambdaTimeout:这两个值应设置为最大。连接器内存密集,因为它可能会从 Neptune 数据库中带回大量结果,因此在连接器中允许较长的超时时间。SubnetIds:我们建议将连接器部署到 Neptune 集群使用的私有子网之一。SecurityGroupIds:创建新的安全组,或使用 Neptune 集群所用的相同安全组。有关更多详细信息,请查阅 部署 Amazon Athena Neptune 连接器。

使用 Athena 查询 Neptune 属性图数据库

要查询属性图数据库,请完成以下步骤:

在 Athena 控制台中,选择导航面板中的 数据源。选择 创建数据源。选择 Amazon Neptune。

选择 下一步。

在 数据源名称中输入名称例如,neptunesourceconnector。

在 Lambda 函数中输入 athenacatalogneptune Lambda 函数的 ARN。选择 下一步。查看配置并选择 创建数据源。导航到 Athena 查询编辑器。选择 neptunesourceconnector 作为数据源,并将 graphdatabase 作为数据库名称。输入以下查询:

sqlSELECT FROM graphdatabasesourcetodestinationairport limit 10

该查询应生成以下输出。这是对 AWS Glue 表的 SQL 查询,连接器根据自定义视图将其映射到 Gremlin 查询。结果为 Neptune 数据库中的数据,并采用 AWS Glue 表的列结构返回。

查询 RDF 图数据

与属性图类似,Athena Neptune 连接器也支持使用 SPARQL 查询 RDF 图数据。本节将详细说明查询 RDF 图数据的步骤。设置过程与上一节中描述的相似。

向 RDF 图加载样本数据集

请参考以下 说明 从笔记本实例中为 RDF 种子航空航线数据集。

配置 AWS Glue 表

我们为属性图部署的 CloudFormation 模板已经创建了 graphdatabaserdf 数据库和相应的表。

导航到 AWS Glue 控制台以确认 graphdatabaserdf 数据库及其相应的表已创建,以下截图显示了这一确认。

创建了三个表。每个表展示了连接器支持的 RDF 查询模式。我们来讨论这些模式以及表是如何展示它们的。

查找某个类的资源

一种模式是定位给定类的资源。对于每个资源,可以找到其数据类型属性的值。

airportrdf 表配置为返回来自 Neptune 的机场资源详细信息。您可以使用以下截图所示的表属性进行配置。

以下是连接器执行的 SPARQL 查询:

sparqlPREFIX class http//kelvinlawrencenet/airroutes/class/PREFIX prop http//kelvinlawrencenet/airroutes/datatypeProperty/

SELECT id type code icao WHERE { id rdftype classAirport id proptype type id propcode code id proptype icao }

连接器使用以下属性构建此查询:

componenttype 设置为 rdf,表示此表用于 RDF,而非属性图。querymode 设置为 class,表示连接器将查找具有特定类型的资源。它指示连接器以上述查询的形式构建 SPARQL 查询。classuri 指定该类型,值为 classAirport。在 RDF 中,资源具有 URI,即类似于网页的 URL,长度较长,因此可以使用称为 curie 的简写形式。在 classAirport 中,class 是前缀,代表一长串字符串的占位符。prefixclass 给出了类的长格式,即 http//kelvinlawrencenet/airroutes/class/。于是,classuri 解析为 http//kelvinlawrencenet/airroutes/class/Airport。subject 为 id,在列结构中,id 列是资源本身的 URI。stripuri 为 true,表示如果结果中的任何值是 URI,则连接器只需保留 URI 的本地名称。我们只希望在结果中显示本地名称。为了获取其余列,我们需要查找主题的数据类型属性。predsprefix 提供数据类型属性的谓词。我们将其设置为 prop。例如,查询三元组 id proptype type 以获取类型列,我们返回 type 并映射到 type。prefixprop 设置为 http//kelvinlawrencenet/airroutes/datatypeProperty/。prop 是这个较长字符串的前缀。

属性名称与表的列结构相匹配。以下截图显示了表的列。

创建自定义视图

另一种模式是将自定义的 SPARQL 查询映射到定义的表格列结构的结果集。routerdf AWS Glue 表返回来自 Neptune 的机场航线。

以下截图显示了表属性。

属性设置如下:

querymode 为 sparql,表示连接器运行自定义 SPARQL 查询。sparql 属性提供该查询。它是一个相当长的 SELECT 查询,引用两个前缀:op 和 prop。同时返回 incode、outcode 和 dist。prefixprop 提供 prop 的长格式。prefixop 提供 op 的长格式。

以下截图展示该查询返回值的列结构。

![rdfroute 列](https//d2908q01vomqb2cloudfrontnet/887309d048beef83ad3eabf2

©  - All Rights Reserved 免费加速器网站 .