在 Neptune 中使用SERVICE扩展名进行 SPARQL 联合查询 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 Neptune 中使用SERVICE扩展名进行 SPARQL 联合查询

Amazon Neptune 完全支持使用SERVICE关键字的 SPARQL 联合查询扩展程序。(有关更多信息,请参阅 SPARQL 1.1 联合查询。)

注意

此功能从开始可用1.0.1.0.200463.0 版本 (2019-10-15)

SERVICE 关键字指示 SPARQL 查询引擎针对远程 SPARQL 终端节点执行查询的一部分,并组成最终查询结果。只有READ操作才是可能的。 WRITE并且不支持DELETE操作。Neptune 只能对其虚拟私有云 (VPC) 内可访问的 SPARQL 终端节点运行联合查询。但是,您也可以在 VPC 中使用反向代理使外部数据源在 VPC 内可供访问。

注意

当使用 SPARQLSERVICE 将查询联合到同一 VPC 中的两个或多个 Neptune 集群时,必须将安全组配置为允许所有这些 Neptune 集群相互通信。

重要

将查询和参数传递到外部 SPARQL 终端节点时,SPARQL 1.1 Federation 代表您发出服务请求。您负责验证外部 SPARQL 终端节点是否满足应用程序的数据处理和安全要求。

Neptune 联邦查询的示例

以下简单示例显示了如何使用 SPARQL 联合查询。

假设客户在以下地址向 Ne ptune-1 发送了以下查询http://neptune-1:8182/sparql

SELECT * WHERE { ?person rdf:type foaf:Person . SERVICE <http://neptune-2:8182/sparql> { ?person foaf:knows ?friend . } }
  1. Ne@@ ptune-1 评估第一个查询模式 (Q-1),即,使用结果在 Q-2 (?person foaf:knows ?friend)?person 中进行解析,并将生成的模式转发给 Nept une-2http://neptune-2:8182/sparql?person rdf:type foaf:Person

  2. 海王星2Q-2 进行评估,并将结果发送回海王星-1

  3. Ne@@ ptune-1 加入了这两种模式的解决方案,并将结果发回给客户。

下图显示了该流程。


        显示评估 SPARQL 联合查询模式并将响应发送回客户端的流程图。
注意

“默认情况下,优化器确定在查询执行的哪一时刻执行SERVICE指令。您可以使用joinOrder查询提示覆盖此位置。

Neptune 中联合查询的访问控制

Neptune 使用Amazon Identity and Access Management (IAM) 进行身份验证和授权。联合查询的访问控制可能涉及多个 Neptune 数据库实例。这些实例可能对访问控制有不同的要求。在某些情况下,这可能会限制您进行联合查询的能力。

考虑上一节介绍的简单示例。Ne@@ ptune-1 使用与调用时相同的凭据调用 Neptune-2

  • 如果 Neptune-1 需要 IAM 身份验证和授权,而 Ne ptune-2 不需要,那么您只需要适当的 IAM 权限即可让 Ne ptune-1 进行联合查询。

  • 如果 Neptune-1Neptune-2 都需要 IAM 身份验证和授权,则您需要为这两个数据库附加 IAM 权限才能进行联合查询。

  • 但是,在 Ne ptune-1 未启用 IAM 而是 Ne ptune-2 的情况下,则无法进行联合查询。原因是 Neptune-1 无法检索您的 IAM 凭证并将其传递给 N eptune-2 以授权查询的第二部分。