View a markdown version of this page

Schéma du graphe de propriétés - 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.

Schéma du graphe de propriétés

La neptune.graph.pg_schema() procédure fournit une vue d'ensemble complète de la structure de votre graphe de propriétés. Il renvoie toutes les étiquettes de nœuds, les étiquettes de bords, les propriétés avec leurs types de données et les triplets d'étiquettes ({~from, ~type, ~to}modèles qui décrivent comment les types de nœuds se connectent via les types de bords).

Cette procédure est actuellement disponible uniquement via le point de terminaison OpenCypher et découvre le schéma de toutes les données des graphes de propriétés.

Utilisez cette procédure pour des tâches telles que :

  • Génération de requêtes AI et LLM  : donnez aux LLM la structure graphique dont ils ont besoin pour générer des requêtes Cypher valides à partir du langage naturel (applications Text-to-Cypher GraphRag).

  • Visualisation et exploration de graphes  : des outils tels que Graph Explorer utilisent les informations des schémas pour générer des représentations visuelles interactives des données graphiques sans avoir à scanner l'intégralité de la base de données.

  • Découverte de schémas d'application  : applications qui ont besoin de comprendre la structure des graphes au démarrage, telles que les générateurs de schémas GraphQL ou les outils de validation des données.

Comparaison avec Neptune Analytics

Dans Neptune Analytics, neptune.graph.pg_schema() est synchrone. Il calcule le schéma à chaque appel.

Dans Neptune Database, vous déclenchez explicitement un calcul de schéma asynchrone en appelantneptune.graph.pg_schema.compute(), qui renvoie immédiatement. Le calcul s'exécute en arrière-plan pendant que vous interrogez pour terminer le sondage à l'aide neptune.graph.pg_schema() de. Une fois calculé, Neptune conserve le schéma et le renvoie instantanément lors des lectures suivantes sans recalcul. Des résultats partiels sont également disponibles alors que le calcul est toujours en cours. Vous pouvez également arrêter un calcul en cours et le reprendre ultérieurement.

Comparaison avec l'API Graph Summary

L'API Graph Summary ne fournit pas de triplets d'étiquettes ni de types de données de propriété. La procédure de schéma du graphe de propriétés comble cette lacune. Les triplets d'étiquettes indiquent les modèles de relation spécifiques de votre graphique. Par exemple, a Person se connecte à a Company via une worksAt arête. Ces informations sont essentielles pour que les LLM puissent générer des requêtes sémantiquement correctes.

Conditions préalables

Version de moteur

La procédure de schéma du graphe de propriétés nécessite la version 1.4.8.0 ou ultérieure du moteur Neptune.

Autorisations IAM

Les actions IAM suivantes sont requises pour chaque opération de schéma :

  • CALL neptune.graph.pg_schema()— nécessiteneptune-db:ReadDataViaQuery.

  • CALL neptune.graph.pg_schema.compute()— nécessite neptune-db:ReadDataViaQuery etneptune-db:WriteDataViaQuery.

  • CALL neptune.graph.pg_schema.stop()— nécessite neptune-db:ReadDataViaQuery etneptune-db:WriteDataViaQuery.

Les stop() opérations compute() et nécessitent des autorisations d'écriture car elles modifient l'état interne utilisé pour mettre en cache et conserver le schéma.

Exemple Exemple de politique IAM

La politique suivante accorde les autorisations minimales requises pour toutes les opérations de schéma :

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "neptune-db:ReadDataViaQuery", "neptune-db:WriteDataViaQuery" ], "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-resource-id/*" }] }

Pour accorder un accès en lecture seule au schéma (sans possibilité de déclencher le calcul), utilisez only. neptune-db:ReadDataViaQuery

Instances pour les rédacteurs et les lecteurs

Vous ne pouvez déclencher le calcul du schéma que sur l'instance d'écriture. Les instances de réplication en lecture peuvent lire le schéma (qui est répliqué depuis l'enregistreur) mais ne peuvent pas exécuter compute() oustop().

Référence des API

Lire le schéma

Récupère le schéma actuel et l'état du calcul.

Syntaxe :

AWS CLI
aws neptunedata execute-open-cypher-query \ --endpoint-url https://your-neptune-endpoint:port \ --open-cypher-query "CALL neptune.graph.pg_schema()"
SDK
import boto3 from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.execute_open_cypher_query( openCypherQuery='CALL neptune.graph.pg_schema()' ) print(response)
awscurl
awscurl -X POST https://your-neptune-endpoint:port/openCypher \ -H "Content-Type: application/x-www-form-urlencoded" \ --region us-east-1 --service neptune-db \ -d 'query=CALL neptune.graph.pg_schema()'

Comportement : renvoie immédiatement le schéma et l'état actuels. Toujours non bloquant. Si aucun schéma n'a été calculé, renvoie state : "NotStarted" avec des champs de schéma vides. Si un calcul est en cours, renvoie des résultats partiels avec l'état :"InProgress".

Format de réponse :

La réponse contient un objet de schéma avec les champs suivants :

Objet d'état :

  • state(String) — État actuel du cycle de vie : NotStartedInProgress,Completed,Stopped, Failed

  • concurrency(String) — Nombre de threads utilisés pour le calcul. 0 signifie automatique (déterminé en fonction du matériel). Plage : 1 (la plus faible) à 16 (la plus élevée).

  • lastComputedTimestamp(String) — ISO-8601 Horodatage UTC du dernier calcul réussi (par exemple,) 2026-05-29T08:00:00Z

  • progressPercentage(String) — Progression du calcul : 0 lorsqu'il n'est pas démarré, 0—99 pendant le calcul, 100 lorsqu'il est terminé

  • errorMessage(String) — Présent uniquement lorsqu'une demande est rejetée ou que le calcul échoue. Explique la raison.

Objet du schéma :

  • nodeLabels— Tableau de toutes les étiquettes de nœuds uniques dans le graphique

  • edgeLabels— Tableau de toutes les étiquettes de bord uniques dans le graphique

  • nodeLabelDetails— Pour chaque étiquette de nœud : propriétés et leurs types de données

  • edgeLabelDetails— Pour chaque étiquette de bord : propriétés et leurs types de données

  • labelTriples— Tableau de modèles de relations : {~from, ~type, ~to} décrivant quels types de nœuds se connectent via quels types d'arêtes

Types de données pris en charge : StringInt,Long,Double,Bool, Date

Si une propriété possède plusieurs types de données sur différents nœuds (par exemple, certains nœuds stockent en age tant que Int et d'autres en tant queString), tous les types observés sont répertoriés dans le datatypes tableau.

Schéma de calcul

Déclenche un calcul de schéma en arrière-plan.

Syntaxe :

AWS CLI
aws neptunedata execute-open-cypher-query \ --endpoint-url https://your-neptune-endpoint:port \ --open-cypher-query "CALL neptune.graph.pg_schema.compute()"

Avec un paramètre de simultanéité optionnel :

aws neptunedata execute-open-cypher-query \ --endpoint-url https://your-neptune-endpoint:port \ --open-cypher-query "CALL neptune.graph.pg_schema.compute({concurrency: 2})"
SDK
import boto3 from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.execute_open_cypher_query( openCypherQuery='CALL neptune.graph.pg_schema.compute()' ) print(response)
awscurl
awscurl -X POST https://your-neptune-endpoint:port/openCypher \ -H "Content-Type: application/x-www-form-urlencoded" \ --region us-east-1 --service neptune-db \ -d 'query=CALL neptune.graph.pg_schema.compute()'

Avec un paramètre de simultanéité optionnel :

awscurl -X POST https://your-neptune-endpoint:port/openCypher \ -H "Content-Type: application/x-www-form-urlencoded" \ --region us-east-1 --service neptune-db \ -d 'query=CALL neptune.graph.pg_schema.compute({concurrency: 2})'

Actions IAM requises : neptune-db:ReadDataViaQuery et neptune-db:WriteDataViaQuery

Paramètres :

  • concurrency(Nombre entier, facultatif) — Nombre de threads pour le calcul en arrière-plan. 0 (par défaut) = déterminé automatiquement en fonction du matériel. Plage : 1 (la plus faible) à 16 (la plus élevée). Utilisez des valeurs plus faibles pour les instances plus petites afin de réduire l'impact sur les ressources.

Comportement :

  • Retourne immédiatement avec le statut actuel. Le calcul s'exécute de manière asynchrone en arrière-plan.

  • S'il est appelé alors que l'état estStopped, le calcul reprend là où il s'était arrêté.

  • S'il est appelé alors que l'état estCompleted, lance un nouveau recalcul. Le schéma précédent continue à effectuer des lectures jusqu'à ce que le nouveau calcul soit terminé.

  • S'il est appelé alors qu'un calcul est déjà en coursInProgress, Neptune rejette la demande avec un message d'erreur.

  • Si elle est appelée pendant un chargement groupé actif, Neptune rejette la demande avec un message d'erreur.

Réponse : Renvoie l'objet d'état affichant l'état : "InProgress" avec les progressPercentage champs concurrency et.

Arrêter le calcul du schéma

Arrête un calcul en arrière-plan en cours d'exécution.

Syntaxe :

AWS CLI
aws neptunedata execute-open-cypher-query \ --endpoint-url https://your-neptune-endpoint:port \ --open-cypher-query "CALL neptune.graph.pg_schema.stop()"
SDK
import boto3 from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.execute_open_cypher_query( openCypherQuery='CALL neptune.graph.pg_schema.stop()' ) print(response)
awscurl
awscurl -X POST https://your-neptune-endpoint:port/openCypher \ -H "Content-Type: application/x-www-form-urlencoded" \ --region us-east-1 --service neptune-db \ -d 'query=CALL neptune.graph.pg_schema.stop()'

Actions IAM requises : neptune-db:ReadDataViaQuery et neptune-db:WriteDataViaQuery

Comportement :

  • Arrête le calcul en cours. La progression est enregistrée afin de pouvoir reprendre là où elle s'était arrêtée lorsque vous appelez compute() à nouveau.

  • Un calcul arrêté ne reprend pas automatiquement au redémarrage du moteur. Vous devez appeler explicitementcompute().

Réponse : Renvoie l'objet d'état indiquant l'état : "Stopped" avec le courantprogressPercentage.

Utilisation de YIELD avec les résultats du schéma

Vous pouvez les utiliser YIELD pour extraire des champs de schéma et les combiner avec d'autres requêtes. L'exemple suivant récupère toutes les étiquettes de nœuds et compte le nombre de nœuds pour chaque étiquette. La collSort() fonction trie la liste par ordre alphabétique :

CALL neptune.graph.pg_schema() YIELD schema WITH schema.nodeLabels as nl UNWIND collSort(nl) as label MATCH (n) WHERE label in labels(n) RETURN label, COUNT(n) as count

Exemple de sortie :

{ "results": [{ "label": "airport", "count": 3503 }, { "label": "continent", "count": 7 }, { "label": "country", "count": 237 }, { "label": "version", "count": 1 }] }

Cycle de vie du calcul des schémas

Fonctionnement asynchrone

Le calcul du schéma est une opération asynchrone. Lorsque vous appelezneptune.graph.pg_schema.compute(), il revient immédiatement avec l'état actuel. Le calcul s'exécute en arrière-plan. Vous effectuez un sondage pour connaître la progression et l'achèvement en appelantneptune.graph.pg_schema(), ce qui renvoie l'état actuel etprogressPercentage.

States

Le calcul du schéma passe par les états suivants :

  • NotStarted— Aucun schéma n'a encore été calculé. pg_schema()renvoie un schéma vide.

  • InProgress— Un calcul de fond est en cours. pg_schema()renvoie des résultats partiels (union du dernier schéma complet et des découvertes issues du calcul en cours).

  • Completed— Le calcul s'est terminé avec succès. Le schéma complet est disponible.

  • Stopped— Le calcul a été arrêté, soit par appel, stop() soit parce qu'un redémarrage du moteur l'a interrompu. Des résultats partiels sont disponibles. La progression est enregistrée afin que le calcul puisse reprendre là où il s'était arrêté lorsque vous appelezcompute().

  • Failed— Le calcul a rencontré une erreur. Le dernier schéma correctement calculé (le cas échéant) reste disponible.

Comportement de persistance et de redémarrage

Le schéma calculé est conservé et survit aux redémarrages du moteur. Le comportement de redémarrage dépend de l'état au moment du redémarrage :

  • InProgress— Si le moteur redémarre pendant le calcul, le calcul passe à. Stopped Appelez compute() pour reprendre là où vous vous êtes arrêté. La progression est préservée et le calcul se poursuit depuis son dernier point de contrôle.

  • Stopped— Le calcul ne reprend pas automatiquement. Vous devez appeler compute() pour reprendre là où il s'est arrêté.

  • Completed— Le schéma est chargé et disponible immédiatement.

Résultats partiels

Lorsqu'un calcul est en cours, pg_schema() renvoie des résultats partiels. Il s'agit notamment de tout schéma précédemment terminé fusionné avec les étiquettes, les propriétés et les triplets découverts jusqu'à présent dans le calcul en cours. Cela signifie que vous n'avez pas à attendre la fin d'un calcul complet pour récupérer des informations de schéma utiles.

Réplicas en lecture

Les instances Read Replica peuvent lire le schéma à l'aide deCALL neptune.graph.pg_schema(). Neptune réplique le schéma à partir de l'instance d'écriture et le rend disponible sur les répliques presque immédiatement à mesure que des éléments de schéma sont découverts sur l'enregistreur.

Les répliques en lecture ne peuvent pas être exécutées compute() oustop(). Ces appels renvoient une erreur :

  • compute()"Schema cannot be computed on read replica"

  • stop()"Schema compute cannot be stopped on read replica"

Bonnes pratiques

  • Recalculer après les mutations  : le schéma ne se met pas à jour automatiquement lorsque les données sont modifiées. Recalculez le schéma après des chargements en masse ou des mutations de données importantes. Utilisez ce lastComputedTimestamp champ pour déterminer si le schéma est obsolète par rapport aux modifications récentes apportées à votre graphique.

  • Simultanéité  : la valeur de simultanéité par défaut (0) s'adapte automatiquement au matériel de votre instance. Pour la plupart des charges de travail, il s'agit du paramètre recommandé. Si le calcul en arrière-plan a un impact sur la charge de travail de vos requêtes, spécifiez une valeur inférieure (par exemple, 1 ou 2) pour réduire l'utilisation des ressources.

  • Arrêter et reprendre  : si le calcul en arrière-plan a un impact sur la charge de travail de vos requêtes, arrêtez-le stop() et reprenez-le plus tard pendant une période de faible trafic en appelant compute() à nouveau. Le calcul reprend là où il s'était arrêté.

  • Gestion des redémarrages en douceur  : si le moteur redémarre alors qu'un calcul de schéma est en cours, le calcul passe à. Stopped Appelez compute() pour reprendre là où vous vous êtes arrêté. Les progrès sont préservés.

  • Bases de données volumineuses : pour les bases de données comportant de grands volumes de stockage (plusieurs To), le calcul complet du schéma peut prendre plus de temps. Vous pouvez démarrer un calcul, le laisser s'exécuter jusqu'à une progression de 10 à 20 %, puis l'arrêter. Les résultats partiels collectés au cours de cette fenêtre fournissent un exemple de schéma utile avec de nombreux libellés, propriétés et triplets déjà découverts. Lisez le schéma partiel pg_schema() pendant que le calcul est en cours ou après l'arrêt. Reprenez plus tard lorsque votre charge de travail le permettra.

Limitations

  • Les suppressions nécessitent un recalcul  : les étiquettes, propriétés et triplets supprimés ne sont supprimés du schéma qu'après le prochain recalcul complet. D'ici là, les éléments supprimés peuvent toujours apparaître dans les résultats du schéma.

  • OpenCypher uniquement  : vous ne pouvez appeler cette procédure que via le point de terminaison de requête OpenCypher.

  • Impossible de calculer pendant le chargement en bloc — Neptune rejette le calcul du schéma lorsqu'une opération de chargement en bloc est active. Déclenchez le calcul une fois le chargement groupé terminé.

Exemple de sortie.

L'exemple suivant montre la sortie du schéma pour le jeu de données sur les routes aériennes :

awscurl -X POST https://your-neptune-endpoint:port/openCypher \ -H "Content-Type: application/x-www-form-urlencoded" \ --region us-east-1 --service neptune-db \ -d 'query=CALL neptune.graph.pg_schema()'
{ "results": [{ "schema": { "edgeLabelDetails": { "route": { "properties": { "dist": ["Int"] } }, "contains": { "properties": {} } }, "edgeLabels": ["route", "contains"], "status": { "concurrency": "16", "lastComputedTimestamp": "2026-06-04T23:58:17Z", "state": "Completed", "progressPercentage": "100" }, "nodeLabels": ["version", "continent", "airport", "country"], "labelTriples": [{ "~type": "route", "~from": "airport", "~to": "airport" }, { "~type": "contains", "~from": "country", "~to": "airport" }, { "~type": "contains", "~from": "continent", "~to": "airport" }], "nodeLabelDetails": { "continent": { "properties": { "type": ["String"], "code": ["String"], "desc": ["String"] } }, "airport": { "properties": { "type": ["String"], "city": ["String"], "icao": ["String"], "code": ["String"], "country": ["String"], "lat": ["Double"], "longest": ["Int"], "runways": ["Int"], "desc": ["String"], "lon": ["Double"], "region": ["String"], "elev": ["Int"] } }, "country": { "properties": { "type": ["String"], "code": ["String"], "desc": ["String"] } }, "version": { "properties": { "date": ["String"], "desc": ["String"], "author": ["String"], "type": ["String"], "code": ["String"] } } } } }] }