不支持 属性 值类型:写入 Neptune 时 java.util.LinkedHashMap
Unsupported property value type: java.util.LinkedHashMap when writing to Neptune
我使用 Gremlin-scala 3.4.1.5 对抗 Neptune,但我无法使用带有 List 或 Set 的 case class 添加顶点,就像这样。添加顶点似乎在不存在时起作用
//connection
Cluster.build()
.addContactPoint(endpoint)
.serializer(new GraphSONMessageSerializerV3d0())
.port(port)
.create()
val g = EmptyGraph.instance.asScala().configure(_.withRemote(DriverRemoteConnection.using(cluster)))
// adding vertex
case class Person(name: String, friends: Seq[String])
case class Person(name: String, friends: Set[String]) // also does not work
g + Person
堆栈跟踪
org.apache.tinkerpop.gremlin.driver.exception.ResponseException: {"requestId":-087f-4868-b4b7-","code":"UnsupportedOperationException","detailedMessage":"Unsupported property value type: java.util.LinkedHashMap"}
java.util.concurrent.CompletionException: org.apache.tinkerpop.gremlin.driver.exception.ResponseException: {"requestId":"-087f-4868-b4b7-","code":"UnsupportedOperationException","detailedMessage":"Unsupported property value type: java.util.LinkedHashMap"}
at java.util.concurrent.CompletableFuture.reportJoin(CompletableFuture.java:375)
at java.util.concurrent.CompletableFuture.join(CompletableFuture.java:1934)
at org.apache.tinkerpop.gremlin.driver.ResultSet.one(ResultSet.java:119)
at org.apache.tinkerpop.gremlin.driver.ResultSet.hasNext(ResultSet.java:171)
at org.apache.tinkerpop.gremlin.driver.ResultSet.next(ResultSet.java:178)
at org.apache.tinkerpop.gremlin.driver.ResultSet.next(ResultSet.java:165)
at org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversal$TraverserIterator.next(DriverRemoteTraversal.java:140)
at org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversal$TraverserIterator.next(DriverRemoteTraversal.java:125)
at org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversal.nextTraverser(DriverRemoteTraversal.java:106)
重新 Unsupported property value type: java.util.LinkedHashMap
我没有有效的海王星设置,但普通的 scala List
可能有效。如果没有,这里是宏中的相关部分:
我认为 Neptune 可能不支持根据此文档在顶点上列出属性:https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.html
要对此进行测试,您可以针对 gremlin-server 或其他一些实现尝试 运行 相同的代码
Neptune 不支持列表作为 属性 类型 [1]。如果需要有序列表,一种方法是将其序列化为单个 属性(例如:列表的 json 字符串)。它确实需要应用层中的一些逻辑才能正确读回。另一种常见的列表方式是将列表项建模为自己的顶点,并将它们建模为图中的边。
例如:不要为地址列表设置 属性,而是将地址设为顶点标签,并让边从您的人到地址 1 到地址 2。如果您预计列表会发生变化,则此选项更好。
https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.html
更新
接受这个作为答案,因为这是我最终使用的。我只想澄清一些事情。
Neptune supports Single and Set cardinality properties when using the Gremlin property() step etc.
我在 Gremlin-scala 中提出了一个问题,因为我认为 List
和 Set
应该支持原生的 TinkerPop 基数。 List
今天在 Neptune 中会失败,但这很好,因为用户可以切换到 Set
如果它适用于他们的用例并且那会起作用。
我使用 Gremlin-scala 3.4.1.5 对抗 Neptune,但我无法使用带有 List 或 Set 的 case class 添加顶点,就像这样。添加顶点似乎在不存在时起作用
//connection
Cluster.build()
.addContactPoint(endpoint)
.serializer(new GraphSONMessageSerializerV3d0())
.port(port)
.create()
val g = EmptyGraph.instance.asScala().configure(_.withRemote(DriverRemoteConnection.using(cluster)))
// adding vertex
case class Person(name: String, friends: Seq[String])
case class Person(name: String, friends: Set[String]) // also does not work
g + Person
堆栈跟踪
org.apache.tinkerpop.gremlin.driver.exception.ResponseException: {"requestId":-087f-4868-b4b7-","code":"UnsupportedOperationException","detailedMessage":"Unsupported property value type: java.util.LinkedHashMap"}
java.util.concurrent.CompletionException: org.apache.tinkerpop.gremlin.driver.exception.ResponseException: {"requestId":"-087f-4868-b4b7-","code":"UnsupportedOperationException","detailedMessage":"Unsupported property value type: java.util.LinkedHashMap"}
at java.util.concurrent.CompletableFuture.reportJoin(CompletableFuture.java:375)
at java.util.concurrent.CompletableFuture.join(CompletableFuture.java:1934)
at org.apache.tinkerpop.gremlin.driver.ResultSet.one(ResultSet.java:119)
at org.apache.tinkerpop.gremlin.driver.ResultSet.hasNext(ResultSet.java:171)
at org.apache.tinkerpop.gremlin.driver.ResultSet.next(ResultSet.java:178)
at org.apache.tinkerpop.gremlin.driver.ResultSet.next(ResultSet.java:165)
at org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversal$TraverserIterator.next(DriverRemoteTraversal.java:140)
at org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversal$TraverserIterator.next(DriverRemoteTraversal.java:125)
at org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversal.nextTraverser(DriverRemoteTraversal.java:106)
重新 Unsupported property value type: java.util.LinkedHashMap
我没有有效的海王星设置,但普通的 scala List
可能有效。如果没有,这里是宏中的相关部分:
我认为 Neptune 可能不支持根据此文档在顶点上列出属性:https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.html
要对此进行测试,您可以针对 gremlin-server 或其他一些实现尝试 运行 相同的代码
Neptune 不支持列表作为 属性 类型 [1]。如果需要有序列表,一种方法是将其序列化为单个 属性(例如:列表的 json 字符串)。它确实需要应用层中的一些逻辑才能正确读回。另一种常见的列表方式是将列表项建模为自己的顶点,并将它们建模为图中的边。
例如:不要为地址列表设置 属性,而是将地址设为顶点标签,并让边从您的人到地址 1 到地址 2。如果您预计列表会发生变化,则此选项更好。
https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.html
更新
接受这个作为答案,因为这是我最终使用的。我只想澄清一些事情。
Neptune supports Single and Set cardinality properties when using the Gremlin property() step etc.
我在 Gremlin-scala 中提出了一个问题,因为我认为 List
和 Set
应该支持原生的 TinkerPop 基数。 List
今天在 Neptune 中会失败,但这很好,因为用户可以切换到 Set
如果它适用于他们的用例并且那会起作用。