【问题标题】:SPARQL result set limit of 10000SPARQL 结果集限制为 10000
【发布时间】:2016-11-29 23:12:33
【问题描述】:

我运行了一个查询,我知道应该针对 Virtuoso 返回超过 10,000 行,但我只返回 10,000 行。我没有在查询末尾使用LIMIT 子句。该数字是默认结果集限制吗?如何覆盖它?

我的查询是:

select distinct ?s { ?s ?p ?o. }

【问题讨论】:

  • 只有当它是您自己维护的 Virtuoso 三重存储时,您才能通过 virtuoso.ini 文件中的配置参数来增加大小。否则,LIMIT n OFFSET m 又名分页必须完成。

标签: sparql virtuoso


【解决方案1】:

如果这是您自己的实例,您可以编辑 INI 文件中的 ResultSetMaxRows 设置。

如果这是其他人的实例,他们可能愿意/能够调整该设置。如果没有,您可以使用LIMIT/OFFSET(和ORDER BY)子句来逐步检查整个结果集。

【讨论】:

  • 与此同时,我意识到在一个 HTTP 响应中获得如此巨大的有效负载(1M+ 三倍)可能不是一个好主意,因此我使用OFFSETLIMIT 设计了一个批处理分解以继续上一次迭代结束
  • 请记住,如果没有适当的 ORDER BY 子句,行可能会以任何顺序返回,这可能会随着每次 OFFSET/LIMIT 迭代而改变,因此省略它可能意味着您有重复和/ 或在完整翻页后缺少行!
  • 我正在考虑这个问题。在上面的查询中,我应该只做ORDER BY ?s 吗?
  • 但我认为这是不安全的,以防有人在我的进程运行时更改数据。有没有办法比上一批中的最后一项做得更大?也许这是一个单独线程的主题
  • 或者更好的是,如果服务器捕获该数据,是否可以按每个三元组创建的时间戳排序?
【解决方案2】:

很可能是服务设置的默认值,用于限制用户在不知情的情况下使用 SPO 查询下载整个存储库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2022-11-04
    • 1970-01-01
    • 2016-03-22
    • 2015-08-17
    • 2018-10-25
    • 1970-01-01
    相关资源
    最近更新 更多