make-graph 연산자
적용 대상: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
연산자는 make-graph
에지 및 노드의 테이블 형식 입력에서 그래프 구조를 작성합니다.
구문
Edges |
make-graph
SourceNodeId -->
TargetNodeId [ with
Nodes1 on
NodeId1 [,
Nodes2 on
NodeId2 ]]
Edges |
make-graph
SourceNodeId -->
TargetNodeId [ with_node_id=
DefaultNodeId ]
매개 변수
이름 | Type | 필수 | 설명 |
---|---|---|---|
가장자리 | string |
✔️ | 그래프의 가장자리를 포함하는 테이블 형식 원본으로, 각 행은 그래프의 가장자리를 나타냅니다. |
SourceNodeId | string |
✔️ | 에지의 원본 노드 ID가 있는 Edge 의 열입니다. |
TargetNodeId | string |
✔️ | 에지의 대상 노드 ID가 있는 Edge 의 열입니다. |
노드 | string |
그래프에 있는 노드의 속성을 포함하는 테이블 형식 식입니다. | |
NodesId | string |
노드 ID가 노드에 있는 열입니다. | |
DefaultNodeId | string |
기본 노드 ID에 대한 열의 이름입니다. |
반품
연산자는 make-graph
그래프 식을 반환하고 그래프 연산자 뒤에 와야 합니다. 원본 Edges 식의 각 행은 행의 열 값인 속성을 사용하여 그래프의 가장자리가 됩니다. Nodes 테이블 형식 식의 각 행은 행의 열 값인 속성을 사용하여 그래프의 노드가 됩니다. Edges 테이블에 표시되지만 노드 테이블에 해당 행이 없는 노드는 해당 노드 ID와 빈 속성을 가진 노드로 만들어집니다.
참고 항목
각 노드에는 고유 식별자가 있습니다. Nodes1 및 Nodes2 테이블 모두에 동일한 노드 ID가 나타나면 해당 속성을 병합하여 단일 노드가 만들어집니다. 동일한 노드에 대해 충돌하는 속성 값이 있는 경우 값 중 하나가 임의로 선택됩니다.
사용자는 다음과 같은 방법으로 노드 정보를 처리할 수 있습니다.
- 노드 정보가 필요하지
make-graph
않습니다. 원본 및 대상을 사용하여 완료합니다. - 명시적 노드 속성: "
with
Nodes1 NodeId1on
[,
Nodes2 NodeId2 ]"를 사용하여 최대 두on
개의 테이블 형식 식을 사용합니다. - 기본 노드 식별자: "
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 |