Amazon Neptune
Guide de l'utilisateur (Version de l'API 2017-11-29)

Neptune Différences d'exécution de Gremlin

Il y a quelques différences importantes entre l'exécution Amazon Neptune de Gremlin et l'exécution TinkerPop.

Variables pré-liées

L'objet de traversée g est pré-lié. L'objet graph n'est pas pris en charge.

Énumérations TinkerPop

Neptune ne prend pas en charge les noms de classe pleinement qualifiés pour les valeurs d'énumération. Par exemple, vous devez utiliser single et non org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single dans votre demande Groovy.

Le type d'énumération est déterminé par le type de paramètre.

Le tableau suivant illustre les valeurs d'énumération autorisées et le nom complet TinkerPop associé.

Code Java

Neptune ne prend pas en charge les appels aux méthodes définies par des appels arbitraires Java ou de bibliothèque Java, à part les API Gremlin pris en charge. Par exemple, java.lang.*, Date() et g.V().tryNext().orElseGet() ne sont pas autorisés.

Date et heure

Neptune ne prend pas en charge la fonction Java Date(). Une valeur de date et d'heure doit être spécifiée avec la fonction datetime().

La fonction datetime() prend une valeur de chaîne avec une date/heure compatible ISO8601. Par exemple, datetime('2018-01-01T00:00:00'). Prend en charge les formats suivants : YYYY-MM-DD, YYYY-MM-DDTHH:mm, YYYY-MM-DDTHH:mm:SS, YYYY-MM-DDTHH:mm:SSZ

Exécution de script

Toutes les requêtes doivent commencer par g, l'objet de traversée.

Plusieurs traversées peuvent être émises, séparées par un point-virgule (;) ou un caractère de saut de ligne (\n). Chaque instruction autre que la dernière doit se terminer par une étape next() à exécuter. Seules les données de la traversée finale sont renvoyées.

Sessions

Neptune est sans session. Il ne prend pas en charge l'argument session de la console. Pour obtenir une description de la différence, consultez les TinkerPop Session Reference.

Transactions

Neptune ouvre une nouvelle transaction au début de chaque transversale Gremlin et ferme la transaction une fois la transversale correctement terminée. La transaction est annulée lorsqu'il y a une erreur.

Plusieurs instructions séparées par un point-virgule (;) ou un caractère de nouvelle ligne (\n) sont incluses dans une seule transaction. Chaque instruction autre que la dernière doit se terminer par une étape next() à exécuter. Seules les données de la traversée finale sont renvoyées.

La logique de transaction manuelle utilisant tx.commit() et tx.rollback() n'est pas prise en charge.

ID de vertex et ID d'edge

Neptune Les ID Gremlin Vertex et Edge doivent être de type String. Si vous ne spécifiez pas un ID lorsque vous ajoutez un vertex ou un edge, un UUID est généré et converti en chaîne ; par exemple, "48af8178-50ce-971a-fc41-8c9a954cea62".

Note

Cela signifie que les identifiants fournis par l'utilisateur sont pris en charge, mais qu'ils sont facultatifs dans le cas d'une utilisation normale. Cependant, la commande Neptune Load exige que tous les ID soient spécifiés à l'aide du champ ~id dans le format CSV Neptune.

ID fournis par l'utilisateur

Les ID fournis par les utilisateurs sont permis dans le Gremlin Neptune avec les stipulations suivantes.

  • Les ID fournis sont facultatifs.

  • Seuls les vertex et les edges sont pris en charge.

  • Seul le type String est pris en charge.

Pour créer un nouveau vertex avec un ID personnalisé, utilisez l'étape property avec le mot-clé id : g.addV().property(id, 'customid').

Note

Ne placez pas de guillemets autour du mot-clé id.

Tous les ID vertex et ID edge doivent être uniques. Cependant, Neptune permet d'avoir le même ID pour un vertex et un bord.

Si vous essayez de créer un nouveau vertex à l'aide de g.addV() et qu'il existe déjà un vertex ayant cet ID, l'opération échoue. L'exception à cette règle c'est que si vous précisez une nouvelle étiquette pour le vertex, l'opération réussit, mais elle ajoute la nouvelle étiquette et toute propriété supplémentaire précisée au vertex existant. Rien n'est remplacé. Un nouveau vertex n'est pas créé. L'ID de vertex ne changera pas et restera unique.

Par exemple, les commandes suivantes de la console Gremlin aboutiront:

gremlin> g.addV('label1').property(id, 'customid') gremlin> g.addV('label2').property(id, 'customid') gremlin> g.V('customid').label() ==>label1::label2

ID de propriété de vertex

Les ID de propriété de vertex sont générés automatiquement et peuvent s'afficher comme nombres positifs ou négatifs lors des requêtes.

Cardinalité des propriétés de vertex

Neptune prend en charge la cardinalité d'ensemble et simple. La cardinalité set est sélectionnée en l'absence de spécification. Cela signifie que si vous définissez une valeur de propriété, une nouvelle valeur est ajoutée à la propriété, mais uniquement si elle n'apparaît pas déjà dans l'ensemble de valeurs. Il s'agit de la valeur d'énumération Gremlin Set.

List n'est pas pris en charge. Pour plus d'informations sur la cardinalité de la propriété, consultez la rubrique Vertex dans le manuel Gremlin JavaDoc.

Mise à jour d'une propriété de vertex

Pour mettre à jour une valeur de propriété sans ajouter une valeur à l'ensemble des valeurs, spécifiez la cardinalité single lors de l'étape property.

g.V('exampleid01').property(single, 'age', 25)

Note

Cela supprime toutes les valeurs existantes de la propriété.

Étiquettes

Neptune prend en charge plusieurs étiquettes pour un vertex. Lorsque vous créez une étiquette, vous pouvez spécifier plusieurs étiquettes en les séparant par ::. Par exemple, g.addV("Label1::Label2::Label3") ajoute un vertex, avec trois étiquettes différentes. L'étape hasLabel associe ce vertex à l'une de ces trois étiquettes : hasLabel("Label1") hasLabel("Label2") et hasLabel("Label3").

Important

Le délimiteur :: est réservé à cet usage uniquement. Vous ne pouvez pas spécifier plusieurs étiquettes dans l'étape hasLabel. Par exemple, hasLabel("Label1::Label2") ne correspond à rien.

Variables

Neptune ne prend pas en charge les variables Gremlin et ne prend pas en charge la propriété bindings.

Délais

La commande de la console Gremlin :remote config timeout définit uniquement le délai d'expiration local. Utilisez le paramètre neptune_query_timeout pour régler la temporisation de la requête à distance pour Neptune. Pour plus d'informations, consultez Groupes de paramètres de base de données Amazon Neptune.

Caractères d'échappement

Neptune résout tous les caractères d'échappement tels que décrits dans la section Escaping Special Characters (Échappement de caractères spéciaux) dans la documentation de langage Groovy.

Limitations Groovy

Neptune ne prend pas en charge les commandes Groovy qui ne commencent pas par g. Cela inclut les calculs (par exemple : 1+1), les appels système (par exemple : System.nanoTime()) et les définitions de variable (par exemple : 1+1).

Important

Neptune ne prend pas en charge les noms de classe pleinement qualifiés. Par exemple, vous devez utiliser single et non org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single dans votre demande Groovy.

Sérialisation

Neptune prend en charge les sérialisations suivantes selon le type de MIME demandé.

Type MIME Sérialisation

application/vnd.gremlin-v1.0+gryo

GryoMessageSerializerV1d0

application/vnd.gremlin-v1.0+gryo-stringd

GryoMessageSerializerV1d0
application/vnd.gremlin-v3.0+gryo GryoMessageSerializerV3d0

application/vnd.gremlin-v3.0+gryo-stringd

GryoMessageSerializerV3d0

application/vnd.gremlin-v1.0+json

GraphSONMessageSerializerGremlinV1d0

application/vnd.gremlin-v2.0+json

GraphSONMessageSerializerGremlinV2d0

application/vnd.gremlin-v3.0+json

GraphSONMessageSerializerV3d0

application/json

GraphSONMessageSerializerV3d0

Étapes Lambda

Neptune ne prend pas en charge les étapes Lambda.

Méthodes Gremlin non prises en charge

Neptune ne prend pas en charge les méthodes Gremlin suivantes:

  • org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.program(org.apache.tinkerpop.gremlin.process.computer.VertexProgram)

  • org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.sideEffect(java.util.function.Consumer)

  • org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.from(org.apache.tinkerpop.gremlin.structure.Vertex)

  • org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.to(org.apache.tinkerpop.gremlin.structure.Vertex)

Par exemple, la traversée suivante n'est pas autorisée : g.V().from(g.V().next()).

Autres fonctions

L'exécution Neptune de Gremlin n'expose pas l'objet graph. La section suivante décrit les fonctions graph prises en charge et non prises en charge.

Fonctions de graphe Gremlin prises en charge

Voici un ensemble de caractéristiques telles qu'exécutées par le graphique Gremlin Neptune. Ces fonctions sont les mêmes que celles qui seraient retournées par la commande graph.features().

Fonction de graphe Activé
Transactions vrai
ThreadedTransactions false
Ordinateur false
Persistance vrai
ConcurrentAccess vrai
Fonction de variable Activé
Variables false
SerializableValues false
UniformListValues false
BooleanArrayValues false
DoubleArrayValues false
IntegerArrayValues false
StringArrayValues false
BooleanValues false
ByteValues false
DoubleValues false
FloatValues false
IntegerValues false
LongValues false
MapValues false
MixedListValues false
StringValues false
ByteArrayValues false
FloatArrayValues false
LongArrayValues false
Fonction de vertex Activé
MetaProperties false
DuplicateMultiProperties false
AddVertices vrai
RemoveVertices vrai
MultiProperties vrai
UserSuppliedIds vrai
AddProperty vrai
RemoveProperty vrai
NumericIds false
StringIds vrai
UuidIds false
CustomIds false
AnyIds false
Fonction de propriété de vertex Activé
UserSuppliedIds false
AddProperty vrai
RemoveProperty vrai
NumericIds vrai
StringIds vrai
UuidIds false
CustomIds false
AnyIds false
Properties vrai
SerializableValues false
UniformListValues false
BooleanArrayValues false
DoubleArrayValues false
IntegerArrayValues false
StringArrayValues false
BooleanValues vrai
ByteValues vrai
DoubleValues vrai
FloatValues vrai
IntegerValues vrai
LongValues vrai
MapValues false
MixedListValues false
StringValues vrai
ByteArrayValues false
FloatArrayValues false
LongArrayValues false
Fonction d'edge Activé
AddEdges vrai
RemoveEdges vrai
UserSuppliedIds vrai
AddProperty vrai
RemoveProperty vrai
NumericIds false
StringIds vrai
UuidIds false
CustomIds false
AnyIds false
Fonction de propriété d'edge Activé
Properties vrai
SerializableValues false
UniformListValues false
BooleanArrayValues false
DoubleArrayValues false
IntegerArrayValues false
StringArrayValues false
BooleanValues vrai
ByteValues vrai
DoubleValues vrai
FloatValues vrai
IntegerValues vrai
LongValues vrai
MapValues false
MixedListValues false
StringValues vrai
ByteArrayValues false
FloatArrayValues false
LongArrayValues faux

Étapes suivantes: