Operador make-graph
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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:
- No se requiere información de nodo:
make-graph
se completa con el origen y el destino. - Propiedades de nodo explícitas: use hasta dos expresiones tabulares mediante "
with
Nodes1on
NodeId1 [,
Nodes2on
NodeId2 ]." - 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 |