Σημείωμα
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να εισέλθετε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Αυτό το άρθρο παρέχει πρακτικά μοτίβα ερωτημάτων GQL για κοινές εργασίες γραφήματος στο Microsoft Fabric: εύρεση γειτόνων, διέλευση συνδέσεων multihop, αναγνώριση κοινόχρηστων συνδέσεων, καταμέτρηση σχέσεων και εύρεση οντοτήτων χωρίς συνδέσεις.
Τα παραδείγματα χρησιμοποιούν το δείγμα συνόλου δεδομένων κοινωνικού δικτύου. Για πλήρη αναφορά γλώσσας, ανατρέξτε στον οδηγό γλώσσας GQL.
Prerequisites
- Ένα στοιχείο γραφήματος με φορτωμένα δεδομένα. Εάν είστε νέοι στο γράφημα, ολοκληρώστε πρώτα το σεμινάριο .
- Εξοικείωση με βασικά
MATCHκαιRETURNερωτήματα. Δείτε τον οδηγό γλώσσας GQL.
Βρείτε άμεσους γείτονες
Επιστρέψτε όλους τους κόμβους που είναι συνδεδεμένοι σε έναν αρχικό κόμβο με ένα άλμα.
Βρείτε όλους όσους γνωρίζει ένα συγκεκριμένο άτομο:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName
Βρείτε όλες τις εταιρείες στις οποίες εργάστηκε ένα άτομο:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:workAt]->(c:Company)
RETURN c.name, c.url
Βρείτε φίλους φίλων (multi-hop)
Χρησιμοποιήστε μοτίβα μεταβλητού μήκους για {min,max} να διασχίσετε περισσότερα από ένα άλματα.
Βρείτε άτομα δύο άλματα μακριά - φίλους των φίλων της Αλίκης που η Αλίκη δεν γνωρίζει άμεσα:
MATCH (alice:Person WHERE alice.firstName = 'Alice')-[:knows]->{2,2}(fof:Person)
RETURN DISTINCT fof.firstName, fof.lastName
LIMIT 100
Βρείτε όλους τους προσβάσιμους σε τρεις μοίρες:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,3}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Συμβουλή
Να ορίζετε πάντα ένα άνω όριο στη διέλευση μεταβλητού μήκους. Τα απεριόριστα μοτίβα σε μεγάλα ή πυκνά γραφήματα μπορούν να φτάσουν τα όρια χρονικού ορίου ερωτήματος. Δείτε Τρέχοντες περιορισμοί.
Καταμέτρηση σχέσεων ανά οντότητα
Χρησιμοποιήστε το GROUP BY με count(*) για να μετρήσετε πόσες σχέσεις έχει κάθε οντότητα.
Μετρήστε πόσους φίλους έχει κάθε άτομο, ταξινομημένοι από τους περισσότερους στους λιγότερους:
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
Μετρήστε πόσοι εργαζόμενοι εργάζονται σε κάθε εταιρεία:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Εύρεση κοινόχρηστων συνδέσεων
Η επαναχρησιμοποίηση μιας μεταβλητής σε δύο μέρη ενός μοτίβου δημιουργεί έναν σιωπηρό περιορισμό "ίδιου κόμβου". Χρησιμοποιήστε αυτόν τον περιορισμό για να βρείτε οντότητες συνδεδεμένες μέσω μιας κοινόχρηστης τρίτης οντότητας.
Βρείτε ζευγάρια ανθρώπων που γνωρίζουν και οι δύο το ίδιο άτομο:
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
Βρείτε ζευγάρια ατόμων που εργάζονται στην ίδια εταιρεία:
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
Συμβουλή
Η WHERE a.id < b.id συνθήκη αποτρέπει την εμφάνιση διπλότυπων ζευγών (Αλίκη-Μπομπ και Μπομπ-Αλίκη) στα αποτελέσματα.
Εύρεση οντοτήτων χωρίς σχέσεις
Χρησιμοποιήστε το OPTIONAL MATCH ακολουθούμενο από έναν μηδενικό έλεγχο για να βρείτε κόμβους που δεν έχουν αντίστοιχη σχέση.
Βρείτε άτομα που δεν εργάζονται σε καμία εταιρεία:
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100
Βρείτε αναρτήσεις χωρίς σχόλια:
MATCH (post:Post)
OPTIONAL MATCH (comment:Comment)-[:replyOf]->(post)
FILTER comment IS NULL
RETURN post.id, post.content
LIMIT 100
Εύρεση οντοτήτων με πολλές συνδέσεις
Συνδυάστε GROUP BY και FILTER εντοπίστε κόμβους υψηλής σύνδεσης. Αυτή η μέθοδος είναι χρήσιμη για την εύρεση κόμβων ή ακραίων τιμών.
Βρείτε άτομα με περισσότερους από 10 φίλους:
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
Σημείωμα
FILTER μετά λειτουργεί GROUP BY όπως HAVING στην SQL. Φιλτράρει με βάση το συγκεντρωτικό αποτέλεσμα και όχι τις μεμονωμένες γραμμές.