次の方法で共有


make-graph 演算子

適用対象: ✅Microsoft FabricAzure データ エクスプローラーAzure MonitorMicrosoft Sentinel

make-graph演算子は、エッジとノードの表形式の入力からグラフ構造を構築します。

構文

Edges|make-graphSourceNodeId-->TargetNodeId [ withNodes1onNodeId1 [,Nodes2onNodeId2 ]]

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

パラメーター

件名 タイプ Required 説明
エッジ string ✔️ グラフのエッジを含む表形式のソース。各行はグラフ内のエッジを表します。
SourceNodeId string ✔️ エッジのソース ノード ID をEdges 内の列。
TargetNodeId string ✔️ エッジのターゲット ノード ID を持つ Edges の列。
ノード string グラフ内のノードのプロパティを含む表形式の式。
NodesId string Nodes内のノード ID を持つ列。
DefaultNodeId string 既定のノード ID の列の名前。

返品

make-graph演算子はグラフ式を返し、その後にグラフ演算子が続く必要があります。 ソース Edges 式の各行は、行の列値であるプロパティを持つグラフのエッジになります。 Nodes表形式式の各行は、グラフ内のノードになり、その行の列値であるプロパティが含まれます。 Edges テーブルに表示されるが、Nodes テーブルに対応する行がないノードは、対応するノード ID と空のプロパティを持つノードとして作成されます。

Note

各ノードには一意の識別子があります。 Nodes1 テーブルと Nodes2 テーブルの両方に同じノード ID が表示される場合は、プロパティをマージすることで 1 つのノードが作成されます。 同じノードに対して競合するプロパティ値がある場合、値の 1 つが任意に選択されます。

ユーザーは、次の方法でノード情報を処理できます。

  1. ノード情報は必要ありません:make-graph ソースとターゲットで完了します。
  2. 明示的なノード プロパティ: "withNodes1onNodeId1 [,Nodes2onNodeId2 ]" を使用して、最大 2 つの表形式式を使用します。
  3. 既定のノード識別子: は "with_node_id=DefaultNodeId" を使用します。

エッジとノードグラフ

次の例では、エッジ テーブルとノード テーブルからグラフを作成します。 ノードは人とシステムを表し、エッジはノード間の異なる関係を表します。 make-graph演算子によってグラフが作成されます。 次に、 graph-match オペレーターをグラフ パターンと共に使用して、 "Trent" システム ノードにつながる攻撃パスを検索します。

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

出力

攻撃者 セキュリティ侵害 System
Mallory Bob Trent

既定のノード識別子

次の例では、既定のノード識別子として name プロパティを使用して、エッジのみを使用してグラフを作成します。 この方法は、エッジの表形式の式からグラフを作成し、後続の 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

出力

攻撃者 セキュリティ侵害 System
Mallory Bob Trent