SPARQL AVG函数无法取值,GraphMem存储后查询异常咨询
问题排查方案

我的查询语句如下:
PREFIX om: <http://www.ontology-of-units-of-measure.org/resource/om-2/> PREFIX sosa: <http://www.w3.org/ns/sosa/> SELECT (AVG(?value) AS ?avgvalue) WHERE { GRAPH ?g { ?speed sosa:isResultOf <https://assist-iot.eu/pilot2_rdf/obs/wind_speed> ; om:hasNumericalValue ?value } }
实际场景:图数据来源于Trig文件,我读取该文件后将数据存入GraphMem中。直接查询原始图数据时一切正常,但存入GraphMem后查询无法获取AVG计算值,请问是否是图存储环节出现问题?
排查步骤:
- 验证数据完整性
先确认GraphMem中是否完整导入了所有相关三元组,执行以下查询对比原始数据的结果:
PREFIX om: <http://www.ontology-of-units-of-measure.org/resource/om-2/> PREFIX sosa: <http://www.w3.org/ns/sosa/> SELECT ?g ?speed ?value WHERE { GRAPH ?g { ?speed sosa:isResultOf <https://assist-iot.eu/pilot2_rdf/obs/wind_speed> ; om:hasNumericalValue ?value } }
如果结果数量或内容和原始Trig文件查询不一致,说明导入过程丢失了数据,需要检查GraphMem的Trig读取逻辑。
- 检查数值类型
AVG函数仅支持数值类型(如xsd:integer、xsd:double),若导入后?value被转为字符串则无法计算。执行以下查询确认数据类型:
PREFIX om: <http://www.ontology-of-units-of-measure.org/resource/om-2/> PREFIX sosa: <http://www.w3.org/ns/sosa/> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> SELECT ?value DATATYPE(?value) WHERE { GRAPH ?g { ?speed sosa:isResultOf <https://assist-iot.eu/pilot2_rdf/obs/wind_speed> ; om:hasNumericalValue ?value } }
若类型不是数值型,需调整GraphMem的导入配置,确保保留原始数据的数值类型。
- 测试聚合函数支持
部分轻量级内存图存储可能对跨图聚合存在限制,尝试限定到特定图查询:
PREFIX om: <http://www.ontology-of-units-of-measure.org/resource/om-2/> PREFIX sosa: <http://www.w3.org/ns/sosa/> SELECT (AVG(?value) AS ?avgvalue) WHERE { GRAPH <你的目标图URI> { ?speed sosa:isResultOf <https://assist-iot.eu/pilot2_rdf/obs/wind_speed> ; om:hasNumericalValue ?value } }
如果限定图后能得到结果,说明GraphMem对跨图聚合的支持有限,需调整查询方式或查看官方文档确认支持范围。
内容的提问来源于stack exchange,提问作者user24538401
相关产品推荐
相关产品推荐

