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
Le neptune.graph.pg_schema() Cette 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 d'arêtes).
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 (Text-to-Cypher, applications GraphRag).
Visualisation et exploration de graphiques — Des outils tels que Explorateur de graphes utilisez les informations du schéma pour créer des représentations visuelles interactives des données graphiques sans avoir à scanner l'intégralité de la base de données.
Découverte du schéma de l'application — Les 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 la base de données Neptune, vous déclenchez explicitement un calcul de schéma asynchrone en appelant neptune.graph.pg_schema.compute(), qui revient immédiatement. Le calcul s'exécute en arrière-plan pendant que vous interrogez pour terminer le sondage à l'aide de neptune.graph.pg_schema(). 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
Le API de résumé des graphiques 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, un Person se connecte à Company via un worksAt bord. 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écessiteneptune-db:ReadDataViaQueryetneptune-db:WriteDataViaQuery.CALL neptune.graph.pg_schema.stop()— nécessiteneptune-db:ReadDataViaQueryetneptune-db:WriteDataViaQuery.
Le compute() et stop() les opérations 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 uniquement 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 s'exécuter compute() ou stop().
Référence des API
Lire le schéma
Récupère le schéma actuel et l'état du calcul.
Syntaxe :
Comportement : Renvoie immédiatement le schéma et l'état actuels. Toujours non bloquant. Si aucun schéma n'a été calculé, renvoie l'état : "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 :NotStarted,InProgress,Completed,Stopped,Failed. À partir de la version 1.5.0.0 du moteur Neptune, un calcul interrompu peut également signalerPaused. Pour plus d'informations, voir États.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(Chaîne) — 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) — La raison pour laquelle une demande a été rejetée ou pour laquelle le calcul estPausedouFailed. Par exemple, un redémarrage ou un basculement a interrompu le calcul, ou le calcul a échoué.
Objet du schéma :
nodeLabels— Tableau de toutes les étiquettes de nœuds uniques dans le graphiqueedgeLabels— Tableau de toutes les étiquettes de bord uniques dans le graphiquenodeLabelDetails— Pour chaque étiquette de nœud : propriétés et leurs types de donnéesedgeLabelDetails— Pour chaque étiquette de bord : propriétés et leurs types de donnéeslabelTriples— Éventail de modèles relationnels :{~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 : String, Int, 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 age comme Int et d'autres comme String), 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 :
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 est
StoppedouPaused, le calcul reprend là où il s'était arrêté. Pour plus de détails sur ces états, voir États.S'il est appelé alors que l'état est
Completed, 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à effectué
InProgress, 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 indiquant l'état : "InProgress" avec le concurrency et progressPercentage champs.
Arrêter le calcul du schéma
Arrête un calcul en arrière-plan en cours d'exécution.
Syntaxe :
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()encore une fois.Un calcul arrêté fait pas reprend automatiquement au redémarrage du moteur. Vous devez appeler explicitement
compute().
Réponse : Renvoie l'objet d'état indiquant l'état : "Stopped" avec le courant progressPercentage.
Utilisation de YIELD avec les résultats du schéma
Vous pouvez utiliser YIELD pour extraire les champs du 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. Le 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. Quand tu appelles neptune.graph.pg_schema.compute(), il revient immédiatement avec le statut actuel. Le calcul s'exécute en arrière-plan. Vous effectuez un sondage pour connaître les progrès et les résultats en appelant neptune.graph.pg_schema(), qui renvoie l'état actuel et progressPercentage.
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é par un appel explicite àstop(). 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(). Un calcul arrêté ne comporte pas deerrorMessage.Paused— À partir de la version 1.5.0.0 du moteur Neptune, un redémarrage du moteur ou un basculement entraîne une transitionInProgresscalcul pourPausedplutôt queStopped. Des résultats partiels sont disponibles et le calcul enregistre sa progression. Pour reprendre là où il s'est arrêté, appelezcompute(). La reprise renvoie le calcul àInProgresset puisCompleted.Failed— Le calcul a rencontré une erreur. Le dernier schéma correctement calculé (le cas échéant) reste disponible. L'objet d'état comprend unerrorMessageexpliquant l'échec.
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 ou tombe en panne pendant le calcul, celui-ci est interrompu. À partir de la version 1.5.0.0 du moteur Neptune, le calcul passe àPaused; dans les versions précédentes, il passe àStopped. Appelcompute()pour reprendre là où il s'était arrêté. Le calcul préserve la progression et se poursuit à partir de son dernier point de contrôle.Paused— Le calcul fait pas reprendre automatiquement. Tu dois appelercompute()pour reprendre là où il s'était arrêté.Stopped— Le calcul fait pas reprendre automatiquement. Tu dois appelercompute()pour reprendre là où il s'était arrêté.Completed— Le schéma est chargé et disponible immédiatement.
Résultats partiels
Pendant qu'un calcul est en cours, pg_schema() renvoie des résultats partiels. Ceux-ci incluent 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 de réplication en lecture peuvent lire le schéma à l'aide de CALL 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 s'exécuter compute() ou stop(). 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 des mutations — Le schéma ne se met pas à jour automatiquement en cas de modification des données. Recalculez le schéma après des chargements en masse ou des mutations de données importantes. Utilisez le
lastComputedTimestampchamp 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 avec
stop()et reprenez plus tard pendant une période de faible trafic en appelantcompute()encore une fois. Le calcul reprend là où il s'était arrêté.La poignée redémarre avec élégance — Si le moteur redémarre ou tombe en panne alors qu'un calcul de schéma est en cours, le calcul est interrompu. À partir de la version 1.5.0.0 du moteur Neptune, il passe à
Paused. Appelcompute()pour reprendre là où il s'était arrêté. Les progrès sont préservés.Grandes bases de données — 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 avec
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 seulement — Vous pouvez appeler cette procédure uniquement via le point de terminaison de requête OpenCypher.
Impossible de calculer pendant le chargement groupé — Neptune rejette le calcul du schéma lorsqu'une opération de chargement groupé 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" \ --regionus-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"] } } } } }] }