Operatore make-graph
Si applica a: ✅Microsoft Fabric✅Azure Esplora dati✅ Azure Monitor✅Microsoft Sentinel
L'operatore make-graph
compila una struttura a grafo da input tabulari di archi e nodi.
Sintassi
Edge |
make-graph
SourceNodeId TargetNodeId -->
[ with
Nodes1 on
NodeId1 [,
Nodes2 NodeId2 on
]]
Edge |
make-graph
SourceNodeId TargetNodeId -->
[ with_node_id=
DefaultNodeId ]
Parametri
Nome | Digita | Obbligatorio | Descrizione |
---|---|---|---|
Bordi | string |
✔️ | L'origine tabulare contenente i bordi del grafico, ogni riga rappresenta un bordo nel grafico. |
SourceNodeId | string |
✔️ | Colonna in Archi con gli ID dei nodi di origine dei bordi. |
TargetNodeId | string |
✔️ | Colonna in Archi con gli ID dei nodi di destinazione dei bordi. |
Nodi | string |
Espressioni tabulari contenenti le proprietà dei nodi nel grafico. | |
NodesId | string |
Colonne con gli ID nodo nei nodi. | |
DefaultNodeId | string |
Nome della colonna per l'ID nodo predefinito. |
Valori restituiti
L'operatore make-graph
restituisce un'espressione del grafo e deve essere seguita da un operatore del grafo. Ogni riga nell'espressione Archi di origine diventa un bordo nel grafico con proprietà che sono i valori di colonna della riga. Ogni riga nell'espressione tabulare Nodi diventa un nodo nel grafico con proprietà che corrispondono ai valori di colonna della riga. I nodi visualizzati nella tabella Archi ma non hanno una riga corrispondente nella tabella Nodes vengono creati come nodi con l'ID nodo corrispondente e le proprietà vuote.
Nota
Ogni nodo ha un identificatore univoco. Se lo stesso ID nodo viene visualizzato nelle tabelle Nodes1 e Nodes2 , viene creato un singolo nodo unendo le relative proprietà. Se sono presenti valori di proprietà in conflitto per lo stesso nodo, uno dei valori viene scelto in modo arbitrario.
Gli utenti possono gestire le informazioni sui nodi nei modi seguenti:
- Nessuna informazione sul nodo necessaria:
make-graph
completa con l'origine e la destinazione. - Proprietà esplicite del nodo: usare fino a due espressioni tabulari usando "
with
Nodes1on
NodeId1 [,
Nodes2on
NodeId2 ]." - Identificatore di nodo predefinito: usare "
with_node_id=
DefaultNodeId".
Esempio
Grafico archi e nodi
Nell'esempio seguente viene compilato un grafico dai bordi e dalle tabelle dei nodi. I nodi rappresentano persone e sistemi e i bordi rappresentano relazioni diverse tra i nodi. L'operatore make-graph
compila il grafico. L'operatore graph-match
viene quindi usato con un modello a grafo per cercare i percorsi di attacco che portano al nodo di "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
Output
Utente malintenzionato | Compromessi | Sistema |
---|---|---|
Mallory | Bob | Trent |
Identificatore di nodo predefinito
Nell'esempio seguente viene compilato un grafico usando solo i bordi, con la name
proprietà come identificatore di nodo predefinito. Questo approccio è utile quando si crea un grafico da un'espressione tabulare di archi, assicurandosi che l'identificatore del nodo sia disponibile per la sezione vincoli dell'operatore successivo 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
Output
Utente malintenzionato | Compromessi | Sistema |
---|---|---|
Mallory | Bob | Trent |