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 los datos de gráficos en Amazon Neptune
Puedes usar la consola Gremlin para experimentar con TinkerPop gráficos y consultas en un entorno (circular). REPL read-eval-print
En el siguiente tutorial, se describe el uso de la consola de Gremlin para añadir vértices, bordes, propiedades y mucho más a un gráfico de Neptune, y se destacan algunas diferencias en la implementación de Gremlin específica de Neptune.
nota
Este ejemplo asume que ha completado lo siguiente:
Te has conectado mediante SSH una EC2 instancia de Amazon.
Ha creado un clúster de Neptune tal y como se detalla en Crear cúmulo de Neptune.
Ha instalado la consola de Gremlin tal y como se describe enInstalación de la consola de Gremlin.
Uso de la consola de Gremlin
-
Cambie los directorios en la carpeta donde se descomprimen los archivos de la consola de Gremlin.
cd apache-tinkerpop-gremlin-console-3.6.5
-
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. -
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
-
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
-
Añada un vértice con una etiqueta y una propiedad.
g.addV('person').property('name', 'justin')
Al vértice se le asigna un
string
ID que contiene unGUID. Todos los vértices IDs son cadenas en Neptune. -
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úmero1
.Los nombres de propiedades normales deben incluirse entre comillas.
-
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 propiedadname
.Si no especificó
single
, en su lugar añade el valor a la propiedadname
si aún no lo ha hecho. -
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 valor29
, pero no reemplaza los valores existentes.Si la propiedad
age
ya tenía un valor, este comando anexa29
a la propiedad. Por ejemplo, si la propiedadage
era27
, el nuevo valor será[ 27, 29 ]
. -
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.
-
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.
-
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)
-
Elimine un vértice.
g.V().has('name', 'justin').drop()
Elimina el vértice con el valor de la propiedad
name
igual ajustin
.importante
Pare aquí y tendrá el gráfico completo de Apache TinkerPop Modern. Los ejemplos de la sección transversal
de la TinkerPop documentación utilizan el gráfico moderno. -
Ejecute un recorrido.
g.V().hasLabel('person')
Devuelve todos los vértices
person
. -
Ejecute un recorrido transversal con valores (valueMap()).
g.V().has('name', 'marko').out('knows').valueMap()
Devuelve pares clave-valor para todos los vértices que
marko
"conoce". -
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")
yhasLabel("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. -
Especifique la hora o la fecha.
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 una cadena ISO8 compatible con 061.datetime
Admite los siguientes formatos:
YYYY-MM-DD, YYYY-MM-DDTHH:mm
,YYYY-MM-DDTHH:mm:SS
yYYYY-MM-DDTHH:mm:SSZ
. -
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()
. -
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.