View a markdown version of this page

Esquema de gráficos de propiedades - Amazon Neptune

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Esquema de gráficos de propiedades

El neptune.graph.pg_schema() procedimiento proporciona una descripción general completa de la estructura del gráfico de propiedades. Devuelve todas las etiquetas de los nodos, las etiquetas de los bordes, las propiedades con sus tipos de datos y los triples de etiquetas ({~from, ~type, ~to}patrones que describen cómo se conectan los tipos de nodos a través de los tipos de borde).

Actualmente, este procedimiento solo está disponible a través del punto final de OpenCypher y descubre el esquema de todos los datos del gráfico de propiedades.

Utilice este procedimiento para tareas como:

  • Generación de consultas mediante IA y LLM: proporcione a los LLM la estructura gráfica que necesitan para generar consultas Cypher válidas a partir del lenguaje natural (Text-to-Cypheraplicaciones GraphRag).

  • Visualización y exploración de gráficos: herramientas como Graph Explorer utilizan la información del esquema para representar representaciones visuales interactivas de los datos de los gráficos sin tener que escanear toda la base de datos.

  • Descubrimiento de esquemas de aplicaciones: aplicaciones que necesitan comprender la estructura de los gráficos desde el inicio, como los generadores de esquemas de GraphQL o las herramientas de validación de datos.

Comparación con Neptune Analytics

En Neptune Analytics, neptune.graph.pg_schema() es sincrónico. Calcula el esquema de cada llamada.

En Neptune Database, se activa explícitamente un cálculo de esquema asincrónico mediante una llamada, que devuelve inmediatamente. neptune.graph.pg_schema.compute() El cálculo se ejecuta en segundo plano mientras se sondea para completarlo con. neptune.graph.pg_schema() Una vez calculado, Neptune conserva el esquema y lo devuelve instantáneamente en las lecturas posteriores sin necesidad de volver a calcularlo. Los resultados parciales también están disponibles mientras el cálculo aún está en curso. También puede detener un cálculo en ejecución y reanudarlo más adelante.

Comparación con la API Graph Summary

La API Graph Summary no proporciona triples de etiquetas ni tipos de datos de propiedades. El procedimiento del esquema del gráfico de propiedades llena este vacío. Los triples de etiquetas muestran los patrones de relación específicos de la gráfica. Por ejemplo, a Person se conecta a Company través de un worksAt borde. Esta información es fundamental para que los LLM generen consultas semánticamente correctas.

Requisitos previos

Engine version (Versión del motor)

El procedimiento del esquema de gráficos de propiedades requiere la versión 1.4.8.0 o posterior del motor Neptune.

Permisos de IAM

Se requieren las siguientes acciones de IAM para cada operación de esquema:

  • CALL neptune.graph.pg_schema()— requiereneptune-db:ReadDataViaQuery.

  • CALL neptune.graph.pg_schema.compute()— requiere neptune-db:ReadDataViaQuery yneptune-db:WriteDataViaQuery.

  • CALL neptune.graph.pg_schema.stop()— requiere neptune-db:ReadDataViaQuery yneptune-db:WriteDataViaQuery.

Las stop() operaciones compute() y requieren permisos de escritura porque modifican el estado interno utilizado para almacenar en caché y mantener el esquema.

ejemplo Política de IAM de ejemplo

La siguiente política otorga los permisos mínimos necesarios para todas las operaciones del esquema:

{ "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/*" }] }

Para conceder acceso de solo lectura al esquema (sin la posibilidad de activar el cálculo), utilice Only. neptune-db:ReadDataViaQuery

Instancias de escritor y lector

Puede activar el cálculo del esquema solo en la instancia de escritura. Las instancias de réplica de lectura pueden leer el esquema (que se replica desde el escritor) pero no pueden ejecutarse compute() o. stop()

Referencia de la API

Lea el esquema

Recupera el esquema actual y el estado de cálculo.

Sintaxis:

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()'

Comportamiento: regresa inmediatamente con el esquema y el estado actuales. Siempre sin bloqueos. Si no se ha calculado ningún esquema, devuelve el estado: "NotStarted" con campos de esquema vacíos. Si hay un cálculo en curso, devuelve resultados parciales con el estado:. "InProgress"

Formato de respuesta:

La respuesta contiene un objeto de esquema con los siguientes campos:

Objeto de estado:

  • state(Cadena): estado actual del ciclo de vida: NotStartedInProgress,Completed,Stopped, Failed

  • concurrency(Cadena): número de subprocesos utilizados para el cálculo. 0 significa automático (determinado en función del hardware). Rango: 1 (el más bajo) a 16 (el más alto).

  • lastComputedTimestamp(Cadena): marca de tiempo ISO-8601 UTC del último cálculo exitoso (p. ej.,) 2026-05-29T08:00:00Z

  • progressPercentage(Cadena) — Progreso del cálculo: 0 cuando no se inició, 0—99 durante el cálculo, 100 cuando se completó

  • errorMessage(Cadena): solo está presente cuando se rechaza una solicitud o se produce un error en el cálculo. Explica el motivo.

Objeto de esquema:

  • nodeLabels— Matriz de todas las etiquetas de nodo únicas del gráfico

  • edgeLabels— Matriz de todas las etiquetas de borde únicas del gráfico

  • nodeLabelDetails— Para cada etiqueta de nodo: propiedades y sus tipos de datos

  • edgeLabelDetails— Para cada etiqueta de borde: propiedades y sus tipos de datos

  • labelTriples— Matriz de patrones de relación: {~from, ~type, ~to} describe qué tipos de nodos se conectan a través de qué tipos de aristas

Tipos de datos compatibles: StringInt,Long,Double,Bool, Date

Si una propiedad tiene varios tipos de datos en diferentes nodos (por ejemplo, algunos nodos almacenan age como Int y otros comoString), todos los tipos observados aparecen en la datatypes matriz.

Esquema de cálculo

Activa un cálculo de esquema en segundo plano.

Sintaxis:

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

Con el parámetro de concurrencia opcional:

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()'

Con un parámetro de concurrencia opcional:

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})'

Acciones de IAM requeridas: y neptune-db:ReadDataViaQuery neptune-db:WriteDataViaQuery

Parámetros:

  • concurrency(Entero, opcional): número de subprocesos para el cálculo en segundo plano. 0 (predeterminado) = se determina automáticamente en función del hardware. Rango: 1 (el más bajo) a 16 (el más alto). Usa valores más bajos en instancias más pequeñas para reducir el impacto en los recursos.

Comportamiento:

  • Regresa inmediatamente con el estado actual. El cálculo se ejecuta de forma asincrónica en segundo plano.

  • Si se llama cuando el estado esStopped, el cálculo se reanuda desde donde lo dejó.

  • Si se llama cuando el estado esCompleted, inicia un nuevo cálculo. El esquema anterior continúa sirviendo lecturas hasta que se complete el nuevo cálculo.

  • Si se llama cuando ya se ha realizado un cálculoInProgress, Neptune rechaza la solicitud con un mensaje de error.

  • Si se llama durante una carga masiva activa, Neptune rechaza la solicitud con un mensaje de error.

Respuesta: Devuelve el objeto de estado que muestra el estado: "InProgress" con los progressPercentage campos concurrency y.

Detener el cálculo del esquema

Detiene la ejecución de un cálculo en segundo plano.

Sintaxis:

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()'

Acciones de IAM necesarias: y neptune-db:ReadDataViaQuery neptune-db:WriteDataViaQuery

Comportamiento:

  • Detiene el cálculo en ejecución. El progreso se guarda para que pueda reanudarse desde donde lo dejó cuando compute() vuelva a llamar.

  • Un cálculo detenido no se reanuda automáticamente al reiniciar el motor. Debe llamar compute() de forma explícita.

Respuesta: Devuelve el objeto de estado que muestra el estado: "Stopped" con el actualprogressPercentage.

Uso de YIELD con los resultados del esquema

Puede utilizarlos YIELD para extraer los campos del esquema y combinarlos con otras consultas. En el siguiente ejemplo, se recuperan todas las etiquetas de los nodos y se cuenta el número de nodos de cada etiqueta. La collSort() función ordena la lista alfabéticamente:

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

Código de salida de ejemplo:

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

Ciclo de vida de cálculo del esquema

Operación asincrónica

El cálculo del esquema es una operación asincrónica. Cuando llamasneptune.graph.pg_schema.compute(), vuelve inmediatamente con el estado actual. El cálculo se ejecuta en segundo plano. Para comprobar el progreso y la finalización, se hace una llamadaneptune.graph.pg_schema(), que devuelve el estado actual yprogressPercentage.

Estados

El cálculo del esquema pasa por los siguientes estados:

  • NotStarted— Aún no se ha calculado ningún esquema. pg_schema()devuelve un esquema vacío.

  • InProgress— Se está ejecutando un cálculo en segundo plano. pg_schema()devuelve resultados parciales (una unión del último esquema completo y los descubrimientos del cálculo actual).

  • Completed— El cálculo finalizó correctamente. El esquema completo está disponible.

  • Stopped— El cálculo se detuvo, ya sea por una llamada stop() o porque un reinicio del motor lo interrumpió. Hay resultados parciales disponibles. El progreso se guarda para que el cálculo pueda reanudarse desde donde lo dejó cuando compute() llamaste.

  • Failed— Se ha producido un error en el cálculo. El último esquema calculado correctamente (si lo hay) permanece disponible.

Comportamiento de persistencia y reinicio

El esquema calculado se mantiene y sobrevive a los reinicios del motor. El comportamiento de reinicio depende del estado en el momento del reinicio:

  • InProgress— Si el motor se reinicia durante el cálculo, el cálculo pasa a. Stopped Llame compute() para reanudarlo desde donde lo dejó. El progreso se conserva y el cálculo continúa desde el último punto de control.

  • Stopped— El cálculo no se reanuda automáticamente. Debe llamar compute() para continuar desde donde lo dejó.

  • Completed— El esquema se carga y está disponible de inmediato.

Resultados parciales

Mientras un cálculo está en curso, pg_schema() devuelve resultados parciales. Estos incluyen cualquier esquema completado anteriormente y fusionado con las etiquetas, propiedades y triples descubiertos hasta el momento en el cálculo actual. Esto significa que no tiene que esperar a que se complete un cálculo completo para recuperar información útil sobre el esquema.

Réplicas de lectura

Las instancias de réplica de lectura pueden leer el esquema usando. CALL neptune.graph.pg_schema() Neptune replica el esquema desde la instancia del escritor y lo pone a disposición en las réplicas casi inmediatamente a medida que se descubren los elementos del esquema en el escritor.

Las réplicas de lectura no se pueden ejecutar o. compute() stop() Estas llamadas devuelven un error:

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

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

Prácticas recomendadas

  • Recalcular después de las mutaciones: el esquema no se actualiza automáticamente cuando cambian los datos. Vuelva a calcular el esquema después de cargas masivas o mutaciones de datos importantes. Utilice el lastComputedTimestamp campo para determinar si el esquema está desactualizado en relación con los cambios recientes en el gráfico.

  • Simultaneidad: el valor de simultaneidad predeterminado (0) se adapta automáticamente al hardware de la instancia. Para la mayoría de las cargas de trabajo, esta es la configuración recomendada. Si el cálculo en segundo plano afecta a la carga de trabajo de la consulta, especifique un valor inferior (por ejemplo, 1 o 2) para reducir el uso de recursos.

  • Detener y reanudar: si el cálculo en segundo plano afecta a la carga de trabajo de la consulta, deténgalo stop() y reanude más tarde durante un período de menor tráfico llamando de nuevo. compute() El cálculo continúa desde donde se detuvo.

  • Handle se reinicia correctamente: si el motor se reinicia mientras se está realizando un cálculo de esquema, el cálculo pasa a. Stopped Llame compute() para reanudarlo desde donde lo dejó. Se preserva el progreso.

  • Bases de datos grandes: en el caso de las bases de datos con grandes volúmenes de almacenamiento (varios TB), el cálculo del esquema completo puede llevar mucho tiempo. Puede iniciar un proceso, dejar que se ejecute hasta que avance entre un 10 y un 20% y, a continuación, detenerlo. Los resultados parciales recopilados durante esta ventana proporcionan un ejemplo de esquema útil con muchas etiquetas, propiedades y triples ya descubiertas. Lea el esquema parcial pg_schema() mientras el cálculo está en curso o después de detenerlo. Reanude más tarde cuando su carga de trabajo lo permita.

Limitaciones

  • Las eliminaciones requieren un nuevo cálculo: las etiquetas, propiedades y triples eliminadas solo se eliminan del esquema después del siguiente recálculo completo. Hasta entonces, es posible que los elementos eliminados sigan apareciendo en los resultados del esquema.

  • OpenCypher solo: solo puede llamar a este procedimiento a través del punto final de consulta de OpenCypher.

  • No se puede realizar el cálculo durante la carga masiva: Neptune rechaza el cálculo del esquema mientras la operación de carga masiva esté activa. Activa el procesamiento una vez finalizada la carga masiva.

Resultado de ejemplo

El siguiente ejemplo muestra el resultado del esquema para el conjunto de datos de rutas aéreas:

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"] } } } } }] }