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écessiteneptune-db:ReadDataViaQueryetneptune-db:WriteDataViaQuery.CALL neptune.graph.pg_schema.stop()— nécessiteneptune-db:ReadDataViaQueryetneptune-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 :
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,Failedconcurrency(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:00ZprogressPercentage(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 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— 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 :
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
Stopped, le calcul reprend là où il s'était arrêté.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à en cours
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 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 :
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 explicitement
compute().
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 à.StoppedAppelezcompute()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 appelercompute()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
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
stop()et reprenez-le plus tard pendant une période de faible trafic en appelantcompute()à 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 à.
StoppedAppelezcompute()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" \ --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"] } } } } }] }