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.
Note
Esse recurso está atualmente em versão prévia pública. Essa versão prévia é oferecida sem um Acordo de Nível de Serviço (SLA) e não é recomendada para cargas de trabalho em nível de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares para Versões Prévias do Microsoft Azure.
A filtragem restringe seus resultados às linhas que importam. A agregação resume essas linhas em contagens, totais e médias. Este artigo mostra como aplicar ambas as técnicas em consultas GQL contra o grafo no Microsoft Fabric.
Os exemplos usam o conjunto de dados de exemplo de rede social. Para obter uma referência completa de instruções e expressões GQL, 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.
Filtrar linhas com FILTER
Use FILTER para manter apenas as linhas que atendem a uma condição. Coloque FILTER depois MATCH para restringir os resultados correspondentes.
A consulta a seguir retorna todas as mulheres com seu nome e aniversário:
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Combine várias condições com AND e OR. Por exemplo, a consulta a seguir retorna os nomes de todas as mulheres nascidas antes de 1990:
MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName
Dica
Para obter melhor desempenho, filtre durante a correspondência de padrões com uma cláusula embutida WHERE em vez de em uma instrução separada FILTER. Consulte Filtro durante a correspondência de padrões.
Filtrar durante a correspondência de padrões
Cláusulas embutidas WHERE dentro de um MATCH padrão restringem quais nós e bordas são correspondidos antes que os resultados sejam produzidos. Essa abordagem é mais eficiente do que uma cláusula pós-correspondência FILTER porque o mecanismo de consulta poda linhas anteriormente.
Por exemplo, para encontrar pessoas nascidas antes de 1994 junto com a empresa em que trabalham, limitando os resultados a empresas cujo nome começa com 'A':
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Filtrar propriedades de borda da mesma maneira. Por exemplo, para retornar somente as pessoas que começaram a trabalhar em uma empresa em 2000 ou depois:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom
Para obter mais informações sobre a diferença de desempenho entre a filtragem inline e pós-busca, consulte Otimização do desempenho de consultas GQL.
Manipular valores nulos em filtros
O GQL usa lógica de três valores: predicados são avaliados como TRUE, FALSEou UNKNOWN. Quando um valor de propriedade é nulo, as comparações retornam UNKNOWN.
FILTER trata UNKNOWN como não correspondente, portanto, a linha é excluída.
Use IS NULL e IS NOT NULL para testar explicitamente valores nulos:
-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname
Use coalesce() para substituir um valor padrão quando uma propriedade pode ser nula:
MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName
Caution
NULL = NULL avalia como UNKNOWN, não TRUE. Sempre use IS NULL para testar valores nulos, não igualdade.
Agregar resultados com RETURN
Use funções RETURN de agregação para resumir seus resultados. GQL suporta count(), sum(), avg(), min() e max().
Por exemplo, para contar todas as pessoas no grafo:
MATCH (p:Person)
RETURN count(*) AS totalPeople
Para contar valores distintos, como quantas empresas distintas empregam pessoas:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount
Agrupar resultados com GROUP BY
Use GROUP BY no/na RETURN para agrupar linhas por valores compartilhados e calcular agregações em cada grupo. Esse agrupamento é o equivalente GQL do SQL GROUP BY.
Por exemplo, para contar funcionários por empresa:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Agrupe por várias colunas e compute várias agregações ao mesmo tempo. Por exemplo, divida a contagem de pessoas e a faixa de aniversário por gênero e navegador, retornando as 10 combinações mais comuns:
MATCH (p:Person)
LET gender = p.gender
LET browser = p.browserUsed
RETURN gender,
browser,
count(*) AS personCount,
min(p.birthday) AS earliestBirthday,
max(p.birthday) AS latestBirthday
GROUP BY gender, browser
ORDER BY personCount DESC
LIMIT 10
Note
Todas as expressões não agregadas em RETURN devem aparecer em GROUP BY. As expressões que não estão em GROUP BY devem usar uma função de agregação.
Classificar e limitar resultados agregados
Use ORDER BY e LIMIT juntamente com GROUP BY para encontrar os resultados top-N.
Por exemplo, para localizar as cinco principais cidades por número de moradores:
MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5
Importante
Coloque ORDER BY antes LIMIT.
LIMIT sempre se aplica ao conjunto de resultados já classificado.
Usar CASE para valores condicionais em resultados
Use CASE/WHEN/THEN/ELSEpara calcular valores condicionais em RETURN ou .LET
Por exemplo, para categorizar as pessoas em eras com base em seu ano de nascimento:
MATCH (p:Person)
RETURN p.firstName,
CASE WHEN p.birthday < 19800101 THEN 'Before 1980'
WHEN p.birthday < 20000101 THEN '1980–1999'
ELSE '2000 or later'
END AS era