【发布时间】:2018-06-04 16:08:57
【问题描述】:
考虑一个带有 where 子句的 SPARQL 聚合查询,该子句仅由三重模式和 filter 语句组成。
三重模式的顺序或filters 的顺序是否会影响结果(而不是性能)?我非常相信它不会影响结果的有效性。但也许有人可以澄清为什么?另外,group by 中变量的顺序是否会影响结果的有效性?我也不这么认为,但也许有人可以澄清原因?
下面的例子只是为了说明;我问的是一般性。
该查询计算按眼睛颜色和国家/地区分组的人数,并应用几个filters。查询只包含这四种三元组模式(以点结尾的每一行都是一个三元组模式,即带变量的三元组)
?p wdt:P26 ?human.
?p wdt:P27 ?country.
?human wdt:P31 wd:Q5.
?human wdt:P1340 ?eyeColor.
还有这两个filters:
FILTER (?country != wd:Q142)
FILTER (?eyeColor != wd:Q17122705)
WHERE 子句不包含任何OPTIONAL、UNION、MINUS、...或任何其他构造函数;只有三重模式和过滤器。
SELECT ?eyeColor (COUNT(?human) AS ?count) ?country
WHERE
{
?p wdt:P26 ?human.
?p wdt:P27 ?country.
?human wdt:P31 wd:Q5.
?human wdt:P1340 ?eyeColor.
FILTER (?country != wd:Q142)
FILTER (?eyeColor != wd:Q17122705)
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
GROUP BY ?eyeColor ?country
我的问题再次:如果我们以任何方式更改 WHERE 子句中六个元素的顺序,这是否会影响结果(不仅在此查询中,而且对于类似的查询结构方面)?关于GROUP BY 中变量的顺序是否会影响结果的相同问题,例如GROUP BY ?country ?eyeColor 而不是GROUP BY ?eyeColor ?country。再一次,我问的是笼统的,不仅仅是这个案例查询。
【问题讨论】:
-
给出代码(查询)示例来澄清你的问题。
-
我添加了一个例子,但这只是为了澄清,我问的是一般的概念。
-
如果没有查询优化器,显然 FILTER 的顺序可能会影响执行性能。 AFAIK,所有三重存储都进行一些查询计划+优化,特别是类似于 SQL 数据库的过滤器推送等。组的不同顺序完全是一回事,这显然会在您创建和聚合不同组时影响结果。
-
关于三元组和过滤器的顺序,我只问结果,请忘记任何性能/优化细节。
-
关于分组,为什么会有影响?如果我要求蓝眼睛和意大利人(按 ?eye Color ?country 分组),蓝眼睛的意大利人(按 ?country ?eyeColor 分组)的数量会改变吗?为什么一个组的解决方案的成员资格会随着顺序而改变?
标签: sparql