Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Note
Esta funcionalidade está atualmente em pré-visualização pública. Esta pré-visualização é fornecida sem estar sujeita a um acordo de nível de serviço e não é adequada para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para mais informações, consulte Termos Suplementares de Utilização para Microsoft Azure Previews.
Este artigo fornece padrões práticos de consulta GQL para tarefas comuns de grafos no Microsoft Fabric: encontrar vizinhos, percorrer ligações multisaltos, identificar ligações partilhadas, contar relações e encontrar entidades sem ligações.
Exemplos utilizam o conjunto de dados de amostras das redes sociais. Para referência completa de linguagem, consulte o guia de linguagem GQL.
Pré-requisitos
- Um item de grafo com dados carregados. Se és novo no Graph, faz primeiro o tutorial .
- Familiaridade com consultas básicas
MATCHeRETURN. Consulte o guia de linguagem GQL.
Encontre vizinhos diretos
Devolva todos os nós ligados a um nó inicial dentro de um único salto.
Encontra todas as pessoas que uma pessoa específica conhece:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName
Encontre todas as empresas onde trabalhou:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:workAt]->(c:Company)
RETURN c.name, c.url
Encontrar amigos de amigos (multi-hop)
Use padrões de comprimento variável com {min,max} para atravessar mais de um salto.
Encontra pessoas a dois passos de distância – amigos dos amigos da Alice que a 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 num raio de três graus:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,3}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Tip
Defina sempre um limite superior para a travessia de comprimento variável. Padrões ilimitados em grafos grandes ou densos podem atingir limites de tempo de espera de consulta. Ver 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 do maior ao pouco:
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 colaboradores 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
Encontre ligações partilhadas
Reaproveitar uma variável em duas partes de um padrão cria uma restrição implícita de "nó idêntico". Use esta restrição para encontrar entidades ligadas através de uma terceira entidade partilhada.
Encontre pares de pessoas que conheçam 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
Tip
A WHERE a.id < b.id condição impede que pares duplicados (Alice–Bob e Bob–Alice) apareçam nos resultados.
Encontre entidades sem relações
Use OPTIONAL MATCH seguido de uma verificação nula para encontrar nós que não tenham relação de correspondência.
Encontre pessoas que não trabalhem em nenhuma empresa:
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100
Encontre publicações sem comentários:
MATCH (post:Post)
OPTIONAL MATCH (comment:Comment)-[:replyOf]->(post)
FILTER comment IS NULL
RETURN post.id, post.content
LIMIT 100
Encontre entidades com muitas ligações
Combinar GROUP BY e FILTER para identificar nós altamente conectados. Este método é útil para encontrar hubs ou outliers.
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 Depois GROUP BY funciona como HAVING em SQL. Filtra pelo resultado agregado, não pelas linhas individuais.