make-graph 演算子
適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft Sentinel
make-graph
演算子は、エッジとノードの表形式の入力からグラフ構造を構築します。
構文
Edges|
make-graph
SourceNodeId-->
TargetNodeId [ with
Nodes1on
NodeId1 [,
Nodes2on
NodeId2 ]]
Edges|
make-graph
SourceNodeId-->
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 つが任意に選択されます。
ユーザーは、次の方法でノード情報を処理できます。
-
ノード情報は必要ありません:
make-graph
ソースとターゲットで完了します。 -
明示的なノード プロパティ: "
with
Nodes1on
NodeId1 [,
Nodes2on
NodeId2 ]" を使用して、最大 2 つの表形式式を使用します。 -
既定のノード識別子: は "
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 |