Freigeben über


Make-Graph-Operator

Gilt für: ✅Microsoft Fabric

Der make-graph Operator erstellt eine Diagrammstruktur aus tabellarischen Eingaben von Kanten und Knoten.

Syntax

Edges|make-graph SourceNodeId--> TargetNodeId [ withNodes1on NodeId1 [,Nodes2onNodeId2 ]]

Edges|make-graphSourceNodeId--> TargetNodeId [ with_node_id=DefaultNodeId ]

Parameter

Name Type Erforderlich Beschreibung
Kanten string ✔️ Die tabellarische Quelle, die die Ränder des Diagramms enthält, stellt jede Zeile einen Rand im Diagramm dar.
SourceNodeId string ✔️ Die Spalte in Edges mit den Quellknoten-IDs der Kanten.
TargetNodeId string ✔️ Die Spalte in Edges mit den Zielknoten-IDs der Kanten.
Knoten string Die tabellarischen Ausdrücke, die die Eigenschaften der Knoten im Diagramm enthalten.
NodesId string Die Spalten mit den Knoten-IDs in Knoten.
DefaultNodeId string Der Name der Spalte für die Standardknoten-ID.

Gibt zurück

Der make-graph Operator gibt einen Diagrammausdruck zurück und muss von einem Diagrammoperator gefolgt werden. Jede Zeile im Quell-Edges-Ausdruck wird zu einem Rand im Diagramm mit Eigenschaften, die die Spaltenwerte der Zeile sind. Jede Zeile im tabellarischen Ausdruck "Knoten " wird zu einem Knoten im Diagramm mit Eigenschaften, die die Spaltenwerte der Zeile sind. Knoten, die in der Tabelle "Kanten" angezeigt werden, aber keine entsprechende Zeile in der Tabelle "Knoten " haben, werden als Knoten mit der entsprechenden Knoten-ID und leeren Eigenschaften erstellt.

Hinweis

Jeder Knoten verfügt über einen eindeutigen Bezeichner. Wenn die gleiche Knoten-ID sowohl in den Tabellen "Knoten1 " als auch "Knoten2 " angezeigt wird, wird ein einzelner Knoten durch Zusammenführen ihrer Eigenschaften erstellt. Wenn konfliktende Eigenschaftswerte für denselben Knoten vorhanden sind, wird einer der Werte willkürlich ausgewählt.

Benutzer können Knoteninformationen auf folgende Weise behandeln:

  1. Es sind keine Knoteninformationen erforderlich:make-graph wird mit Quelle und Ziel abgeschlossen.
  2. Explizite Knoteneigenschaften: Verwenden von bis zu zwei tabellarischen Ausdrücken mit " onNodeId1 [ onNodeId2 ]."
  3. Standardknotenbezeichner: "DefaultNodeId" verwendenwith_node_id=.

Beispiel

Ränder und Knotendiagramm

Im folgenden Beispiel wird ein Diagramm aus Rändern und Knotentabellen erstellt. Die Knoten stellen Personen und Systeme dar, und die Kanten stellen unterschiedliche Beziehungen zwischen Knoten dar. Der make-graph Operator erstellt das Diagramm. Anschließend wird der graph-match Operator mit einem Diagrammmuster verwendet, um nach Angriffspfaden zu suchen, die "Trent" zum Systemknoten führen.

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

Angreifer Kompromittiert System
Mallory Bob Trent

Standardknotenbezeichner

Im folgenden Beispiel wird ein Diagramm erstellt, das nur Ränder verwendet, wobei die name Eigenschaft als Standardknotenbezeichner verwendet wird. Dieser Ansatz ist hilfreich beim Erstellen eines Diagramms aus einem tabellarischen Ausdruck von Kanten, um sicherzustellen, dass der Knotenbezeichner für den Einschränkungsbereich des nachfolgenden graph-match Operators verfügbar ist.

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

Angreifer Kompromittiert System
Mallory Bob Trent