你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
make-graph 运算符
make-graph
运算符根据边和节点的表格输入生成图形结构。
语法
Edges|
make-graph
SourceNodeId-->
TargetNodeId [ with
Nodes1on
NodeId1 [,
Nodes2on
NodeId2 ]]
Edges|
make-graph
SourceNodeId-->
TargetNodeId [ with_node_id=
DefaultNodeId ]
参数
客户 | 类型 | 必需 | 说明 |
---|---|---|---|
Edges | string |
✔️ | 包含图形边的表格源,每一行表示图形中的边。 |
SourceNodeId | string |
✔️ | Edges 中包含边的源节点 ID 的列。 |
TargetNodeId | string |
✔️ | Edges 中包含边的目标节点 ID 的列。 |
节点 | string |
包含图形中节点属性的表格表达式。 | |
NodesId | string |
Nodes 中包含节点 ID 的列。 | |
DefaultNodeId | string |
默认节点 ID 的列的名称。 |
返回
make-graph
运算符返回图形表达式,并且必须后跟图形运算符。 源 Edges 表达式中的每一行都会成为图形的一个边,其中包含作为行的列值的属性。
节点表格表达式中的每一行都会成为图形中的一个节点,其中包含作为行的列值的属性。 出现在 Edges 表中但在节点表中没有相应行的节点将被创建为具有相应节点 ID 和空属性的节点。
注意
每个节点都有唯一标识符。 如果 Nodes1 和 Nodes2 表中都显示相同的节点 ID,则通过合并其属性来创建单个节点。 如果同一节点的属性值存在冲突,则任意选择其中一个值。
用户可以通过以下方式处理节点信息:
-
不需要节点信息:
make-graph
使用源和目标完成。 -
显式节点属性:最多使用两个表格表达式,使用“
with
Nodes1on
NodeId1 [,
Nodes2on
NodeId2 ]”。 -
默认节点标识符:使用“
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
输出
攻击者 | 已泄露 | 系统 |
---|---|---|
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
输出
攻击者 | 已泄露 | 系统 |
---|---|---|
Mallory | Bob | Trent |