sparql 连接查询解释它是如何工作的?
Posted
技术标签:
【中文标题】sparql 连接查询解释它是如何工作的?【英文标题】:sparql join query explanation hows its working? 【发布时间】:2014-05-06 16:30:26 【问题描述】:我的查询:
select ?x ?z
where
?x <http://purl.uniprot.org/core/name> ?y .
?x <http://purl.uniprot.org/core/volume> ?z .
?x <http://purl.uniprot.org/core/pages> "176-186" .
我需要为此查询制作自定义解析器。
当我在 jena 模型上执行此查询时,它返回一条记录。 谁能解释一下这个查询实现?
我把这个查询分成三个部分:
select ?x ?y where ?x <http://purl.uniprot.org/core/name> ?y .
Total Records Found : 3034
select ?x ?z where ?x <http://purl.uniprot.org/core/name> ?y . ?x <http://purl.uniprot.org/core/volume> ?z .
Total Records Found : 2679
select ?x ?z where ?x <http://purl.uniprot.org/core/name> ?y . ?x <http://purl.uniprot.org/core/volume> ?z . ?x <http://purl.uniprot.org/core/pages> "176-186" .
Total Records Found : 1
请帮我制作自定义查询解析器。
【问题讨论】:
【参考方案1】:您正在尝试计算三个三元组模式的连接。关于通过 Apache Hadoop 实现连接的论文将是有用的背景。
了解 Apache Spark 和弹性分布式数据集 (RDD) 概念可能会有所帮助。
考虑每个模式的可能选择性也很重要 - 正如 Joshua 所说,“页面”模式很可能会产生一个独特的解决方案,并且使用它来简单地查找“名称”和“卷”中的每一个并不要求很高任务。
ARQ 的内存算法并非旨在实现 Hadoop 上所需的最大独立并行度。合并连接(或排序合并连接)对数据进行两次可并行访问。
您可以通过扩展类 OpExecutor
在基本模式级别或整个代数执行级别或两者之间的任何点扩展 ARQ。
【讨论】:
【参考方案2】:听起来你在问为什么
select ?x ?z where
?x <http://purl.uniprot.org/core/name> ?y . # (a)
?x <http://purl.uniprot.org/core/volume> ?z . # (b)
?x <http://purl.uniprot.org/core/pages> "176-186" . # (c)
只返回一个结果,而每一行单独返回更多。 SPARQL 中的三重模式是结合的:非可选模式必须与数据匹配才能返回结果。因此,您要查询 ?x
和 ?z
的值,其中 ALL 以下各项成立:
?x
的名称为 ?y
,AND
?x
对音量有一定的价值,AND
?x
的页面具有特定值“176-186”。
根据属性的名称,听起来您正在查询一些书目信息。毫不奇怪,在给定的书目数据库中,可能只有一篇文章的页面正好是“176-186”,因为这是一个非常具体的值。
【讨论】:
【参考方案3】:已编辑以包含正确的代数链接
我能提供的最佳建议是查看Jena documentation for ARQ's SPARQL Algebra 并在该级别派生您的自定义评估引擎。另一个可能提供信息的参考是W3 SPARQL Algebra。
似乎(从您选择的标签中)您打算执行分布在整个 map-reduce 作业中的查询操作,并且您正在查看代数应用的具体示例作为概念验证.如果您的意图是将其集成到 Jena 的查询评估中,那么您将需要手动探索 Jena 的现有系统,以了解其行为方式的原因。
【讨论】:
以上是关于sparql 连接查询解释它是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章