Compartir a través de


Operador make-graph

Se aplica a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

El make-graph operador crea una estructura de grafo a partir de entradas tabulares de bordes y nodos.

Sintaxis

Edges | make-graph SourceNodeId TargetNodeId --> [ with Nodes1 on NodeId1 [, Nodes2 NodeId2 on ]]

Edges | make-graph SourceNodeId TargetNodeId --> [ with_node_id= DefaultNodeId ]

Parámetros

Nombre Type Obligatorio Descripción
Bordes string ✔️ Origen tabular que contiene los bordes del grafo, cada fila representa un borde del grafo.
SourceNodeId string ✔️ Columna en Bordes con los identificadores de nodo de origen de los bordes.
TargetNodeId string ✔️ Columna en Bordes con los identificadores de nodo de destino de los bordes.
Nodos string Expresiones tabulares que contienen las propiedades de los nodos del gráfico.
NodesId string Columnas con los identificadores de nodo en Nodos.
DefaultNodeId string Nombre de la columna para el identificador de nodo predeterminado.

Devoluciones

El make-graph operador devuelve una expresión de grafo y debe ir seguida de un operador de grafo. Cada fila de la expresión Edges de origen se convierte en un borde del gráfico con propiedades que son los valores de columna de la fila. Cada fila de la expresión tabular Nodos se convierte en un nodo del grafo con propiedades que son los valores de columna de la fila. Los nodos que aparecen en la tabla Edges , pero que no tienen una fila correspondiente en la tabla Nodos se crean como nodos con el identificador de nodo correspondiente y las propiedades vacías.

Nota:

Cada nodo tiene un identificador único. Si aparece el mismo identificador de nodo en las tablas Nodes1 y Nodes2 , se crea un único nodo mediante la combinación de sus propiedades. Si hay valores de propiedad en conflicto para el mismo nodo, se elige arbitrariamente uno de los valores.

Los usuarios pueden controlar la información del nodo de las maneras siguientes:

  1. No se requiere información de nodo: make-graph se completa con el origen y el destino.
  2. Propiedades de nodo explícitas: use hasta dos expresiones tabulares mediante " with Nodes1 on NodeId1 [ , Nodes2 on NodeId2 ]."
  3. Identificador de nodo predeterminado: use "with_node_id=DefaultNodeId".

Ejemplo

Gráfico de bordes y nodos

En el ejemplo siguiente se compila un grafo a partir de bordes y tablas de nodos. Los nodos representan personas y sistemas, y los bordes representan relaciones diferentes entre los nodos. El make-graph operador compila el grafo. A continuación, el graph-match operador se usa con un patrón de grafo para buscar rutas de acceso de ataque que conducen al nodo del "Trent" sistema.

let nodes = datatable(name:string, type:string, age:int) 
[ 
  "Alice", "Person", 23,  
  "Bob", "Person", 31,  
  "Eve", "Person", 17,  
  "Mallory", "Person", 29,  
  "Trent", "System", 99 
]; 
let edges = datatable(source:string, destination:string, edge_type:string) 
[ 
  "Alice", "Bob", "communicatesWith",  
  "Alice", "Trent", "trusts",  
  "Bob", "Trent", "hasPermission",  
  "Eve", "Alice", "attacks",  
  "Mallory", "Alice", "attacks",  
  "Mallory", "Bob", "attacks"  
]; 
edges 
| make-graph source --> destination with nodes on name 
| graph-match (mallory)-[attacks]->(compromised)-[hasPermission]->(trent) 
  where mallory.name == "Mallory" and trent.name == "Trent" and attacks.edge_type == "attacks" and hasPermission.edge_type == "hasPermission" 
  project Attacker = mallory.name, Compromised = compromised.name, System = trent.name

Salida

Atacante Comprometido Sistema
Mallory Bob Trent

Identificador de nodo predeterminado

En el ejemplo siguiente se compila un grafo con solo bordes, con la name propiedad como identificador de nodo predeterminado. Este enfoque es útil al crear un grafo a partir de una expresión tabular de bordes, lo que garantiza que el identificador de nodo está disponible para la sección de restricciones del operador posterior graph-match .

let edges = datatable(source:string, destination:string, edge_type:string) 
[ 
  "Alice", "Bob", "communicatesWith",  
  "Alice", "Trent", "trusts",  
  "Bob", "Trent", "hasPermission",  
  "Eve", "Alice", "attacks",  
  "Mallory", "Alice", "attacks",  
  "Mallory", "Bob", "attacks"  
]; 
edges 
| make-graph source --> destination with_node_id=name
| graph-match (mallory)-[attacks]->(compromised)-[hasPermission]->(trent) 
  where mallory.name == "Mallory" and trent.name == "Trent" and attacks.edge_type == "attacks" and hasPermission.edge_type == "hasPermission" 
  project Attacker = mallory.name, Compromised = compromised.name, System = trent.name

Salida

Atacante Comprometido Sistema
Mallory Bob Trent