Operador de make-graph
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
O operador make-graph
constrói uma estrutura gráfica a partir de entradas tabulares de arestas e nós.
Sintaxe
Bordas|
make-graph
SourceNodeId-->
TargetNodeId [ with
Nodes1on
NodeId1 [,
Nodes2on
NodeId2 ]]
Bordas|
make-graph
SourceNodeId-->
TargetNodeId [ with_node_id=
DefaultNodeId ]
Parâmetros
Designação | Tipo | Necessário | Descrição |
---|---|---|---|
Bordas | string |
✔️ | A fonte tabular que contém as arestas do gráfico, cada linha representa uma aresta no gráfico. |
SourceNodeId | string |
✔️ | A coluna em Bordas com as IDs do nó de origem das bordas. |
TargetNodeId | string |
✔️ | A coluna em Bordas com as IDs do nó de destino das bordas. |
de nós | string |
As expressões tabulares que contêm as propriedades dos nós no gráfico. | |
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 operador make-graph
retorna uma expressão gráfica e deve ser seguido por um operador de gráfico . Cada linha na de origem expressão Bordas torna-se uma aresta no gráfico com propriedades que são os valores de coluna da linha. Cada linha no Nós expressão tabular torna-se 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 Nodes, são criados como nós com a ID do nó correspondente e propriedades vazias.
Observação
Cada nó tem um identificador exclusivo. Se o mesmo ID de nó aparecer nas tabelas
Os usuários podem manipular informações de nó das seguintes maneiras:
-
Nenhuma informação de nó necessária:
make-graph
é concluída com origem e destino. -
Propriedades explícitas do nó: usar até duas expressões tabulares usando "
with
Nodes1on
NodeId1 [,
Nodes2on
NodeId2 ]." -
Identificador de nó padrão: use "
with_node_id=
DefaultNodeId."
Exemplo
Gráfico de arestas e nós
O exemplo a seguir cria um gráfico a partir de tabelas de bordas e nós. Os nós representam pessoas e sistemas, e as bordas representam diferentes relações entre nós. O operador make-graph
constrói o gráfico. Em seguida, o operador graph-match
é usado com um padrão gráfico para procurar caminhos de ataque que levam ao nó do sistema "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
Output
Atacante | Comprometido | Sistema |
---|---|---|
Mallory | Joaquim | Trento |
Identificador de nó padrão
O exemplo a seguir cria um gráfico usando apenas bordas, com a propriedade name
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 de graph-match
subsequente.
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
Output
Atacante | Comprometido | Sistema |
---|---|---|
Mallory | Joaquim | Trento |