다음을 통해 공유


make-graph 연산자

적용 대상: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft 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와 빈 속성을 가진 노드로 만들어집니다.

참고 항목

각 노드에는 고유 식별자가 있습니다. Nodes1Nodes2 테이블 모두에 동일한 노드 ID가 나타나면 해당 속성을 병합하여 단일 노드가 만들어집니다. 동일한 노드에 대해 충돌하는 속성 값이 있는 경우 값 중 하나가 임의로 선택됩니다.

사용자는 다음과 같은 방법으로 노드 정보를 처리할 수 있습니다.

  1. 노드 정보가 필요하지 make-graph 않습니다. 원본 및 대상을 사용하여 완료합니다.
  2. 명시적 노드 속성: "withNodes1 NodeId1 on [ , Nodes2 NodeId2 ]"를 사용하여 최대 두 on 개의 테이블 형식 식을 사용합니다.
  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

출력

공격자 손상됨 시스템
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