Accès au graphe de Neptune avec OpenCypher - Amazon Neptune

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Accès au graphe de Neptune avec OpenCypher

Neptune prend en charge la création d'applications graphiques à l'aide d'OpenCypher, actuellement l'un des langages de requête les plus populaires pour les développeurs travaillant avec des bases de données graphiques. Les développeurs, les analystes commerciaux et les scientifiques des données apprécient la syntaxe inspirée du langage SQL d'OpenCypher, car elle fournit une structure familière pour composer des requêtes pour les applications graphiques.

OpenCypher est un langage de requête déclaratif pour les graphes de propriétés qui a été initialement développé par Neo4j, puis open source en 2015, et qui a contribué au projet OpenCypher sous une licence open source Apache 2. Sa syntaxe est documentée dans le Cypher Query Language Reference, version 9.

Pour connaître les limites et les différences relatives à la prise en charge de la spécification OpenCypher par Neptune, consultezConformité aux normes OpenCypher dans Amazon Neptune.

Note

L'implémentation actuelle du langage de requête Cypher dans Neo4j s'écarte à certains égards de la spécification OpenCypher. Si vous migrez le code Neo4j Cypher actuel vers Neptune, consultezCompatibilité de Neptune avec Neo4j etRéécriture de requêtes Cypher pour les exécuter dans OpenCypher sur Neptune pour obtenir de l'aide.

À partir de la version 1.1.1.0 du moteur, OpenCypher est disponible pour une utilisation en production dans Neptune.

Gremlin contre OpenCypher : similitudes et différences

Gremlin et OpenCypher sont tous deux des langages de requête de graphes de propriétés qui se complètent à bien des égards.

Gremlin a été conçu pour plaire aux programmeurs et s'intégrer parfaitement dans le code. Par conséquent, Gremlin est conçu comme impératif, tandis que la syntaxe déclarative d'OpenCypher peut sembler plus familière aux personnes ayant de l'expérience en SQL ou SPARQL. Gremlin peut sembler plus naturel à un data scientist utilisant Python dans un bloc-notes Jupyter, alors qu'OpenCypher peut sembler plus intuitif à un utilisateur professionnel ayant une certaine formation SQL.

Ce qui est bien, c'est que vous n'avez pas à choisir entre Gremlin et OpenCypher dans Neptune. Les requêtes dans l'une ou l'autre langue peuvent fonctionner sur le même graphique, quelle que soit la langue utilisée pour saisir ces données. Vous trouverez peut-être plus pratique d'utiliser Gremlin pour certaines choses et OpenCypher pour d'autres, selon ce que vous faites.

Gremlin utilise une syntaxe impérative qui vous permet de contrôler la façon dont vous vous déplacez dans votre graphique en plusieurs étapes, chacune prenant en compte un flux de données, effectuant une action sur celui-ci (à l'aide d'un filtre, d'une carte, etc.), puis renvoyant les résultats à l'étape suivante. Une requête Gremlin prend généralement la formeg.V(), suivie d'étapes supplémentaires.

Dans OpenCypher, vous utilisez une syntaxe déclarative, inspirée du langage SQL, qui spécifie un modèle de nœuds et de relations à rechercher dans votre graphe à l'aide d'une syntaxe de motif (comme()-[]->()). Une requête OpenCypher commence souvent par uneMATCH clause, suivie d'autres clauses telles queWHEREWITH, etRETURN.

Démarrer avec OpenCypher

Vous pouvez interroger des données de graphes de propriétés dans Neptune à l'aide d'OpenCypher, quelle que soit la façon dont elles ont été chargées, mais vous ne pouvez pas utiliser OpenCypher pour interroger des données chargées au format RDF.

Le chargeur en masse Neptune accepte les données des graphes de propriétés au format CSV pour Gremlin et au format CSV pour OpenCypher. Bien entendu, vous pouvez également ajouter des données de propriété à votre graphe à l'aide de requêtes Gremlin et/ou OpenCypher.

De nombreux didacticiels en ligne sont disponibles pour apprendre le langage de requête Cypher. Quelques exemples rapides de requêtes OpenCypher peuvent vous aider à vous faire une idée du langage, mais le moyen le plus simple et le plus efficace de commencer à utiliser OpenCypher pour interroger votre graphe Neptune est de loin d'utiliser les blocs-notes OpenCypher du workbench Neptune. Le workbench est open source et est hébergé GitHub sur https://github.com/aws-samples/amazon-neptune-samples.

Vous trouverez les blocs-notes OpenCypher dans le référentiel de blocs-notes GitHub Neptune. Consultez notamment la visualisation des routes aériennes et les carnets de notes Premier Teams en anglais pour OpenCypher.

Les données traitées par OpenCypher prennent la forme d'une série non ordonnée de cartes clé/valeur. Le principal moyen d'affiner, de manipuler et d'augmenter ces cartes consiste à utiliser des clauses qui effectuent des tâches telles que la mise en correspondance de modèles, l'insertion, la mise à jour et la suppression sur les paires clé/valeur.

OpenCypher contient plusieurs clauses permettant de trouver des modèles de données dans le graphe, la plus couranteMATCH étant la plus courante. MATCHvous permet de spécifier le modèle de nœuds, de relations et de filtres que vous souhaitez rechercher dans votre graphe. Par exemple :

  • Obtenez tous les nœuds

    MATCH (n) RETURN n
  • Trouvez des nœuds connectés

    MATCH (n)-[r]->(d) RETURN n, r, d
  • Trouvez un chemin

    MATCH p=(n)-[r]->(d) RETURN p
  • Obtenez tous les nœuds avec une étiquette

    MATCH (n:airport) RETURN n

Notez que la première requête ci-dessus renvoie chaque nœud de votre graphe, et les deux suivantes renvoient tous les nœuds ayant une relation, ce qui n'est généralement pas recommandé ! Dans la plupart des cas, vous souhaitez affiner les données renvoyées, ce que vous pouvez faire en spécifiant des étiquettes et des propriétés de nœud ou de relation, comme dans le quatrième exemple.

Vous pouvez trouver un aide-mémoire pratique pour la syntaxe OpenCypher dans le référentiel d'exemples de Neptune sur github.