As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Usar o Gremlin para acessar o grafo no Amazon Neptune
Você pode usar o Gremlin Console para experimentar TinkerPop gráficos e consultas em um ambiente REPL (loop). read-eval-print
O tutorial a seguir descreve o uso do console do Gremlin para adicionar propriedades, vértices, bordas e muito mais a um grafo do Neptune e destaca algumas diferenças na implementação do Gremlin específica do Neptune.
nota
Este exemplo pressupõe que você tenha concluído o seguinte:
Você se conectou usando SSH a uma instância do Amazon EC2.
Você criou um cluster do Neptune conforme detalhado em Criar um cluster de banco de dados.
Você instalou o console do Gremlin conforme descrito em Instalar o console do Gremlin.
Usar o Gremlin Console
-
Altere os diretórios para a pasta na qual os arquivos do Gremlin Console são descompactados.
cd apache-tinkerpop-gremlin-console-3.6.5
-
Digite o comando a seguir para executar o Gremlin Console.
bin/gremlin.sh
A seguinte saída deverá ser mostrada:
\,,,/ (o o) -----oOOo-(3)-oOOo----- plugin activated: tinkerpop.server plugin activated: tinkerpop.utilities plugin activated: tinkerpop.tinkergraph gremlin>
Agora você está no prompt do
gremlin>
. Você insere as etapas restantes nesse prompt. -
No prompt
gremlin>
, insira o seguinte para conectar-se a instâncias de banco de dados do Neptune.:remote connect tinkerpop.server conf/neptune-remote.yaml
-
No prompt
gremlin>
, insira o seguinte para alternar para modo remoto. Isso envia todas as consultas do Gremlin para a conexão remota.:remote console
-
Adicionar vértice com rótulo e propriedade.
g.addV('person').property('name', 'justin')
É atribuído um ID de
string
ao vértice que contém um GUID. Todos os IDs de vértice são strings no Neptune. -
Adicionar um vértice com id personalizado.
g.addV('person').property(id, '1').property('name', 'martin')
A propriedade
id
não é mencionada. Ela é uma palavra-chave para o ID do vértice. O ID do vértice aqui é uma string com o número1
nela.Os nomes de propriedade normais devem estar entre aspas.
-
Alterar ou adicionar propriedade caso não exista.
g.V('1').property(single, 'name', 'marko')
Aqui você está alterando a propriedade
name
para o vértice da etapa anterior. Isso remove todos os valores existentes da propriedadename
.Se você não especificar
single
, em vez disso, ele acrescenta o valor à propriedadename
caso ainda não tenha feito. -
Adicionar propriedade, mas incluir propriedade caso já possua um valor.
g.V('1').property('age', 29)
O Neptune usa cardinalidade set como a ação padrão.
Esse comando adiciona a propriedade
age
com o valor29
, mas não substitui qualquer valor existente.Se a propriedade
age
já tinha um valor, esse comando anexa29
à propriedade. Por exemplo, se a propriedadeage
era27
, o novo valor será[ 27, 29 ]
. -
Adicionar vários vértices.
g.addV('person').property(id, '2').property('name', 'vadas').property('age', 27).iterate() g.addV('software').property(id, '3').property('name', 'lop').property('lang', 'java').iterate() g.addV('person').property(id, '4').property('name', 'josh').property('age', 32).iterate() g.addV('software').property(id, '5').property('name', 'ripple').property('lang', 'java').iterate() g.addV('person').property(id, '6').property('name', 'peter').property('age', 35)
Você pode enviar várias declarações ao mesmo tempo ao Neptune.
As instruções podem ser separadas por novas linhas (
'\n'
), espaços (' '
), ponto e vírgula ('; '
) ou nada (por exemplo:g.addV(‘person’).iterate()g.V()
é válido).nota
O Gremlin Console envia um comando separado a cada nova linha (
'\n'
), de modo que cada um será uma transação separada nesse caso. Esse exemplo tem todos os comandos em linhas separadas para legibilidade. Remova os caracteres de nova linha ('\n'
) para enviá-lo como um único comando por meio do Gremlin Console.Todas as instruções diferentes da última instrução devem terminar em uma etapa de encerramento, como
.next()
ou.iterate()
, ou não serão executadas. O Gremlin Console não requer essas etapas de encerramento. Use.iterate
sempre que não precisar que os resultados sejam serializados.Todas as instruções enviadas em conjunto são incluídas em uma única transação e são bem-sucedidas ou falham em conjunto.
-
Adicionar bordas.
g.V('1').addE('knows').to(__.V('2')).property('weight', 0.5).iterate() g.addE('knows').from(__.V('1')).to(__.V('4')).property('weight', 1.0)
Veja aqui duas maneiras diferentes para adicionar uma borda.
-
Adicionar o restante do gráfico moderno.
g.V('1').addE('created').to(__.V('3')).property('weight', 0.4).iterate() g.V('4').addE('created').to(__.V('5')).property('weight', 1.0).iterate() g.V('4').addE('knows').to(__.V('3')).property('weight', 0.4).iterate() g.V('6').addE('created').to(__.V('3')).property('weight', 0.2)
-
Excluir um vértice.
g.V().has('name', 'justin').drop()
Remove o vértice com a propriedade
name
igual ajustin
.Importante
Pare aqui e você terá o gráfico completo do Apache TinkerPop Modern. Os exemplos na seção Traversal
da TinkerPop documentação usam o gráfico moderno. -
Executar um percurso.
g.V().hasLabel('person')
Retorna todos os vértices
person
. -
Executar um percurso com valores (valueMap()).
g.V().has('name', 'marko').out('knows').valueMap()
Retorna pares de chave-valor para todos os vértices que
marko
"conhece". -
Especificar vários rótulos.
g.addV("Label1::Label2::Label3")
O Neptune é compatível com vários rótulos para um vértice. Quando cria um rótulo, você pode especificar vários rótulos separados com
::
.Esse exemplo adiciona um vértice com três diferentes rótulos.
A etapa
hasLabel
corresponde esse vértice com qualquer um destes três rótulos:hasLabel("Label1")
,hasLabel("Label2")
ehasLabel("Label3")
.O delimitador
::
é reservado somente para esse uso.Você não pode especificar vários rótulos na etapa
hasLabel
. Por exemplo,hasLabel("Label1::Label2")
não corresponde a nada. -
Especifique hora/data.
g.V().property(single, 'lastUpdate', datetime('2018-01-01T00:00:00'))
O Neptune não é compatível com Java Date. Use a função
datetime()
. Odatetime()
aceita uma stringdatetime
compatível com ISO8061.Compatível com os formatos:
YYYY-MM-DD, YYYY-MM-DDTHH:mm
,YYYY-MM-DDTHH:mm:SS
eYYYY-MM-DDTHH:mm:SSZ
. -
Excluir vértices, propriedades ou bordas.
g.V().hasLabel('person').properties('age').drop().iterate() g.V('1').drop().iterate() g.V().outE().hasLabel('created').drop()
Aqui estão alguns exemplos de remoção.
nota
A etapa
.next()
não funciona com.drop()
. Use.iterate()
em vez disso. -
Ao terminar, insira o seguinte para sair do Gremlin Console.
:exit
nota
Use um ponto e vírgula (;
) ou um caractere de nova linha (\n
) para separar cada instrução.
Cada travessia anterior à travessia final deve terminar em iterate()
a ser executada. Somente os dados da travessia final são retornados.