SchemaViolationException-JanusGraph问题笔记(二)

2,543 阅读1分钟

场景

Gremlin命令行加载Graph of the Gods(官网入门Demo) GraphOfTheGodsFactory.load(graph)

问题 E04: 加载示例图时报错SchemaViolationException

报错信息:

org.janusgraph.core.SchemaViolationException: Adding this property for key [~T$SchemaName] and value [rtname] violates a uniqueness constraint [SystemIndex#~T$SchemaName]

适用于其他SchemaViolationException(模式冲突)的情况推定

分析

指Schema冲突,[rtname]违反了唯一性约束。SchemaName这一属性是唯一的,添加的值与先前存在的值冲突。 这是由于先前已经加载过Graph of the Gods,load命令已经执行过,存储中已存在相同的数据了,再次添加数据造成。

解决方案

方案一

不需要执行GraphOfTheGodsFactory.load(graph)语句,直接进行示例查询。

gremlin> g = graph.traversal()
==>graphtraversalsource[standardjanusgraph[cql:[127.0.0.1]], standard]
gremlin> saturn = g.V().has('name', 'saturn').next()
==>v[256]
gremlin> g.V(saturn).valueMap()
==>[name:[saturn], age:[10000]]
gremlin> g.V(saturn).in('father').in('father').values('name')
==>hercules

方案二

  • 删除整个图【谨慎操作,不可恢复】, 包含 graph、data、schema 等都会被删除: JanusGraphFactory.drop(graph)

注意: 删除图操作之后要关掉重新进gremlin console,重新打开图再执行load。否则报错 Could not re-open management log

org.janusgraph.core.JanusGraphException: Could not re-open management log

或者:

  • 删除存储后端中的数据表,再执行GraphOfTheGodsFactory.load(graph)即可。 HBase中默认的数据表名是“janusgraph

JanusGraph问题与解决系列

JanusGraph学习笔记-问题与解决(一)

结语

笔记持续更新,欢迎关注。如有帮助,点赞即是鼓励!