

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Uso de Gremlin para acceder a datos de gráficos en Amazon Neptune
<a name="get-started-graph-gremlin"></a>

Puede utilizar la consola Gremlin para experimentar con TinkerPop gráficos y consultas en un entorno REPL (ciclo de lectura-evaluación-impresión). 

En el siguiente tutorial se explica el uso de la consola de Gremlin para añadir vértices, aristas, propiedades y mucho más a un gráfico de Neptune, y se destacan algunas diferencias en la implementación de Gremlin. Neptune-specific 

**nota**  
Este ejemplo asume que ha completado lo siguiente:  
Se ha conectado a una instancia de Amazon EC2 mediante SSH.
Ha creado un clúster de Neptune tal y como se detalla en [Creación de un clúster de Neptune](get-started-create-cluster.md).
Ha instalado la consola de Gremlin tal y como se describe en[Instalación de la consola de Gremlin](access-graph-gremlin-console.md).

**Uso de la consola de Gremlin**

1. Cambie los directorios en la carpeta donde se descomprimen los archivos de la consola de Gremlin.

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

1. Escriba el comando siguiente para ejecutar la consola de Gremlin.

   ```
   bin/gremlin.sh
   ```

   Debería ver los siguientes datos de salida:

   ```
            \,,,/
            (o o)
   -----oOOo-(3)-oOOo-----
   plugin activated: tinkerpop.server
   plugin activated: tinkerpop.utilities
   plugin activated: tinkerpop.tinkergraph
   gremlin>
   ```

   Ahora se encuentra en `gremlin>`. Introduzca los pasos restantes en este punto.

1. En el símbolo del sistema `gremlin>`, escriba lo siguiente para conectarse a la instancia de base de datos de Neptune.

   ```
   :remote connect tinkerpop.server conf/neptune-remote.yaml
   ```

1. En la entrada `gremlin>`, escriba lo siguiente para cambiar al modo remoto. Esto envía todas las consultas de Gremlin a la conexión remota.

   ```
   :remote console
   ```

1. **Añada un vértice con una etiqueta y una propiedad.**

   ```
   g.addV('person').property('name', 'justin')
   ```

   Al vértice se le asigna un ID `string` que contiene un GUID. Todos los identificadores de vértices son cadenas en Neptune.

1. **Añada un vértice con ID personalizado.**

   ```
   g.addV('person').property(id, '1').property('name', 'martin')
   ```

   La propiedad `id` no se indica entre comillas. Se trata de una palabra clave para el ID del vértice. El ID del vértice indicado es una cadena con el número `1`.

   Los nombres de propiedades normales deben incluirse entre comillas.

1. **Cambie la propiedad o añada una si no existe.**

   ```
   g.V('1').property(single, 'name', 'marko')
   ```

   En este ejemplo, se cambia la propiedad `name` para el vértice del paso anterior. Esto elimina todos los valores existentes de la propiedad `name`.

   Si no especificó `single`, en su lugar añade el valor a la propiedad `name` si aún no lo ha hecho. 

1. **Añada la propiedad, pero anéxela si ya tiene un valor.**

   ```
   g.V('1').property('age', 29)
   ```

   Neptune utiliza la cardinalidad en conjuntos como acción predeterminada.

   Este comando añade la propiedad `age` con el valor `29`, pero no reemplaza los valores existentes. 

   Si la propiedad `age` ya tenía un valor, este comando anexa `29` a la propiedad. Por ejemplo, si la propiedad `age` era `27`, el nuevo valor será `[ 27, 29 ]`.

1. **Añada varios 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)
   ```

   Puede enviar varias instrucciones a Neptune al mismo tiempo.

   Las instrucciones se pueden separar mediante una nueva línea (`'\n'`), espacios (`' '`), punto y coma (`'; '`) o nada (por ejemplo: `g.addV(‘person’).iterate()g.V()` es válido). 
**nota**  
La consola de Gremlin envía un comando independiente en cada nueva línea (`'\n'`), por lo que cada uno es una transacción independiente en ese caso. Este ejemplo tiene todos los comandos en líneas separadas para facilitar su lectura. Elimine los caracteres de nueva línea (`'\n'`) para enviarlo como un único comando a través de la consola de Gremlin.

   Todas las instrucciones a excepción de la última deben finalizar en un paso de terminación, como `.next()` o `.iterate()`, o no se ejecutarán. La consola de Gremlin no requiere estos pasos de terminación. Use `.iterate` siempre que no necesite que los resultados se serialicen.

   Todas las instrucciones que se envían juntas se incluyen en una única transacción y se realizan correctamente o producen un error de forma conjunta.

1. **Añada bordes.**

   ```
   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)
   ```

   A continuación, se muestran dos formas distintas de añadir un borde.

1. **Añada el resto del 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. **Elimine un vértice.**

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

   Elimina el vértice con el valor de la propiedad `name` igual a `justin`.
**importante**  
*Deténgase aquí y tendrá el gráfico completo de Apache Modern. TinkerPop Los ejemplos de la [sección transversal](https://tinkerpop.apache.org/docs/current/reference/#graph-traversal-steps) de la TinkerPop documentación utilizan el gráfico moderno.*

1. **Ejecute un recorrido.**

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

   Devuelve todos los vértices `person`.

1. **Ejecute un recorrido con valores (valueMap()).**

   ```
   g.V().has('name', 'marko').out('knows').valueMap()
   ```

   Devuelve pares clave-valor para todos los vértices que `marko` "conoce".

1. **Especifique varias etiquetas.**

   ```
   g.addV("Label1::Label2::Label3") 
   ```

   Neptune admite varias etiquetas para un vértice. Al crear una etiqueta, puede especificar varias si las separa mediante `::`.

   Este ejemplo añade un vértice con tres etiquetas distintas. 

   El paso `hasLabel` busca coincidencias de este vértice con cualquiera de esas tres etiquetas: `hasLabel("Label1")` `hasLabel("Label2")` y `hasLabel("Label3")`. 

   El delimitador `::` está reservado solo para este uso. 

   No se pueden especificar varias etiquetas en el paso `hasLabel`. Por ejemplo, `hasLabel("Label1::Label2")` no tiene ninguna coincidencia. 

1. **Especifique Time/date**.

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

   Neptune no admite la clase Date de Java. Utilice la `datetime()` función en su lugar. `datetime()`acepta cualquier ISO8061-compliant `datetime` cadena.

   Admite los siguientes formatos: `YYYY-MM-DD, YYYY-MM-DDTHH:mm`, `YYYY-MM-DDTHH:mm:SS` y `YYYY-MM-DDTHH:mm:SSZ`.

1. **Elimine vértices, propiedades o bordes.**

   ```
   g.V().hasLabel('person').properties('age').drop().iterate()
   g.V('1').drop().iterate()
   g.V().outE().hasLabel('created').drop()
   ```

   Estos son algunos ejemplos.
**nota**  
 El paso `.next()` no funciona con `.drop()`. En su lugar, use `.iterate()`.

1. Cuando haya terminado, escriba lo siguiente para salir de la consola de Gremlin.

   ```
   :exit
   ```

**nota**  
Utilice punto y coma (`;`) o un carácter de nueva línea (`\n`) para separar las instrucciones.   
Cada recorrido anterior al final debe terminar en `iterate()` para ejecutarse. Solo se devuelven los datos del recorrido final.