2014年10月7日火曜日

ソートすると1万件以降が表示できない

ORDER BY でソートをかけて、1万件目以降のデータを表示しようとすると、以下の様なエラーがでます。

ERROR : Virtuoso 22023 Error SR353: Sorted TOP clause specifies more then 10010 rows to sort. Only 10000 are allowed. Either decrease the offset and/or row count or use a scrollable cursor

LIMITとOFFSETの組み合わせで、1万1件目のみ表示にしても、とにかく1万件目以降を表示しようとするとダメです。

これを回避するには、virtuoso.iniの[Parameters]セクションにMaxTopSortedRowsというパラメータを追加しなさいと、いたるところで書かれています。

http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VirtSparqlCxmlFacetPivotBridge

でも、私の環境ではこのパラメータを認識せず、改善しませんでした。

さらに検索したところ、クエリを別にすればよいという裏ワザを見つけました。
これでうまくいきました。

https://github.com/mff-uk/DPUs/issues/78


具体的には、こんなかんじで、いつものSELECTはORDER BYまでにして、それを囲む感じで LIMITとOFFSET をつけます。

変更前
SELECT ?a ?b ?c WHERE {?a ?b ?c} ORDER BY ?a
LIMIT 10 OFFSET 10000

変更後
SELECT * WHERE {
  SELECT ?a ?b ?c WHERE {?a ?b ?c} ORDER BY ?a
}
LIMIT 10 OFFSET 10000

これでうまくいきました。


0 件のコメント:

コメントを投稿