本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
SPARQL在 Neptune 中使用扩展程序进行联合查询 SERVICE
Amazon Neptune 完全支持使用该SPARQL关键字的联合查询扩展插件。SERVICE
(有关更多信息,请参阅 SPARQL1.1 联合查询
注意
从版本 1.0.1.0.200463.0(2019 年 10 月 15 日) 开始,此特征可用。
该SERVICE
关键字指示SPARQL查询引擎对远程SPARQL端点执行部分查询并撰写最终的查询结果。只能执行 READ
操作。不支持 WRITE
和 DELETE
操作。Neptune 只能对在其虚拟私有云 () VPC 中可访问的SPARQL端点运行联合查询。但是,您也可以在中使用反向代理VPC,使外部数据源可以在中访问VPC。
注意
当SPARQLSERVICE
用于将查询联合到同一个集群中的两个或多个 Neptune 集群时,必须将安全组配置为允许所有这些 Neptune 集群相互通信。VPC
重要
SPARQL1.1 Federation 在向外部SPARQL端点传递查询和参数时代表您发出服务请求。您有责任验证外部SPARQL端点是否满足应用程序的数据处理和安全要求。
Neptune 联合查询的示例
以下简单示例显示了SPARQL联合查询的工作原理。
假设某位客户向 Neptune-1(位于 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
),使用结果在 Q-2 (?person foaf:knows ?friend
)中对?person
求解,然后将生成的模式转发给 Neptune-2(位于http://neptune-2:8182/sparql
)。Neptune-2 对 Q-2 进行计算,并将结果发送回 Neptune-1。
Neptune-1 联接两个模式的解,并将结果发回给客户。
下图显示了该流程。
注意
默认情况下,优化器决定在查询执行的哪个时刻执行 SERVICE
指令。您可以使用 joinOrder 查询提示覆盖此位置。
Neptune 中联合查询的访问控制
Neptune 使用 AWS Identity and Access Management (IAM) 进行身份验证和授权。联合查询的访问控制可以涉及多个 Neptune 数据库实例。这些实例可能对访问控制有不同的要求。在某些情况下,这可能会限制您进行联合查询的能力。
请考虑上一节介绍的简单示例。Neptune-1 使用与调用它时相同的凭证调用 Neptune-2。
如果 Neptune-1 需要IAM身份验证和授权,但 Neptune-2 不需要,则只需让 Nep t une-1 获得相应的IAM权限即可进行联合查询。
如果 Neptune-1 和 Neptune-2 都需要IAM身份验证和授权,则需要为两个数据库附加IAM权限才能进行联合查询。两个集群还必须位于同一个 AWS 账户和同一区域。目前不支持跨区域和/或跨账户联合查询架构。
但是,如果 Ne ptune-1 未启用,但 Ne ptune IAM -2 已启用,则无法进行联合查询。原因是 Neptune-1 无法检索您的IAM凭证并将其传递给 Ne ptune-2 以授权查询的第二部分。