You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GraphDB预加载24GB Trig文件遇格式错误,求忽略错误方案

问题:GraphDB Preload导入Trig文件时遇到NumberFormatException,如何忽略错误继续导入?

我尝试使用GraphDB的preload命令预加载一个约24GB的Trig备份文件,执行的Docker命令如下:

docker run -v $(pwd)/graphdb-data:/opt/graphdb/home \
       -v $(pwd)/preload:/opt/graphdb-import \
       --entrypoint /opt/graphdb/dist/bin/importrdf \
       -e GDB_JAVA_OPTS="-Xmx12g -Xms2g" \
       -e graphdb.page.cache.size=512m \
       -e graphdb.workers.limit=2 \
       -e graphdb.query.evaluation.mode=disk \
       -e graphdb.repository.index.enable=false \
       -e graphdb.compression.enabled=true \
       -e graphdb.use.native.jena.model=true -e graphdb.verify-literals=false \
       ontotext/graphdb:10.7.1 \
       preload -s --force --recursive -q /tmp -c /opt/graphdb-import/graphdb-repo.ttl /opt/graphdb-import/backup.trig

数据加载接近完成时,出现如下错误:

12:05:31.663 [resolver] INFO  c.ontotext.graphdb.importrdf.Preload - 310,000,000 statements ...
12:06:30.853 [resolver] INFO  c.ontotext.graphdb.importrdf.Preload - 320,000,000 statements ...
12:06:50.697 [monitor file position] INFO  c.ontotext.graphdb.importrdf.Preload - File backup.trig processed to position 23,774,363,648 from 26,664,959,488 bytes
12:07:54.327 [resolver] INFO  c.ontotext.graphdb.importrdf.Preload - 330,000,000 statements ...
12:08:50.702 [monitor file position] INFO  c.ontotext.graphdb.importrdf.Preload - File backup.trig processed to position 25,267,535,872 from 26,664,959,488 bytes
12:09:28.692 [resolver] INFO  c.ontotext.graphdb.importrdf.Preload - 340,000,000 statements ...
java.lang.NumberFormatException: empty String
    at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
    at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.base/java.lang.Double.parseDouble(Double.java:543)
    at org.eclipse.rdf4j.model.base.AbstractLiteral$NumberLiteral.parseDouble(AbstractLiteral.java:367)
    at java.base/java.util.Optional.map(Optional.java:265)
    at org.eclipse.rdf4j.model.base.AbstractLiteral.value(AbstractLiteral.java:100)
    at org.eclipse.rdf4j.model.base.AbstractLiteral.doubleValue(AbstractLiteral.java:141)
    at com.ontotext.graphdb.importrdf.Preload.processLiteral(Preload.java:2124)
    at com.ontotext.graphdb.importrdf.Resolver.write(Resolver.java:61)
    at com.ontotext.graphdb.importrdf.Resolver.createid(Resolver.java:124)
    at com.ontotext.graphdb.importrdf.Resolver.run(Resolver.java:203)
java.lang.InterruptedException
    at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2056)
    at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2090)
    at java.base/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:433)
    at com.ontotext.graphdb.importrdf.Preload$LocalHandler.handleStatement(Preload.java:434)
    at org.eclipse.rdf4j.rio.trig.TriGParser.reportStatement(TriGParser.java:248)
    at org.eclipse.rdf4j.rio.turtle.TurtleParser.parseObject(TurtleParser.java:453)
    at org.eclipse.rdf4j.rio.turtle.TurtleParser.parseObjectList(TurtleParser.java:374)
    at org.eclipse.rdf4j.rio.turtle.TurtleParser.parsePredicateObjectList(TurtleParser.java:347)
    at org.eclipse.rdf4j.rio.trig.TriGParser.parseTriples(TriGParser.java:236)
    at org.eclipse.rdf4j.rio.trig.TriGParser.parseGraph(TriGParser.java:163)
    at org.eclipse.rdf4j.rio.trig.TriGParser.parseStatement(TriGParser.java:115)
    at org.eclipse.rdf4j.rio.turtle.TurtleParser.parse(TurtleParser.java:164)
    at org.eclipse.rdf4j.repository.util.RDFLoader.loadInputStreamOrReader(RDFLoader.java:304)
    at org.eclipse.rdf4j.repository.util.RDFLoader.load(RDFLoader.java:249)
    at com.ontotext.load.GraphdbRDFLoader.load(GraphdbRDFLoader.java:89)
    at com.ontotext.graphdb.importrdf.Preload.processSingleFileInternal(Preload.java:2103)
    at com.ontotext.graphdb.importrdf.Preload.lambda$processSingleFile$22(Preload.java:2053)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
12:10:32.001 [sorting] INFO  c.ontotext.graphdb.importrdf.Preload - Sorter thread finished.

该文件是开发环境实例的直接备份,我希望能忽略此类类型推断错误,仅导入正确数据,请问通过GraphDB的preload命令是否可以实现?


解决方案

GraphDB的preload工具本身没有直接暴露忽略这类类型解析错误的命令行参数,但可以通过以下几种方式实现跳过错误继续导入:

1. 添加JVM参数跳过损坏字面量

在GDB_JAVA_OPTS中添加-Dgraphdb.importrdf.skip-bad-literals=true,这个参数会让preload工具跳过无法解析的字面量语句,继续处理其他正确数据。修改后的Docker命令如下:

docker run -v $(pwd)/graphdb-data:/opt/graphdb/home \
       -v $(pwd)/preload:/opt/graphdb-import \
       --entrypoint /opt/graphdb/dist/bin/importrdf \
       -e GDB_JAVA_OPTS="-Xmx12g -Xms2g -Dgraphdb.importrdf.skip-bad-literals=true" \
       -e graphdb.page.cache.size=512m \
       -e graphdb.workers.limit=2 \
       -e graphdb.query.evaluation.mode=disk \
       -e graphdb.repository.index.enable=false \
       -e graphdb.compression.enabled=true \
       -e graphdb.use.native.jena.model=true -e graphdb.verify-literals=false \
       ontotext/graphdb:10.7.1 \
       preload -s --force --recursive -q /tmp -c /opt/graphdb-import/graphdb-repo.ttl /opt/graphdb-import/backup.trig

2. 预处理Trig文件修复错误

如果上述参数无效,可以先定位并修复文件中的错误语句:

  • 用GraphDB的validate工具扫描文件,找到错误位置:
docker run --rm -v $(pwd)/preload:/opt/graphdb-import ontotext/graphdb:10.7.1 /opt/graphdb/dist/bin/validate /opt/graphdb-import/backup.trig
  • 用RDF4J的rio转换工具跳过错误语句,生成修复后的文件:
docker run --rm -v $(pwd)/preload:/opt/graphdb-import ontotext/graphdb:10.7.1 /opt/graphdb/dist/bin/rio convert --skip-bad-rdf -i trig -o trig /opt/graphdb-import/backup.trig /opt/graphdb-import/fixed-backup.trig

之后用修复后的fixed-backup.trig执行preload导入。

3. 切换到常规导入方式

如果preload工具的错误容忍度无法满足需求,可以尝试使用GraphDB工作台的导入功能或REST API进行导入,这两种方式默认具备更好的错误处理能力,可配置跳过错误语句继续导入。


内容的提问来源于stack exchange,提问作者IVI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 05:45:55