Condividi tramite


Operatore make-graph

Si applica a: ✅Microsoft Fabric✅Azure Esplora dati Azure MonitorMicrosoft 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:

  1. Nessuna informazione sul nodo necessaria: make-graph completa con l'origine e la destinazione.
  2. Proprietà esplicite del nodo: usare fino a due espressioni tabulari usando " with Nodes1 on NodeId1 [ , Nodes2 on NodeId2 ]."
  3. 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