本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 SERVICE 扩展在 Neptune 中进行联合查询
Amazon Neptune 完全支持使用 SERVICE 关键字的 SPARQL 联合查询扩展。(有关更多信息,请参阅 SPARQL 1.1 联合查询
SERVICE 关键字指示 SPARQL 查询引擎针对远程 SPARQL 终端节点执行查询的一部分,并组成最终查询结果。只能执行 READ 操作。不支持 WRITE 和 DELETE 操作。Neptune 只能对在其虚拟私有云 (VPC) 中可访问的 SPARQL 端点运行联合查询。但是,您也可以在 VPC 中使用反向代理使外部数据源在 VPC 内可供访问。
注意
当使用 SPARQL SERVICE 将查询联合到同一 VPC 中的两个或更多 Neptune 集群时,必须将安全组配置为允许所有这些 Neptune 集群相互通信。
重要
将查询和参数传递到外部 SPARQL 终端节点时,SPARQL 1.1 Federation 代表您发出服务请求。您负责验证外部 SPARQL 终端节点是否满足应用程序的数据处理和安全要求。
Neptune 联合查询的示例
以下简单示例显示了如何使用 SPARQL 联合查询。
假设客户向 Neptune-1 at 发送了以下查询http://neptune-1:8182/sparql。
SELECT * WHERE { ?person rdf:type foaf:Person . SERVICE <http://neptune-2:8182/sparql> { ?person foaf:knows ?friend . } }
Neptune-1计算第一个查询模式 (Q-1)
?person rdf:type foaf:Person,即,使用结果解析?personQ-2 (?person foaf:knows ?friend),并将生成的模式转发给 at。 Neptune-2http://neptune-2:8182/sparqlNeptune-2评估Q-2并将结果发回。 Neptune-1
Neptune-1加入两种模式的解决方案,并将结果发送给客户。
下图显示了该流程。
注意
默认情况下,优化器决定在查询执行的哪个时刻执行 SERVICE 指令。您可以使用 joinOrder 查询提示覆盖此位置。
Neptune 中联合查询的访问控制
海王星使用 Amazon Identity and Access Management (IAM) 进行身份验证和授权。联合查询的访问控制可以涉及多个 Neptune 数据库实例。这些实例可能对访问控制有不同的要求。在某些情况下,这可能会限制您进行联合查询的能力。
以上一节中介绍的简单示例为例。Neptune-1Neptune-2使用与调用时相同的凭证进行呼叫。
如果Neptune-1需要 IAM 身份验证和授权,但Neptune-2不需要,您只需要适当的 IAM 权限Neptune-1即可进行联合查询。
如果Neptune-1且Neptune-2两者都需要 IAM 身份验证和授权,则需要为两个数据库附加 IAM 权限才能进行联合查询。两个集群还必须在同一个 Amazon 账户和同一个区域中。 Cross-region and/or 目前不支持跨账户联合查询架构。
但是,如果Neptune-1不是 IAM-enabled 但Neptune-2是,则无法进行联合查询。原因是Neptune-1无法检索您的 IAM 证书并将其传递Neptune-2给以授权查询的第二部分。