Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Note
Cette fonctionnalité est actuellement disponible en préversion publique. Cette version préliminaire est fournie sans accord de niveau de service et n'est pas recommandée pour des charges de travail en production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d'utilisation supplémentaires pour les versions préliminaires de Microsoft Azure.
Cet article fournit des modèles de requête GQL pratiques pour les tâches de graphe courantes dans Microsoft Fabric : recherche de voisins, traversée de connexions multiop, identification des connexions partagées, comptage des relations et recherche d’entités sans connexion.
Les exemples utilisent l’exemple de jeu de données de réseau social. Pour obtenir des informations de référence sur la langue complète, consultez le guide de langue GQL.
Prerequisites
- Élément de graphe avec des données chargées. Si vous débutez avec le graphique, suivez d’abord le tutoriel .
- Familiarité avec les requêtes de base
MATCHetRETURN. Consultez le guide de langue GQL.
Rechercher des voisins directs
Retourne tous les nœuds connectés à un nœud de départ par un saut.
Trouvez tout le monde qu’une personne spécifique sait :
MATCH (p:Person WHERE p.firstName = 'Alice')-[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName
Trouvez toutes les entreprises qu’une personne a travaillé à :
MATCH (p:Person WHERE p.firstName = 'Alice')-[:workAt]->(c:Company)
RETURN c.name, c.url
Trouver des amis d'amis (multi-sauts)
Utilisez des modèles de longueur variable avec {min,max} pour parcourir plusieurs tronçons.
Trouvez des gens à deux sauts - amis des amis d’Alice qui Alice ne connaît pas directement :
MATCH (alice:Person WHERE alice.firstName = 'Alice')-[:knows]->{2,2}(fof:Person)
RETURN DISTINCT fof.firstName, fof.lastName
LIMIT 100
Trouvez tout le monde accessible en trois degrés :
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,3}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Conseil / Astuce
Définissez toujours une limite supérieure sur la traversée de longueur variable. Les modèles non liés sur des graphiques volumineux ou denses peuvent atteindre les limites de délai d’expiration des requêtes. Consultez les limitations actuelles.
Compter les relations par entité
Utilisez GROUP BY avec count(*) pour compter combien de relations possède chaque entité.
Comptez le nombre d’amis que chaque personne a, ordonnées de la plus à la plus petite :
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
Comptez le nombre d’employés qui travaillent à chaque entreprise :
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Rechercher des connexions partagées
La réutilisation d’une variable dans deux parties d’un modèle crée une contrainte implicite « même nœud ». Utilisez cette contrainte pour rechercher des entités connectées via une troisième entité partagée.
Trouvez des paires de personnes qui connaissent tous les deux la même personne :
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
Trouvez des paires de personnes qui travaillent dans la même entreprise :
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
Conseil / Astuce
La WHERE a.id < b.id condition empêche les paires en double (Alice-Bob et Bob-Alice) d’apparaître dans les résultats.
Rechercher des entités sans relations
Utilisez OPTIONAL MATCH suivi d’une vérification null pour rechercher les nœuds qui n’ont aucune relation correspondante.
Trouvez des personnes qui ne travaillent pas dans une entreprise :
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100
Recherchez des billets sans commentaires :
MATCH (post:Post)
OPTIONAL MATCH (comment:Comment)-[:replyOf]->(post)
FILTER comment IS NULL
RETURN post.id, post.content
LIMIT 100
Rechercher des entités avec de nombreuses connexions
Combinez GROUP BY et FILTER pour identifier les nœuds hautement connectés. Cette méthode est utile pour rechercher des nœuds ou des valeurs hors norme.
Trouvez des personnes avec plus de 10 amis :
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 après GROUP BY fonctionne comme HAVING dans SQL. Il filtre le résultat agrégé, et non les lignes individuelles.