Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer
Nota:
Esta característica actualmente está en su versión preliminar pública. La funcionalidad y la sintaxis están sujetas a cambios antes de la disponibilidad general.
Los modelos de grafos de Azure Data Explorer permiten definir, administrar y consultar eficazmente estructuras de grafos persistentes dentro de la base de datos. A diferencia de los gráficos transitorios creados con el operador make-graph , los modelos de grafos son representaciones almacenadas que se pueden consultar repetidamente sin volver a generar el gráfico para cada consulta, lo que mejora significativamente el rendimiento para el análisis complejo basado en relaciones.
Información general
Un modelo de grafo es un objeto de base de datos que representa un gráfico de propiedades etiquetado (LPG) dentro de Azure Data Explorer. Consta de nodos, también denominados vértices y bordes, también denominados relaciones. Tanto los nodos como los bordes pueden tener propiedades que las describen. El modelo define el esquema del grafo, incluidos los tipos de nodo y borde con sus propiedades. También define el proceso para construir el grafo a partir de datos tabulares almacenados en tablas de base de datos KQL y de expresiones tabulares.
Características claves
Oferta de modelos de grafos:
- Persistencia de metadatos: almacene especificaciones de grafos en metadatos de base de datos para durabilidad y reutilización
- Instantáneas materializadas: elimine la necesidad de recompilar gráficos para cada consulta, lo que mejora drásticamente el rendimiento de las consultas.
- Definición de esquema: admite esquemas definidos opcionales pero recomendados para nodos y bordes, lo que garantiza la coherencia de los datos.
- Integración de KQL profunda: integración sin problemas con la semántica de grafos
- Recorridos optimizados: incluya una indexación especializada para operaciones de recorrido de grafos eficaces, lo que hace que las consultas de búsqueda de rutas de acceso y coincidencia de patrones complejas sean significativamente más rápidas.
Cuándo usar modelos de grafos
Los modelos de grafos proporcionan ventajas significativas para el análisis basado en relaciones, pero requieren una configuración adicional en comparación con las consultas de grafos ad hoc. Considere la posibilidad de usar modelos de grafos cuando:
- El rendimiento es fundamental: se ejecutan repetidamente consultas de grafos en los mismos datos subyacentes y se necesita un rendimiento optimizado.
- Datos de relaciones complejas: tiene datos con muchas relaciones interconectadas que se benefician de una representación de grafo
- Estructura estable: la estructura del grafo es relativamente estable, con actualizaciones periódicas pero no constantes
- Operaciones avanzadas de grafos: debe realizar recorridos complejos, búsqueda de rutas de acceso, coincidencia de patrones o detección de comunidad en los datos
- Esquema coherente: el análisis de grafos requiere una estructura bien definida con tipos de nodo y borde coherentes
Para un análisis de grafo único más sencillo en conjuntos de datos más pequeños, el operador make-graph podría ser más adecuado.
Componentes del modelo de Grafo
Un modelo de grafo consta de dos componentes principales:
Esquema (opcional)
El esquema define la estructura y las propiedades de los nodos y bordes en el modelo de grafo. Aunque es opcional, el esquema tiene varios propósitos importantes:
- Seguridad de tipos: las propiedades de esquema definen los tipos de datos esperados para las propiedades perimetrales y de nodo, lo que garantiza la coherencia de tipos durante las consultas de grafos.
- Validación de propiedades: todas las propiedades definidas en el esquema se convierten en propiedades válidas para nodos o bordes con las etiquetas correspondientes, independientemente de si estas propiedades aparecen en las columnas de consulta de paso.
- Compatibilidad de consultas: las propiedades del esquema se pueden hacer referencia de forma segura en consultas de coincidencia de grafos sin conflictos de tipos con columnas de consulta de pasos
Estructura del esquema
-
Nodos: define los tipos de etiquetas de nodo y sus propiedades tipadas (por ejemplo,
"Person": {"Name": "string", "Age": "long"}
) -
Bordes: define los tipos de etiquetas perimetrales y sus propiedades tipadas (por ejemplo,
"WORKS_AT": {"StartDate": "datetime", "Position": "string"}
)
Definición
La definición especifica cómo compilar el grafo a partir de datos tabulares a través de una serie de operaciones secuenciales. Esta sección es el núcleo del modelo de grafos, ya que transforma los datos relacionales en una estructura de grafos.
Características clave de la definición:
Ejecución secuencial: los pasos se ejecutan en el orden exacto en que aparecen en la matriz Definición. Este orden es crítico porque:
- Normalmente, los nodos deben crearse antes de los bordes que hacen referencia a ellos.
- Los pasos posteriores pueden basar o modificar los resultados de los pasos anteriores
- La secuencia afecta al rendimiento y al uso de memoria durante la construcción del grafo
Construcción incremental: cada paso agrega al grafo que se está compilando, lo que le permite:
- Combinar datos de varias tablas o orígenes
- Aplicación de una lógica diferente para distintos tipos de nodos o bordes
- Creación de estructuras de grafos complejas de forma incremental
Tipos de paso:
AddNodes: pasos que definen cómo crear nodos a partir de datos tabulares
- Se puede usar varias veces para agregar distintos tipos de nodos.
- Cada paso puede extraer de diferentes orígenes de datos o aplicar filtros diferentes.
- Las propiedades del nodo se derivan de las columnas del resultado de la consulta
AddEdges: pasos que definen cómo crear bordes a partir de datos tabulares
- Puede hacer referencia a los nodos que aún no existen (el sistema creará nodos de marcador de posición y los actualizará cuando se procesen los pasos addNodes más adelante).
- Puede crear relaciones entre nodos a partir de los mismos pasos de AddNodes o diferentes.
- Las propiedades perimetrales se derivan de las columnas del resultado de la consulta
- Aunque es posible agregar bordes antes de los nodos, se recomienda agregar nodos primero para mejorar la legibilidad y la comprensión.
Ejemplo de flujo de ejecución:
Step 1 (AddNodes): Create Person nodes from Employees table
Step 2 (AddNodes): Create Company nodes from Organizations table
Step 3 (AddEdges): Create WORKS_AT edges between Person and Company nodes
Step 4 (AddEdges): Create KNOWS edges between Person nodes
Este enfoque secuencial garantiza que, cuando el paso 3 crea bordes WORKS_AT, ya existen los nodos Person (del paso 1) y los nodos de empresa (del paso 2) en el gráfico.
Etiquetas en modelos de Graph
Las etiquetas son identificadores críticos que clasifican nodos y bordes en el grafo, lo que permite un filtrado eficaz y la coincidencia de patrones. Los modelos de grafos de Azure Data Explorer admiten dos tipos complementarios de etiquetas:
Etiquetas estáticas
- Se define explícitamente en la sección Esquema del modelo de grafo
- Representar tipos de nodo o borde con propiedades predefinidas
- Proporcionar un esquema coherente para los elementos del grafo
- Se hace referencia a la matriz "Etiquetas" en los pasos AddNodes y AddEdges
- Ideal para tipos de entidad y relación conocidos y estables
Etiquetas dinámicas
- No predefinido en la sección Esquema
- Generado en tiempo de ejecución a partir de datos de las tablas subyacentes
- Se especifica mediante "LabelsColumn" en los pasos AddNodes o AddEdges
- Puede ser una sola etiqueta (columna de cadena) o varias etiquetas (columna de matriz dinámica)
- Permitir estructuras de grafos más flexibles que se adapten a los datos
- Útil para sistemas en los que los tipos de nodo o borde evolucionan con el tiempo
Sugerencia
Puede combinar etiquetas estáticas y dinámicas para obtener las ventajas de ambos enfoques: validación de esquemas para los tipos de entidad principales, a la vez que mantiene la flexibilidad para las clasificaciones en evolución.
Pasos de definición en detalle
La sección Definición de un modelo de grafo contiene pasos que definen cómo construir el grafo a partir de datos tabulares. Cada paso tiene parámetros específicos en función de su tipo.
Pasos de AddNodes
Los pasos de AddNodes definen cómo crear nodos en el grafo a partir de datos tabulares:
Parámetro | Obligatorio | Descripción |
---|---|---|
Variante | Sí | Debe establecerse en "AddNodes" |
Consulta | Sí | Consulta KQL que recupera los datos de los nodos. El resultado de la consulta debe incluir todas las columnas necesarias para las propiedades e identificadores del nodo. |
NodeIdColumn | Sí | Columna del resultado de la consulta usada como identificador único para cada nodo |
Etiquetas | No | Matriz de nombres de etiqueta estáticos definidos en la sección Esquema para aplicar a estos nodos |
LabelsColumn | No | Columna del resultado de la consulta que proporciona etiquetas dinámicas para cada nodo. Puede ser una columna de cadena (etiqueta única) o una columna de matriz dinámica (varias etiquetas) |
Pasos de AddEdges
Los pasos addEdges definen cómo crear relaciones entre nodos en el gráfico:
Parámetro | Obligatorio | Descripción |
---|---|---|
Variante | Sí | Debe establecerse en "AddEdges" |
Consulta | Sí | Consulta KQL que recupera los datos de los bordes. El resultado de la consulta debe incluir identificadores de nodo de origen y de destino y cualquier propiedad perimetral. |
ColumnaFuente | Sí | Columna del resultado de la consulta que contiene los identificadores del nodo de origen. |
TargetColumn | Sí | Columna del resultado de la consulta que contiene los identificadores de nodo de destino. |
Etiquetas | No | Matriz de nombres de etiqueta estáticos definidos en la sección Esquema para aplicar a estos bordes |
LabelsColumn | No | Columna del resultado de la consulta que proporciona etiquetas dinámicas para cada borde. Puede ser una columna de cadena (etiqueta única) o una columna de matriz dinámica (varias etiquetas) |
Ejemplos de modelos de grafos
Ejemplo básico con etiquetas estáticas y dinámicas
En el ejemplo siguiente se crea un modelo de grafo de red profesional que combina definiciones de esquema estático con etiquetado dinámico:
.create-or-alter graph_model ProfessionalNetwork ```
{
"Schema": {
"Nodes": {
"Person": {"Name": "string", "Age": "long", "Title": "string"},
"Company": {"Name": "string", "Industry": "string", "FoundedYear": "int"}
},
"Edges": {
"WORKS_AT": {"StartDate": "datetime", "Position": "string", "Department": "string"},
"KNOWS": {"ConnectionDate": "datetime", "ConnectionStrength": "int"}
}
},
"Definition": {
"Steps": [
{
"Kind": "AddNodes",
"Query": "Employees | project Id, Name, Age, Title, NodeType",
"NodeIdColumn": "Id",
"Labels": ["Person"],
"LabelsColumn": "NodeType"
},
{
"Kind": "AddNodes",
"Query": "Organizations | project Id, Name, Industry, FoundedYear",
"NodeIdColumn": "Id",
"Labels": ["Company"]
},
{
"Kind": "AddEdges",
"Query": "EmploymentRecords | project EmployeeId, CompanyId, StartDate, Position, Department",
"SourceColumn": "EmployeeId",
"TargetColumn": "CompanyId",
"Labels": ["WORKS_AT"]
},
{
"Kind": "AddEdges",
"Query": "Connections | project PersonA, PersonB, ConnectionDate, ConnectionType, ConnectionStrength",
"SourceColumn": "PersonA",
"TargetColumn": "PersonB",
"Labels": ["KNOWS"],
"LabelsColumn": "ConnectionType"
}
]
}
}
```
Este modelo habilitaría consultas como buscar compañeros conectados a través de varios grados de separación, identificar a las personas que trabajan en el mismo sector o analizar relaciones organizativas.
Creación y administración de modelos de Graph
Azure Data Explorer proporciona un conjunto completo de comandos de administración para trabajar con modelos de grafos a lo largo de su ciclo de vida.
Resumen de comandos
Comando | Propósito | Parámetros clave |
---|---|---|
.create-or-alter graph_model | Crear un nuevo modelo de grafo o modificar uno existente | Base de datos, nombre, esquema, definición |
.drop graph_model | Eliminación de un modelo de grafo | Base de datos, nombre |
.show graph_models | Enumeración de modelos de grafos disponibles | Base de datos [opcional] |
Ciclo de vida del modelo de Graph
Un flujo de trabajo típico para administrar modelos de grafos implica:
- Desarrollo : creación de un modelo de grafo inicial con un esquema y una definición que se asigna a los datos
- Validación : consulte el modelo para comprobar la estructura correcta y los resultados esperados.
- Mantenimiento : actualice periódicamente el modelo a medida que evoluciona la estructura de datos.
- Administración de instantáneas : creación y retirada de instantáneas para equilibrar el rendimiento y la actualización
Sugerencia
Al comenzar con los modelos de grafos, comience con un pequeño subconjunto de los datos para validar el diseño antes de escalar a conjuntos de datos más grandes.
Instantáneas de grafos
Las instantáneas de grafos son entidades de base de datos que representan instancias de modelos de grafos en momentos específicos en el tiempo. Aunque un modelo de grafo define la estructura y los orígenes de datos de un grafo, una instantánea es el gráfico materializado real que se puede consultar.
Aspectos clave de las instantáneas de grafos:
- Cada instantánea está vinculada a un modelo de grafo específico
- Un único modelo de grafo puede tener varias instantáneas asociadas
- Las instantáneas se crean con el comando .
.make graph_snapshot
- Las instantáneas incluyen metadatos, como la hora de creación y el modelo de grafo de origen.
- Las instantáneas permiten consultar el grafo tal y como existía en un momento específico en el tiempo
Para obtener información más detallada sobre cómo trabajar con instantáneas de grafos, consulte Introducción a las instantáneas de grafos.
Consulta de modelos de Graph
Los modelos de grafos se consultan mediante la graph()
función , que proporciona acceso a la entidad de grafo. Esta función admite la recuperación de la instantánea más reciente del grafo o la creación del gráfico en el momento de la consulta si las instantáneas no están disponibles.
Estructura básica de la consulta
graph("GraphModelName")
| graph-match <pattern>
where <filters>
project <output fields>
Ejemplos de consultas
1. Patrón básico de nodo perimetral
// Find people who commented on posts by employees in the last week
graph("SocialNetwork")
| graph-match (person)-[comments]->(post)<-[authored]-(employee)
where person.age > 30
and comments.createTime > ago(7d)
project person.name, post.title, employee.userName
2. Varios patrones de relación
// Find people who both work with and are friends with each other
graph("ProfessionalNetwork")
| graph-match (p1)-[worksWith]->(p2)-[friendsWith]->(p1)
where labels(worksWith) has "WORKS_WITH" and labels(friendsWith) has "FRIENDS_WITH" and
labels(p1) has "Person" and labels(p2) has "Person"
project p1.name, p2.name, p1.department
3. Rutas de acceso de longitud variable
// Find potential influence paths up to 3 hops away
graph("InfluenceNetwork")
| graph-match (influencer)-[influences*1..3]->(target)
where influencer.id == "user123" and all(influences, labels() has "INFLUENCES")
project influencePath = influences,
pathLength = array_length(influences),
target.name
La graph()
función proporciona una manera coherente de acceder a los datos del grafo sin necesidad de construir explícitamente el grafo para cada consulta.
Nota:
Consulte Operadores de Graph para obtener la referencia completa sobre la sintaxis y las funcionalidades de consulta de grafos.
Preguntas más frecuentes
¿Quién es responsable de actualizar el gráfico?
Los usuarios o procesos deben actualizar el grafo por sí mismos. Inicialmente, no existen directivas de actualización automática para las nuevas entidades de grafo. Sin embargo, el gráfico permanece consultable incluso si la instantánea se está creando o aún no se ha creado.
¿Cómo se puede actualizar un gráfico?
Para actualizar un gráfico:
- Creación de una nueva instantánea mediante una operación asincrónica (
.make graph_snapshot
) - Una vez creada, las consultas de grafos entrantes usan automáticamente la nueva instantánea.
- Opcional: Quite la instantánea antigua para liberar recursos (
.drop graph_snapshot
)
¿Qué ocurre si los distintos pasos crean bordes o nodos duplicados?
Los pasos de definición se ejecutan secuencialmente y el control de duplicados difiere entre los nodos y los bordes:
Bordes: los duplicados permanecen como duplicados de forma predeterminada, ya que los bordes no tienen identificadores únicos. Si varios pasos crean relaciones de destino de origen idénticas, cada uno se convierte en un borde independiente en el gráfico. Este comportamiento es intencionado, ya que varias relaciones entre los mismos nodos pueden representar interacciones o eventos diferentes a lo largo del tiempo.
Nodos: "Duplicados" se combinan automáticamente en función del valor NodeIdColumn: el sistema supone que representan la misma entidad. Cuando varios pasos crean nodos con el mismo identificador:
- Todas las propiedades de los distintos pasos se combinan en un solo nodo
- Si hay valores de propiedad en conflicto para el mismo nombre de propiedad, el valor del paso que se ejecutó por última vez tiene prioridad.
- Las propiedades que existen en un paso, pero no en otras, se conservan
Este comportamiento de combinación permite crear nodos de forma incremental en pasos, como agregar información básica en un paso y enriquecerlos con propiedades adicionales en pasos posteriores.
¿Cómo controlan los modelos de grafos los cambios de esquema?
Cuando cambia el esquema de los datos subyacentes:
- Modificación del modelo de grafos mediante el
.create-or-alter graph_model
comando para actualizar su esquema o definición - Para materializar estos cambios, cree una nueva instantánea.
- Las instantáneas anteriores permanecen accesibles hasta que se quitan explícitamente
¿Puedo consultar varios modelos de grafos?
Sí, puede consultar varios modelos de grafos dentro de una sola consulta mediante la composición:
- Usar la salida de un
graph()
operador como entrada para otrograph()
operador - Procesamiento y transformación de resultados de un grafo antes de alimentarse en otra consulta de grafo
- Encadenar varias operaciones de grafo para el análisis entre dominios sin crear un modelo unificado
Ejemplo:
// Query the first graph model
graph("EmployeeNetwork")
| graph-match (person)-[manages]->(team)
where labels(manages) has "MANAGES" and labels(person) has "Employee"
project manager=person.name, teamId=team.id
// Use these results to query another graph model
| join (
graph("ProjectNetwork")
| graph-match (project)-[assignedTo]->(team)
where labels(assignedTo) has "ASSIGNED_TO"
project projectName=project.name, teamId=team.id
) on teamId
¿Cuál es la diferencia entre las etiquetas y las propiedades?
- Etiquetas: clasificar nodos y bordes para la coincidencia de patrones estructurales
- Propiedades: almacene valores de datos asociados a nodos y bordes (usados en el filtrado y la salida)