Partager via


Opérateur make-graph

S’applique à : ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

L’opérateur make-graph génère une structure de graphe à partir d’entrées tabulaires de bords et de nœuds.

Syntaxe

Edges | make-graph SourceNodeId TargetNodeId --> [ with Node1 on NodeId1 [, Node2 on NodeId2 ]]

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

Paramètres

Nom Type Requise Description
Bords string ✔️ Source tabulaire contenant les bords du graphe, chaque ligne représente un bord dans le graphique.
SourceNodeId string ✔️ Colonne dans Edges avec les ID de nœud source des bords.
TargetNodeId string ✔️ Colonne dans Edges avec les ID de nœud cible des bords.
Nœuds string Expressions tabulaires contenant les propriétés des nœuds dans le graphique.
NodeId string Colonnes avec les ID de nœud dans les nœuds.
DefaultNodeId string Nom de la colonne pour l’ID de nœud par défaut.

Retours

L’opérateur make-graph retourne une expression de graphe et doit être suivi d’un opérateur de graphe. Chaque ligne de l’expression Edges source devient un bord dans le graphique avec des propriétés qui sont les valeurs de colonne de la ligne. Chaque ligne de l’expression tabulaire Nœuds devient un nœud dans le graphique avec des propriétés qui sont les valeurs de colonne de la ligne. Les nœuds qui apparaissent dans la table Edges , mais qui n’ont pas de ligne correspondante dans la table Nœuds , sont créés en tant que nœuds avec l’ID de nœud correspondant et les propriétés vides.

Remarque

Chaque nœud a un identificateur unique. Si le même ID de nœud apparaît dans les tables Node1 et Node2 , un nœud unique est créé en fusionnant leurs propriétés. S’il existe des valeurs de propriété conflictuelles pour le même nœud, l’une des valeurs est arbitrairement choisie.

Les utilisateurs peuvent gérer les informations de nœud de la manière suivante :

  1. Aucune information de nœud requise : make-graph se termine avec la source et la cible.
  2. Propriétés de nœud explicites : utilisez jusqu’à deux expressions tabulaires à l’aide de « with Node1 on NodeId1 [ , Node2 on NodeId2 ]. »
  3. Identificateur de nœud par défaut : utilisez «with_node_id= DefaultNodeId ».

Exemple

Graphique des arêtes et des nœuds

L’exemple suivant génère un graphique à partir de tableaux de bords et de nœuds. Les nœuds représentent des personnes et des systèmes, et les arêtes représentent différentes relations entre les nœuds. L’opérateur make-graph génère le graphique. Ensuite, l’opérateur graph-match est utilisé avec un modèle de graphique pour rechercher des chemins d’attaque menant au "Trent" nœud système.

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

Sortie

Attaquant Compromis System
Mallory Bob Trent

Identificateur de nœud par défaut

L’exemple suivant génère un graphique à l’aide de bords uniquement, avec la name propriété comme identificateur de nœud par défaut. Cette approche est utile lors de la création d’un graphique à partir d’une expression tabulaire de bords, ce qui garantit que l’identificateur de nœud est disponible pour la section contraintes de l’opérateur suivant 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

Sortie

Attaquant Compromis System
Mallory Bob Trent