优化SPARQL查询以加载样本标签
以下查询从我的数据集中加载合同(合同在组织和合作伙伴之间) 此查询返回大约8000份合同,并立即返回(只需几秒钟)。现在,我需要加载组织和合作伙伴的标签/名称。可能有多个名字,我只需要一个。这是我的疑问:优化SPARQL查询以加载样本标签,sparql,rdf,virtuoso,Sparql,Rdf,Virtuoso,以下查询从我的数据集中加载合同(合同在组织和合作伙伴之间) 此查询返回大约8000份合同,并立即返回(只需几秒钟)。现在,我需要加载组织和合作伙伴的标签/名称。可能有多个名字,我只需要一个。这是我的疑问: SELECT ?contract ?organisation ?partner (SAMPLE(?organisationNames) AS ?organisationName) (SAMPLE(?partnerNames) AS ?partnerName) WHERE {
SELECT ?contract ?organisation ?partner
(SAMPLE(?organisationNames) AS ?organisationName)
(SAMPLE(?partnerNames) AS ?partnerName)
WHERE {
?organisation
a gr:BusinessEntity ;
rejstriky:contract ?contract .
?contract a rejstriky:Contract ;
rejstriky:partner ?partner .
?organisation gr:legalName ?organisationNames .
?partner gr:legalName ?partnerNames .
}
GROUP BY ?contract ?organisation ?partner
此查询突然需要几分钟才能完成
我做了一些实验,发现如果我决定使用单独的SPARQL调用(在一个批处理中使用40个名称)获取所有名称,只需不到2分钟(速度会明显加快)。不管怎样,如果我能够在几分之一秒内生成8000个项目,为每个项目加载两个标签应该不会花那么长时间
你对如何优化我的查询有什么想法吗?请注意,我使用的是Virtuoso。无法访问样本数据或Virtuoso,因此很难确定这是否有帮助,但您可以尝试避免使用样本
SELECT ?contract ?organisation ?organisationName ?partner ?partnerName
WHERE {
?organisation
a gr:BusinessEntity ;
rejstriky:contract ?contract .
?contract a rejstriky:Contract ;
rejstriky:partner ?partner .
{ SELECT ?organisationName WHERE { ?organisation gr:legalName ?organisationName . } LIMIT 1}
{ SELECT ?partnerName WEHRE {?partner gr:legalName ?partnerName . } LIMIT 1}
}
GROUP BY ?contract ?organisation ?organisationName ?partner ?partnerName
无法访问样本数据或专家,因此很难确定这是否有帮助,但您可以尝试避免使用样本
SELECT ?contract ?organisation ?organisationName ?partner ?partnerName
WHERE {
?organisation
a gr:BusinessEntity ;
rejstriky:contract ?contract .
?contract a rejstriky:Contract ;
rejstriky:partner ?partner .
{ SELECT ?organisationName WHERE { ?organisation gr:legalName ?organisationName . } LIMIT 1}
{ SELECT ?partnerName WEHRE {?partner gr:legalName ?partnerName . } LIMIT 1}
}
GROUP BY ?contract ?organisation ?organisationName ?partner ?partnerName
谢谢你,好主意。但是查询花了将近一个小时才完成,然后返回了一个空名称的结果。谢谢,好主意。但是查询花了将近一个小时才完成,然后返回了一个空名称的结果。这看起来像是Virtuoso的查询计划器中的一个小问题——没有明显的理由需要这么长时间。您是否尝试过直接报告问题并查看他们是否有解决方案?第一个猜测是Virtuoso中的查询优化错误。您是否在没有
样本的情况下测试了速度?也就是说,将选择
列表更改为?合同?组织?合作伙伴?组织名称?合作伙伴名称
?您还可以将此问题提交给包括Virtuoso开发团队几名成员的用户……我发现数据集有点损坏。大约1000个合作伙伴由一个URI表示,但该URI附带了1000个不同的法定名称。如果我删除聚合,它的运行速度实际上要快3倍,但它会生成4100万个条目。也许这就是造成样本聚合混乱和查询速度减慢的原因。然而,我仍然认为,无论我选择的集合大小如何,为8000个项目选择一个样本值应该是相当快的。你认为呢?好的,显式过滤掉代表1000个不同合作伙伴的单一URI将查询持续时间缩短到几秒钟左右。我来看看能否修复数据集。谢谢你的帮助!这看起来像是Virtuoso的查询计划器中的一个小问题——没有明显的理由需要这么长时间。您是否尝试过直接报告问题并查看他们是否有解决方案?第一个猜测是Virtuoso中的查询优化错误。您是否在没有样本的情况下测试了速度?也就是说,将选择
列表更改为?合同?组织?合作伙伴?组织名称?合作伙伴名称
?您还可以将此问题提交给包括Virtuoso开发团队几名成员的用户……我发现数据集有点损坏。大约1000个合作伙伴由一个URI表示,但该URI附带了1000个不同的法定名称。如果我删除聚合,它的运行速度实际上要快3倍,但它会生成4100万个条目。也许这就是造成样本聚合混乱和查询速度减慢的原因。然而,我仍然认为,无论我选择的集合大小如何,为8000个项目选择一个样本值应该是相当快的。你认为呢?好的,显式过滤掉代表1000个不同合作伙伴的单一URI将查询持续时间缩短到几秒钟左右。我来看看能否修复数据集。谢谢你的帮助!