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.
Filtrar restringe os resultados às linhas que importam. A agregação resume essas linhas em contagens, totais e médias. Este artigo mostra-lhe como aplicar ambas as técnicas em consultas GQL contra grafos no Microsoft Fabric.
Exemplos utilizam o conjunto de dados de amostras das redes sociais. Para uma referência completa das instruções e expressões GQL, consulte o guia da 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.
Filtre linhas com o FILTER
Use FILTER para manter apenas as linhas que cumpram uma condição. Coloque FILTER depois MATCH para reduzir os resultados correspondentes.
A seguinte consulta devolve todas as mulheres com o seu nome e data de nascimento:
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Combinem múltiplas condições com AND e OR. Por exemplo, a consulta seguinte devolve 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
Tip
Para um melhor desempenho, durante a correspondência de padrões, filtre utilizando uma cláusula inline WHERE em vez de uma instrução separada FILTER. Veja Filtro durante a correspondência de padrões.
Filtro durante a correspondência de padrões
As cláusulas em linha WHERE dentro de um padrão MATCH restringem quais nós e arestas são correlacionados antes de serem produzidos quaisquer resultados. Esta abordagem é mais eficiente do que uma cláusula pós-correspondência FILTER porque o motor de consulta elimina as linhas mais cedo.
Por exemplo, para encontrar pessoas nascidas antes de 1994 juntamente com a empresa onde trabalham, limitando os resultados a empresas cujo nome começa por 'A':
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
As propriedades das bordas do filtro são da mesma forma. Por exemplo, para devolver apenas pessoas que começaram a trabalhar numa 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 saber mais sobre a diferença de desempenho entre filtragem inline e pós-match, consulte Otimizar o desempenho das consultas GQL.
Lidar com valores nulos em filtros
O GQL utiliza lógica de três valores: os predicados avaliam até TRUE, FALSE, ou UNKNOWN. Quando o valor de uma propriedade é nulo, as comparações retornam UNKNOWN.
FILTER trata UNKNOWN como não combinando, por isso a linha é excluída.
Use IS NULL e IS NOT NULL para testar valores nulos explicitamente:
-- 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
Atenção
NULL = NULL avalia-se como UNKNOWN, não TRUE. Use sempre IS NULL para testar valores nulos, não igualdade.
Resultados agregados com RETURN
Utilize funções agregadas em RETURN para resumir os seus resultados. GQL suporta count(), sum(), avg(), min(), e max().
Por exemplo, para contar todas as pessoas no gráfico:
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 em RETURN para agrupar linhas por valores comuns e calcular agregados em cada grupo. Este agrupamento é o equivalente GQL ao SQL GROUP BY.
Por exemplo, para contar os 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 calcule vários agregados ao mesmo tempo. Por exemplo, divida o número de pessoas e o intervalo de datas de nascimento por género e browser, 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. Expressões que não estão em GROUP BY têm de usar uma função agregada.
Ordenar e limitar os resultados agregados
Use ORDER BY e LIMIT junto com GROUP BY para encontrar resultados top-N.
Por exemplo, para encontrar as cinco principais cidades por número de habitantes:
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 LIMITde .
LIMIT aplica-se sempre ao conjunto de resultados já ordenado.
Use CASE para valores condicionais em resultados
Use CASE/WHEN/THEN/ELSEpara calcular valores condicionais em RETURN ou .LET
Por exemplo, categorizar as pessoas em eras com base no 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