Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
O operador graph-match pesquisa todas as ocorrências de um padrão de grafo em uma fonte de grafo de entrada.
Nota
Esse operador é usado com o operador make-graph.
Sintaxe
G|graph-match [cycles=CyclesOption] Pattern [whereConstraints] project [ColumnName=] de expressão [, ...]
Parâmetros
Notação de padrão de grafo
A tabela a seguir mostra a notação de grafo com suporte:
| Elemento | Variável nomeada | Anônimo |
|---|---|---|
| Nodo |
(
n) |
() |
| Borda direcionada: da esquerda para a direita |
-[
e]-> |
--> |
| Borda direcionada: da direita para a esquerda |
<-[
e]- |
<-- |
| Qualquer borda de direção |
-[
e]- |
-- |
| Borda de comprimento variável |
-[
e*3..5]- |
-[*3..5]- |
Borda de comprimento variável
Uma borda de comprimento variável permite que um padrão específico seja repetido várias vezes dentro dos limites definidos. Esse tipo de borda é indicado por um asterisco (*), seguido pelos valores mínimos e máximos de ocorrência no formato mínimo..máximo. Os valores mínimo e máximo devem ser inteiro escalares. Qualquer sequência de bordas que caiam dentro desse intervalo de ocorrências pode corresponder à borda variável do padrão, se todas as bordas na sequência atenderem às restrições descritas na cláusula where.
Várias sequências
Várias sequências delimitadas por vírgula são usadas para expressar padrões não lineares. Para descrever a conexão entre sequências diferentes, elas precisam compartilhar um ou mais nomes de variáveis de um nó. Por exemplo, para representar um padrão de estrela com o nó n no centro conectado aos nós a,b,c e d, o seguinte padrão pode ser usado:
(
um)--(n)--(b,c)()--(n)--(d)
Há suporte apenas para padrões de componentes conectados únicos.
Retorna
O operador graph-match retorna um resultado tabular, em que cada registro corresponde a uma correspondência do padrão no grafo.
As colunas retornadas são definidas na cláusula project do operador usando propriedades de bordas e/ou nós definidas no padrão. Propriedades e funções de propriedades de bordas de comprimento variável são retornadas como uma matriz dinâmica, cada valor na matriz corresponde a uma ocorrência da borda de comprimento variável.
Exemplos
O exemplo a seguir representa uma hierarquia organizacional. Ele demonstra como uma borda de comprimento variável pode ser usada para localizar funcionários de diferentes níveis da hierarquia em uma única consulta. Os nós no grafo representam os funcionários e as bordas são de um funcionário para o gerente. Depois de criarmos o grafo usando make-graph, pesquisamos funcionários na Aliceorganização que são mais jovens que 30.
executar o de consulta
let employees = datatable(name:string, age:long)
[
"Alice", 32,
"Bob", 31,
"Eve", 27,
"Joe", 29,
"Chris", 45,
"Alex", 35,
"Ben", 23,
"Richard", 39,
];
let reports = datatable(employee:string, manager:string)
[
"Bob", "Alice",
"Chris", "Alice",
"Eve", "Bob",
"Ben", "Chris",
"Joe", "Alice",
"Richard", "Bob"
];
reports
| make-graph employee --> manager with employees on name
| graph-match (alice)<-[reports*1..5]-(employee)
where alice.name == "Alice" and employee.age < 30
project employee = employee.name, age = employee.age, reportingPath = map(reports, manager)
de saída
| empregado | idade | reportingPath |
|---|---|---|
| Joe | 29 | [ "Alice" ] |
| Véspera | 27 | [ "Alice", "Bob" ] |
| Ben | vinte e três | [ "Alice", "Chris" ] |
O exemplo a seguir cria um grafo das tabelas Actions e Entities. As entidades são pessoas e sistemas, e as ações descrevem relações diferentes entre entidades. Seguir o make-graph operador que cria o grafo é uma chamada para graph-match um padrão de grafo que procura caminhos de ataque para o "Apollo" sistema.
executar o de consulta
let Entities = datatable(name:string, type:string, age:long)
[
"Alice", "Person", 23,
"Bob", "Person", 31,
"Eve", "Person", 17,
"Mallory", "Person", 29,
"Apollo", "System", 99
];
let Actions = datatable(source:string, destination:string, action_type:string)
[
"Alice", "Bob", "communicatesWith",
"Alice", "Apollo", "trusts",
"Bob", "Apollo", "hasPermission",
"Eve", "Alice", "attacks",
"Mallory", "Alice", "attacks",
"Mallory", "Bob", "attacks"
];
Actions
| make-graph source --> destination with Entities on name
| graph-match (mallory)-[attacks]->(compromised)-[hasPermission]->(apollo)
where mallory.name == "Mallory" and apollo.name == "Apollo" and attacks.action_type == "attacks" and hasPermission.action_type == "hasPermission"
project Attacker = mallory.name, Compromised = compromised.name, System = apollo.name
de saída
| Agressor | Comprometida | Sistema |
|---|---|---|
| Mallory | Bob | Apolo |
O exemplo a seguir é semelhante ao exemplo de caminho de ataque anterior, mas com uma restrição extra: queremos que a entidade comprometida também se comunique com Alice. O graph-match prefixo padrão é o mesmo do exemplo anterior e adicionamos outra sequência com o comprometido como um vínculo entre as sequências.
executar o de consulta
let Entities = datatable(name:string, type:string, age:long)
[
"Alice", "Person", 23,
"Bob", "Person", 31,
"Eve", "Person", 17,
"Mallory", "Person", 29,
"Apollo", "System", 99
];
let Actions = datatable(source:string, destination:string, action_type:string)
[
"Alice", "Bob", "communicatesWith",
"Alice", "Apollo", "trusts",
"Bob", "Apollo", "hasPermission",
"Eve", "Alice", "attacks",
"Mallory", "Alice", "attacks",
"Mallory", "Bob", "attacks"
];
Actions
| make-graph source --> destination with Entities on name
| graph-match (mallory)-[attacks]->(compromised)-[hasPermission]->(apollo), (compromised)-[communicates]-(alice)
where mallory.name == "Mallory" and apollo.name == "Apollo" and attacks.action_type == "attacks" and hasPermission.action_type == "hasPermission" and alice.name == "Alice"
project Attacker = mallory.name, Compromised = compromised.name, System = apollo.name
de saída
| Agressor | Comprometida | Sistema |
|---|---|---|
| Mallory | Bob | Apolo |
Conteúdo relacionado
- operadores Graph
- operador make-graph
- all()
- any()
- map()
- inner_nodes()