繁体   English   中英

sparql join query解释如何工作?

[英]sparql join query explanation hows its working?

我的查询:

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" .
}

我需要为此查询创建自定义解析器。

当我在耶拿模型上执行此查询时,它返回一条记录。 谁能解释这个查询实现?

我将此查询分为三个部分:

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

请帮助我进行自定义查询解析器。

您正在尝试计算三个三重模式的连接。 关于基于Apache Hadoop的联接实现的论文将是有用的背景。

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

考虑每种模式的可能选择性也很重要-正如Joshua所说,“页面”模式很可能会产生一个独特的解决方案,用它来简单地查找“名称”和“卷”中的每一个并不是一项艰巨的任务。

ARQ的内存算法并不旨在实现最大的独立并行度,而这正是您在Hadoop上想要的。 合并联接(或排序-合并联接)对数据进行两个可并行访问。

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

听起来您在问为什么

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的值,其中满足以下所有条件

  • ?x的名称为?y并且
  • ?x具有一定的价值, 并且
  • 对于页面, ?x具有特定的值“ 176-186”。

根据属性的名称,听起来您正在查询一些书目信息。 在给定的书目数据库中,可能只有一篇文章的页面正好是“ 176-186”,这并不奇怪,因为这是一个非常具体的值。

编辑以包含正确的代数链接

我能提供的最佳建议是查看ARQ的SPARQL代数Jena文档,并在该级别上获得您的自定义评估引擎。 另一个可能有用的参考文献是W3 SPARQL代数

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM