sparql join查询解释如何工作?

时间:2014-05-06 16:30:27

标签: hadoop sparql bigdata jena

我的查询:

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

请帮我制作自定义查询解析器。

3 个答案:

答案 0 :(得分:2)

您正在尝试计算三种三重模式的连接。关于通过Apache Hadoop加入实现的论文将是有用的背景。

查看Apache Spark和弹性分布式数据集(RDD)概念可能会有所帮助。

考虑每种模式的可能选择性也很重要 - 正如约书亚所说,“页面”模式可能会产生一种独特的解决方案,并使用它来简单地查找每个“名称”和“数量”并不是一个苛刻的要求任务。

ARQ的内存中算法并非旨在实现您在Hadoop上所需的最大独立并行性。合并连接(或排序合并连接)对数据进行两次可并行访问。

您可以通过扩展类OpExecutor在基本模式级别或整个代数执行级别或其间的任何点扩展ARQ。

答案 1 :(得分:1)

听起来你在问为什么

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”,因为这是一个非常具体的值。

答案 2 :(得分:0)

已修改为包含正确的代数链接

我可以提供的最佳建议是查看Jena documentation for ARQ's SPARQL Algebra并在该级别推导您的自定义评估引擎。另一个可能提供信息的参考文献是W3 SPARQL Algebra

似乎(来自您选择的标签)您打算执行分布在map-reduce作业中的查询操作,并且您正在查看代数应用程序的特定示例作为概念验证。如果您的目的是将其集成到Jena的查询评估中,那么您需要手动浏览Jena的现有系统,以便了解它的行为方式。