Compartilhar via


operador make-graph

Aplica-se a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

O make-graph operador constrói uma estrutura de grafo a partir de entradas tabulares de arestas e nós.

Sintaxe

Bordas|make-graph SourceNodeId --> TargetNodeId [ withonNodeId1 [ onNodeId2 ]]

Bordas|make-graph SourceNodeId--> TargetNodeId [ with_node_id=DefaultNodeId ]

Parâmetros

Nome Digitar Obrigatória Descrição
Bordas string ✔️ A fonte tabular que contém as bordas do gráfico, cada linha representa uma borda no gráfico.
Código-fonte string ✔️ A coluna em Edges com os IDs de nó de origem dos Edges.
TargetNodeId string ✔️ A coluna em Edges com os IDs de nó de destino dos Edges.
Nós string As expressões tabulares que contêm as propriedades dos nós no grafo.
NodesId string As colunas com os IDs de nó em Nós.
DefaultNodeId string O nome da coluna para a ID do nó padrão.

Devoluções

O make-graph operador retorna uma expressão de grafo e deve ser seguido por um operador de grafo. Cada linha na expressão Edges de origem se torna uma borda no gráfico com propriedades que são os valores de coluna da linha. Cada linha na expressão tabular Nós se torna um nó no gráfico com propriedades que são os valores de coluna da linha. Os nós que aparecem na tabela Edges , mas não têm uma linha correspondente na tabela Nós , são criados como nós com o ID de nó correspondente e propriedades vazias.

Observação

Cada nó tem um identificador exclusivo. Se o mesmo ID de nó aparecer nas tabelas Nodes1 e Nodes2 , um único nó será criado mesclando suas propriedades. Se houver valores de propriedade conflitantes para o mesmo nó, um dos valores será escolhido arbitrariamente.

Os usuários podem lidar com informações de nó das seguintes maneiras:

  1. Nenhuma informação de nó necessária:make-graph é concluída com origem e destino.
  2. Propriedades explícitas do nó: use até duas expressões tabulares usando "withonNodeId1 [ onNodeId2 ]".
  3. Identificador de nó padrão: use "with_node_id=DefaultNodeId".

Exemplo

Gráfico de arestas e nós

O exemplo a seguir cria um grafo a partir de tabelas de bordas e nós. Os nós representam pessoas e sistemas, e as bordas representam diferentes relacionamentos entre nós. O make-graph operador constrói o gráfico. Em seguida, o graph-match operador é usado com um padrão de gráfico para procurar caminhos de ataque que levam ao nó do "Trent" sistema.

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

Saída

Invasor Comprometido Sistema
Mallory Bob Trent

Identificador de nó padrão

O exemplo a seguir cria um grafo usando apenas bordas, com a name propriedade como o identificador de nó padrão. Essa abordagem é útil ao criar um gráfico a partir de uma expressão tabular de bordas, garantindo que o identificador de nó esteja disponível para a seção de restrições do operador subsequente 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

Saída

Invasor Comprometido Sistema
Mallory Bob Trent