make-graph 运算符
make-graph
运算符根据边和节点的表格输入生成图形结构。
语法
Edges |
make-graph
SourceNodeId -->
TargetNodeId [ with
Nodes1 on
NodeId1 [,
Nodes2 on
NodeId2 ]]
参数
客户 | 类型 | 必需 | 说明 |
---|---|---|---|
Edges | string |
✔️ | 包含图形边的表格源,每一行表示图形中的边。 |
SourceNodeId | string |
✔️ | Edges 中包含边的源节点 ID 的列。 |
TargetNodeId | string |
✔️ | Edges 中包含边的目标节点 ID 的列。 |
节点 | string |
包含图形中节点属性的表格表达式。 | |
NodesId | string |
Nodes 中包含节点 ID 的列。 |
返回
make-graph
运算符返回图形表达式,并且必须后跟图形运算符。 源 Edges 表达式中的每一行都会成为图形的一个边,其中包含作为行的列值的属性。 节点表格表达式中的每一行都会成为图形中的一个节点,其中包含作为行的列值的属性。 出现在 Edges 表中但在节点表中没有相应行的节点将被创建为具有相应节点 ID 和空属性的节点。
注意
每个节点都有唯一标识符。 如果 Nodes1 和 Nodes2 表中都显示相同的节点 ID,则通过合并其属性来创建单个节点。 如果同一节点的属性值存在冲突,则任意选择其中一个值。
示例
以下示例从边和节点表生成图形。 节点表示人员和系统,边表示节点之间的不同关系。 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 |