

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 os dados de grafo no Amazon Neptune
<a name="get-started-graph-gremlin"></a>

Você pode usar o Gremlin Console para experimentar TinkerPop gráficos e consultas em um ambiente REPL (read-eval-print loop). 

O tutorial a seguir mostra como usar o console do Gremlin para adicionar vértices, arestas, propriedades e muito mais a um gráfico de Netuno e destaca algumas diferenças na implementação do Gremlin. Neptune-specific 

**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 cluster do Neptune](get-started-create-cluster.md).
Você instalou o console do Gremlin conforme descrito em [Instalar o console do Gremlin](access-graph-gremlin-console.md).

**Usar o Gremlin Console**

1. Altere os diretórios para a pasta na qual os arquivos do Gremlin Console são descompactados.

   ```
   cd apache-tinkerpop-gremlin-console-3.7.2
   ```

1. 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.

1. 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
   ```

1. 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
   ```

1. **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.

1. **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úmero `1` nela.

   Os nomes de propriedade normais devem estar entre aspas.

1. **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 propriedade `name`.

   Se você não especificar `single`, em vez disso, ele acrescenta o valor à propriedade `name` caso ainda não tenha feito. 

1. **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 valor `29`, mas não substitui qualquer valor existente. 

   Se a propriedade `age` já tinha um valor, esse comando anexa `29` à propriedade. Por exemplo, se a propriedade `age` era `27`, o novo valor será `[ 27, 29 ]`.

1. **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.

1. **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.

1. **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)
   ```

1. **Excluir um vértice.**

   ```
   g.V().has('name', 'justin').drop()
   ```

   Remove o vértice com a propriedade `name` igual a `justin`.
**Importante**  
*Pare aqui e você terá o gráfico completo do Apache TinkerPop Modern. Os exemplos na [seção Traversal](https://tinkerpop.apache.org/docs/current/reference/#graph-traversal-steps) da TinkerPop documentação usam o gráfico moderno.*

1. **Executar um percurso.**

   ```
   g.V().hasLabel('person')
   ```

   Retorna todos os vértices `person`.

1. **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".

1. **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")` e `hasLabel("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. 

1. **Especifique Time/date**.

   ```
   g.V().property(single, 'lastUpdate', datetime('2018-01-01T00:00:00'))
   ```

   O Neptune não é compatível com Java Date. Em vez disso, use a `datetime()` função. `datetime()`aceita uma ISO8061-compliant `datetime` string.

   Compatível com os formatos: `YYYY-MM-DD, YYYY-MM-DDTHH:mm`, `YYYY-MM-DDTHH:mm:SS` e `YYYY-MM-DDTHH:mm:SSZ`.

1. **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.

1. 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.