Запрос дерева с использованием SimpleGraphStatement в CassandraCSharpDriver.Graph бросков "не может быть приведен к org. apache .tinkerpop.gremlin.structure.Element" - PullRequest
0 голосов
/ 09 апреля 2020

Я могу выполнить этот запрос в консоли Datastax Studio и получить результат в виде дерева (хотя он искажен json, когда все данные возвращаются в ключах вместо значений).

g.V().has("mything","key", "mykey")
.emit()
.repeat(outE("contains").inV())
.dedup()

.tree()
.by(
    group()
    .by(label)
    .by(
            valueMap()
            .unfold()
            .group()
            .by(select(keys))
            .by(select(values).unfold())
        )
    .unfold()
    .unfold()
)

Результат консоли выглядит следующим образом (обратите внимание на странный формат json с данными в клавишах json?):

{
  "mystuff={dynamicproperties={stuff}, key=mykey}": {
    "contains={}": {
      "astuff={dynamicproperties=stuff, key=mykey}": {},
      "bstuff={dynamicproperties={stuff}, key=mykey}": {},
      "container={key=mykey}": {
        "contains={}": {
          "thing={key=mykey}": {
            "contains={}": {
              "cstuff={dynamicproperties={stuff}, key=mykey}": {}
            }
          }
        }
      }
    }
  }
}

Однако когда я его запускаю как SimpleGraphStatement в Gremlin. NET с использованием CassandraCSharpGraph выдает это исключение: "java.util.HashMap$Node cannot be cast to org.apache.tinkerpop.gremlin.structure.Element"

Это код C#, по которому я выполняю запрос:

var graphResultSet = cassandraGraphProvider.Session.ExecuteGraph(new SimpleGraphStatement(query));

Я в состоянии выполнить оператор вплоть до строки .dedup () и получить вершины в graphResultSet, но добавив нижеприведенный код дерева, когда он начинает выдавать ошибку.

Я использую CassandraCSharpDriver. График 2.1, CassandraCSharpDriver 3.14, Гремлин. Net 3.2.9. На сервере запущены dse cassandra 5.1.14 и gremlin 3.2.11.

В чем заключается хитрость при выполнении запроса дерева в CassandraCSharpDriver? Любые идеи о том, что я мог бы попробовать дальше?

1 Ответ

0 голосов
/ 13 апреля 2020

Реальная проблема с Tree прямо сейчас обозначена здесь в TINKERPOP-2063 - Варианты языка Gremlin, такие как C#, в настоящее время не поддерживают десериализацию этого объекта, так что вы получите это безобразно "java .util.HashMap $ Узел не может быть приведен к org. apache .tinkerpop.gremlin.structure.Element ". На данный момент вы можете только обойти это, отправив сценарий с драйвером (как это делает Studio), но затем вы можете обработать этот примерный JSON. Это представление относится к проблеме того, что JSON не поддерживает нестроковые ключи (т.е. не может использовать object, как Java). Итак, я верю, что все данные есть, но работать с ними просто не легко. Как отмечается в проблеме JIRA, существуют похожие проблемы с subgraph() step.

...