Gremlin - пакетный запрос на добавление вершины, если она не существует

В нашем проекте мы используем вариант языка Gremlin JavaScript и Amazon Neptune, и у нас есть несколько вариантов использования для создания вершин и ребер в пакетном режиме.

Простым примером может быть массив из 200–1000 пользователей. Мне нужно выполнить пакетный запрос, который проверяет, существует ли пользователь. Если пользователь существует, добавьте вершины со свойствами, иначе игнорируйте этого пользователя. Все эти условия нужно выполнять в пакетном режиме.

Примечание. Следует избегать использования скриптов Gremlin. Так что обход - это то, что я ищу.

1 ответ

Можно заполнить запрос списком карт, содержащих вставляемые данные. Вы можете расширить шаблон, чтобы использовать coalesceшаг, чтобы сделать условные вставки. Использование набора данных по воздушным маршрутам представляет собой простой пример, который создает новый XYZаэропорт и выясняет, что другие аэропорты уже существуют. Обратите внимание, что промежуточный обход V step делает этот запрос довольно дорогостоящим, так как для каждой карты в списке нужно «искать» все вершины.

      g.inject([['code':'AUS'],['code':'XYZ'],['code':'SFO']]).
  unfold().as('data').
  coalesce(V().hasLabel('airport').
    where(eq('data')).
      by('code').
      by(select('code')),
    addV('airport').
      property('code',select('code')))

Есть дополнительные обсуждения использования этого шаблона, чтобы избежать длинных цепочек addV а также addE шаги в запросе.

https://tinkerpop.apache.org/docs/current/recipes/#long-traversals

Когда запрос будет запущен, вы увидите, что для аэропорта XYZ создается новый идентификатор, а для остальных найдены существующие идентификаторы.

      gremlin> g.inject([['code':'AUS'],['code':'XYZ'],['code':'SFO']]).
......1>   unfold().as('data').
......2>   coalesce(V().hasLabel('airport').
......3>     where(eq('data')).
......4>       by('code').
......5>       by(select('code')),
......6>     addV('airport').
......7>       property('code',select('code')))
==>v[3]
==>v[61286]
==>v[23]    
Другие вопросы по тегам