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.
Este artigo fornece padrões práticos de consulta GQL para tarefas comuns de grafo em Microsoft Fabric: localizar vizinhos, percorrer conexões multihop, identificar conexões compartilhadas, contar relações e localizar entidades sem conexões.
Os exemplos usam o conjunto de dados de exemplo de rede social. Para obter referência de linguagem completa, consulte o guia de linguagem GQL.
Pré-requisitos
- Um item de grafo com dados carregados. Se você não estiver familiarizado com o grafo, conclua o tutorial primeiro.
- Familiaridade com
MATCHeRETURNconsultas básicas. Consulte o guia de linguagem GQL.
Localizar vizinhos diretos
Retorne todos os nós conectados a um nó inicial por meio de um salto.
Encontre todos que uma pessoa específica conheça:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName
Encontre todas as empresas em que uma pessoa trabalhou:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:workAt]->(c:Company)
RETURN c.name, c.url
Encontrar amigos de amigos (vários saltos)
Use padrões de comprimento variável com {min,max} para navegar por mais de um salto.
Encontre pessoas a dois saltos de distância - amigos dos amigos de Alice que Alice não conhece diretamente:
MATCH (alice:Person WHERE alice.firstName = 'Alice')-[:knows]->{2,2}(fof:Person)
RETURN DISTINCT fof.firstName, fof.lastName
LIMIT 100
Encontre todos acessíveis dentro de três graus:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,3}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Dica
Sempre defina um limite superior na passagem de comprimento variável. Padrões não associados em grafos grandes ou densos podem atingir limites de tempo limite de consulta. Confira as limitações atuais.
Contar relações por entidade
Use GROUP BY com count(*) para contar quantas relações cada entidade tem.
Conte quantos amigos cada pessoa tem, ordenados da maioria para o menor:
MATCH (p:Person)-[:knows]->(friend:Person)
LET name = p.firstName || ' ' || p.lastName
RETURN name, count(*) AS friendCount
GROUP BY name
ORDER BY friendCount DESC
LIMIT 20
Conte quantos funcionários trabalham em cada empresa:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Localizar conexões compartilhadas
Reutilizando uma variável em duas partes de um padrão cria uma restrição implícita de "mesmo nó". Use essa restrição para localizar entidades conectadas por meio de uma terceira entidade compartilhada.
Encontre pares de pessoas que conhecem a mesma pessoa:
MATCH (a:Person)-[:knows]->(mutual:Person)<-[:knows]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, mutual.firstName AS sharedContact
LIMIT 100
Encontre pares de pessoas que trabalham na mesma empresa:
MATCH (c:Company)<-[:workAt]-(a:Person), (c)<-[:workAt]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, c.name AS company
LIMIT 100
Dica
A WHERE a.id < b.id condição impede que pares duplicados (Alice-Bob e Bob-Alice) apareçam nos resultados.
Localizar entidades sem relações
Use OPTIONAL MATCH seguido de uma verificação nula para localizar nós que não têm relação de correspondência.
Encontre pessoas que não trabalham em nenhuma empresa:
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100
Localize postagens sem comentários:
MATCH (post:Post)
OPTIONAL MATCH (comment:Comment)-[:replyOf]->(post)
FILTER comment IS NULL
RETURN post.id, post.content
LIMIT 100
Localizar entidades com muitas conexões
Combine GROUP BY e FILTER para identificar nós altamente conectados. Esse método é útil para localizar hubs ou exceções.
Encontre pessoas com mais de 10 amigos:
MATCH (p:Person)-[:knows]->(friend:Person)
LET name = p.firstName || ' ' || p.lastName
RETURN name, count(*) AS friendCount
GROUP BY name
FILTER friendCount > 10
ORDER BY friendCount DESC
Note
FILTER após GROUP BY funciona como HAVING em SQL. Ele filtra o resultado agregado, não as linhas individuais.