Σημείωμα
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να εισέλθετε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Η αντιστοίχιση μοτίβων γραφήματος σάς επιτρέπει να περιγράψετε τη δομή των δεδομένων που θέλετε να βρείτε χρησιμοποιώντας διαισθητική, οπτική σύνταξη. Αντί να ενώνετε πίνακες, γράφετε μοτίβα που μοιάζουν με τις ίδιες τις σχέσεις - κόμβους που συνδέονται με ακμές. Αυτό το άρθρο σάς δείχνει πώς μπορείτε να συντάξετε ερωτήματα μοτίβων GQL για συνηθισμένα σενάρια στο γράφημα στο Microsoft Fabric.
Τα παραδείγματα χρησιμοποιούν το δείγμα συνόλου δεδομένων κοινωνικού δικτύου. Για μια πλήρη αναφορά σύνταξης μοτίβου, ανατρέξτε στο θέμα Μοτίβα γραφήματος GQL.
Χρησιμοποιήστε αυτό το άρθρο για να μάθετε πώς να δημιουργείτε και να συνδυάζετε μοτίβα κόμβων, άκρων και μονοπατιών. Για εργασίες έτοιμες για προσαρμογή, όπως η εύρεση γειτόνων ή οντοτήτων χωρίς σχέσεις, ανατρέξτε στο θέμα Σύνταξη συνηθισμένων ερωτημάτων GQL. Για το φιλτράρισμα, την ομαδοποίηση και τη συγκέντρωση ροών εργασίας, ανατρέξτε στο θέμα Φιλτράρισμα και συγκέντρωση δεδομένων γραφήματος.
Prerequisites
- Ένα στοιχείο γραφήματος που έχει δημιουργηθεί από το δείγμα συνόλου δεδομένων κοινωνικού δικτύου, με τους τύπους κόμβων, τους τύπους ακμών και τις ιδιότητες που περιγράφονται στο παράδειγμα σχήματος κοινωνικού δικτύου.
- Εξοικείωση με βασικά
MATCHκαιRETURNερωτήματα. Δείτε τον οδηγό γλώσσας GQL.
Αντιστοίχιση άμεσων σχέσεων
Ένα βασικό μοτίβο ταιριάζει με έναν τύπο κόμβου, έναν συγκεκριμένο τύπο ακμής και έναν άλλο τύπο κόμβου. Η σύνταξη μοιάζει με διάγραμμα της σχέσης.
Για παράδειγμα, για να βρείτε έως και 100 άτομα σε συνδυασμό με την εταιρεία στην οποία εργάζονται:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name
LIMIT 100
Χρησιμοποιήστε ένα μη κατευθυνόμενο μοτίβο άκρων όταν δεν γνωρίζετε ή δεν σας ενδιαφέρει η κατεύθυνση. Για παράδειγμα, για να βρείτε έως και 100 κοινούς γνωστούς ανεξάρτητα από το ποιος ξεκίνησε τη σύνδεση:
MATCH (a:Person)-[:knows]-(b:Person)
RETURN a.firstName, b.firstName
LIMIT 100
Σημείωμα
Προς το παρόν, το Graph δεν υποστηρίζει τη δημιουργία μη κατευθυνόμενων άκρων, αλλά μπορείτε να υποβάλετε ερωτήματα σε Edge προς οποιαδήποτε κατεύθυνση χρησιμοποιώντας -[:label]- σύνταξη.
Φιλτράρισμα μοτίβων με ενσωματωμένο WHERE
Τοποθετήστε WHERE μέσα στο μοτίβο όταν μια συνθήκη καθορίζει ποιος κόμβος ή άκρη μπορεί να συμμετάσχει στην αντιστοίχιση. Χρησιμοποιήστε μια συνθήκη σε επίπεδο MATCH ... WHERE πρότασης για να φιλτράρετε εκ των υστέρων την ολοκληρωμένη αντιστοίχιση ή μια ξεχωριστή FILTER όταν η συνθήκη ισχύει για τη γραμμή που δημιουργήθηκε από μια προηγούμενη πρόταση. Η τοποθέτηση κατηγορήματος μπορεί να αλλάξει τα αποτελέσματα της συντομότερης διαδρομής. Για περισσότερες πληροφορίες, δείτε την ενότητα Τοποθέτηση κατηγορημάτων πριν ή μετά την επιλογή διαδρομής.
Για παράδειγμα, για να βρείτε άτομα που γεννήθηκαν πριν από το 1990 και εργάζονται σε μια εταιρεία της οποίας το όνομα αρχίζει με «Α»:
MATCH (p:Person WHERE p.birthday < 19900101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Φιλτράρετε τις ιδιότητες Edge για να περιορίσετε τις σχέσεις που ταιριάζουν. Για παράδειγμα, για να επιστρέψετε μόνο άτομα που άρχισαν να εργάζονται σε μια εταιρεία το 2010 ή αργότερα:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2010]->(c:Company)
RETURN p.firstName, c.name, w.workFrom
Ταιριάξτε σχέσεις πολλαπλών βημάτων
Χρησιμοποιήστε μοτίβα μεταβλητού μήκους για να διασχίσετε πολλά άλματα σε μία έκφραση. Καθορίστε τον ελάχιστο και τον μέγιστο αριθμό αναπηδήσεων με {min,max} σύνταξη.
Για παράδειγμα, για να βρείτε έως και 100 άτομα προσβάσιμα σε δύο έως τέσσερις βαθμούς φιλίας από την Αλίκη:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{2,4}(dst:Person)
RETURN dst.firstName, dst.lastName
LIMIT 100
Για να βρείτε έως και 100 συνδέσεις άμεσου και δεύτερου βαθμού (ένα ή δύο άλματα) από την Alice:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,2}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Έλεγχος διέλευσης με λειτουργίες διαδρομής
Από προεπιλογή, το GQL χρησιμοποιεί WALK, το οποίο επιτρέπει επαναλαμβανόμενους κόμβους και ακμές. Χρησιμοποιήστε μία άλλη μέθοδο διαδρομής, όταν χρειάζεστε αυστηρότερη μοναδικότητα στοιχείου.
| Λειτουργία διαδρομής | Συμπεριφορά | Χρησιμοποιήστε όταν... |
|---|---|---|
WALK |
Επιτρέπει επαναλαμβανόμενους κόμβους και ακμές (προεπιλογή) | Θέλετε όλους τους ταιριαστούς περιπάτους μέσα σε ένα πεπερασμένο όριο. |
TRAIL |
Χωρίς επαναλαμβανόμενες άκρες | Θέλετε να αποφύγετε την επανάληψη της ίδιας ακμής, αλλά ο ίδιος κόμβος μπορεί να εμφανιστεί από διαφορετικές ακμές. |
SIMPLE |
Δεν υπάρχουν επαναλαμβανόμενοι κόμβοι εκτός από έναν κοινόχρηστο κόμβο έναρξης και λήξης και δεν υπάρχουν επαναλαμβανόμενες ακμές | Δεν θέλετε κανένας κόμβος να εμφανίζεται περισσότερες από μία φορές στη μέση μιας διαδρομής, αλλά να επιτρέπετε διαδρομές που κλείνουν πίσω στην αρχή. Χρήσιμο για την ανίχνευση βρόχων. |
ACYCLIC |
Χωρίς επαναλαμβανόμενους κόμβους ή ακμές | Πρέπει να εγγυηθείτε ότι κανένας κόμβος δεν εμφανίζεται πουθενά στη διαδρομή περισσότερες από μία φορές. Χρησιμοποιήστε το για αυστηρές ιεραρχίες, γενεαλογία ή οποιαδήποτε διέλευση όπου η επανεξέταση ενός κόμβου θα παρήγαγε λανθασμένα αποτελέσματα. |
WALK είναι ο πιο ανεκτικός τρόπος και ACYCLIC είναι ο πιο περιοριστικός.
Για SIMPLE και ACYCLIC, η μοναδικότητα των ακμών προκύπτει από τη μοναδικότητα των κόμβων. Μια SIMPLE διαδρομή μπορεί να κλείσει επιστρέφοντας στον πρώτο κόμβο της, αλλά εξακολουθεί να μην μπορεί να επαναχρησιμοποιήσει μια ακμή.
Για να δείξετε τη διαφορά, εξετάστε το μονοπάτι Αλίκη → Μπομπ → Κάρολ → Μπομπ:
- WALK — επιτρέπει αυτό το μονοπάτι. Οι κόμβοι και οι ακμές μπορούν να επαναλαμβάνονται ελεύθερα.
- TRAIL — επιτρέπει αυτό το μονοπάτι. Ο Μπομπ εμφανίζεται δύο φορές, αλλά κάθε ακμή που χρησιμοποιείται είναι μια διαφορετική σχέση (Αλίκη→Μπομπ και Κάρολ→Μπομπ είναι διακριτές ακμές), επομένως καμία ακμή δεν επαναλαμβάνεται.
- ΑΠΛΟ — μπλοκάρει αυτό το μονοπάτι. Το Bob εμφανίζεται περισσότερες από μία φορές και το SIMPLE επιτρέπει σε έναν κόμβο να επαναληφθεί μόνο εάν είναι και η αρχή και το τέλος της διαδρομής (ένας κλειστός κύκλος). Εδώ η Αλίκη είναι η αρχή και ο Μπομπ το τέλος, οπότε δεν ισχύει καμία εξαίρεση.
- ΑΚΥΚΛΙΚΟ — μπλοκάρει αυτό το μονοπάτι. Ο Μπομπ εμφανίζεται περισσότερες από μία φορές οπουδήποτε στο μονοπάτι.
Το παρακάτω παράδειγμα δείχνει πώς μπορείτε να μετρήσετε TRAIL πόσες διαφορετικές διαδρομές οδηγούν σε καθένα από τα πρώτα 100 άτομα που είναι προσβάσιμα στο δίκτυο της Alice μέσα σε τέσσερα άλματα:
MATCH TRAIL (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
LET personId = dst.id
RETURN personId, dst.firstName, dst.lastName, count(*) AS pathCount
GROUP BY personId, dst.firstName, dst.lastName
ORDER BY pathCount DESC
LIMIT 100
Χρησιμοποιήστε το ACYCLIC για να επιστρέψετε έως και 100 άτομα που είναι προσβάσιμα από την Αλίκη μέσα σε τέσσερα άλματα, όπου κάθε άτομο στη διαδρομή είναι μοναδικό:
MATCH ACYCLIC (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName
LIMIT 100
Η προεπιλεγμένη REPEATABLE ELEMENTS λειτουργία αντιστοίχισης επιτρέπει την επαναχρησιμοποίηση ενός Edge από ξεχωριστές διαδρομές στο ίδιο μοτίβο γραφήματος. Χρησιμοποιήστε DIFFERENT EDGES ή DIFFERENT RELATIONSHIPS όταν κάθε σύνδεση ακμής σε όλες τις διαδρομές πρέπει να είναι διαφορετική:
MATCH DIFFERENT EDGES
(p:Person)-[:knows]->(friend:Person),
(p)-[:knows]->(other:Person)
RETURN p.firstName, friend.firstName, other.firstName
LIMIT 100
Επιστροφή μιας συντομότερης διαδρομής
ALL είναι η προεπιλεγμένη αναζήτηση διαδρομής και επιστρέφει κάθε διαδρομή που ταιριάζει. Χρησιμοποιήστε το ANY SHORTEST για να επιστρέψετε μία συντομότερη διαδρομή για κάθε ζεύγος πηγής-προορισμού. Το παρακάτω ερώτημα βρίσκει μια συντομότερη διαδρομή από την Αλίκη στον Μπομπ:
MATCH p = ANY SHORTEST
(src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}
(dst:Person WHERE dst.firstName = 'Bob')
RETURN p, path_length(p) AS hopCount
Όταν συνδέονται πολλές συντομότερες διαδρομές, η διαδρομή που επιστρέφεται δεν είναι ντετερμινιστική.
ALL SHORTEST και ANY οι αναζητήσεις διαδρομής δεν υποστηρίζονται.
Η τοποθέτηση κατηγόρημα μπορεί να αλλάξει το αποτέλεσμα του ANY SHORTEST. Τα ενσωματωμένα κατηγορήματα κόμβων και άκρων περιορίζουν τις διαδρομές που είναι κατάλληλες, ενώ ένα postfilter μπορεί να καταργήσει την επιλεγμένη διαδρομή χωρίς να επιλέξει μεγαλύτερη διαδρομή.
Δείτε: Τοποθέτηση κατηγορημάτων πριν ή μετά την επιλογή διαδρομής.
Συμβουλή
Προτιμήστε ένα πεπερασμένο άνω όριο για προβλέψιμο κόστος ερωτήματος. Τα απεριόριστα ALL WALK μοτίβα δεν υποστηρίζονται. Τα απεριόριστα μοτίβα με TRAIL, SIMPLEή ACYCLIC τερματίζονται μέσω της μοναδικότητας των στοιχείων, αλλά μπορούν ακόμα να επιστρέψουν πολλές διαδρομές. Το Unbounded ANY SHORTEST WALK υποστηρίζει μόνο συγκεκριμένα σχήματα ερωτημάτων.
Δείτε Τρέχοντες περιορισμοί.
Χρήση μεταβλητής επαναχρησιμοποίησης για την έκφραση κοινόχρηστων οντοτήτων
Η επαναχρησιμοποίηση της ίδιας μεταβλητής σε δύο μέρη ενός μοτίβου δημιουργεί έναν σιωπηρό περιορισμό ισότητας - και οι δύο αναφορές πρέπει να ταιριάζουν με τον ίδιο κόμβο. Αυτή η τεχνική σάς επιτρέπει να εκφράσετε "εύρεση οντοτήτων που συνδέονται μέσω μιας κοινόχρηστης τρίτης οντότητας".
Για παράδειγμα, για να βρείτε έως και 100 ζευγάρια ατόμων που γνωρίζονται μεταξύ τους και εργάζονται στην ίδια εταιρεία:
MATCH (c:Company)<-[:workAt]-(a:Person)-[:knows]-(b:Person)-[:workAt]->(c)
RETURN a.firstName, b.firstName, c.name
LIMIT 100
Η μεταβλητή c επαναχρησιμοποιείται και για τους δύο workAt προορισμούς, επομένως το ερώτημα επιστρέφει μόνο ζεύγη όπου και τα δύο άτομα γνωρίζονται μεταξύ τους και εργάζονται στην ίδια εταιρεία.
Για να βρείτε έως και 100 ζευγάρια ατόμων που και οι δύο δήλωσαν ότι τους άρεσε η ίδια ανάρτηση:
MATCH (a:Person)-[:likes]->(post:Post)<-[:likes]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, post.id
LIMIT 100
Συμβουλή
Η WHERE a.id < b.id συνθήκη αποτρέπει την εμφάνιση διπλότυπων ζευγών (Αλίκη + Μπομπ και Μπομπ + Αλίκη) στα αποτελέσματα.
Συνδυάστε πολλά μοτίβα
Καταχωρίστε πολλά μοτίβα σε ένα μόνο MATCH, χωρισμένα με κόμματα. Χρησιμοποιήστε ξανά μια μεταβλητή όταν τα μοτίβα πρέπει να δεσμεύσουν το ίδιο στοιχείο γραφήματος.
Για παράδειγμα, για να βρείτε έως και 100 άτομα μαζί με τον χώρο εργασίας τους και την πόλη στην οποία ζουν:
MATCH (p:Person)-[:workAt]->(c:Company),
(p)-[:isLocatedIn]->(city:City)
RETURN p.firstName, c.name AS company, city.name AS city
LIMIT 100
Η κοινή μεταβλητή p συνδέει τα δύο μοτίβα. Κάθε σειρά αποτελεσμάτων αντιπροσωπεύει ένα άτομο με την εταιρεία και την πόλη του.
Τα ασύνδετα μοτίβα είναι επίσης έγκυρα, αλλά σχηματίζουν ένα καρτεσιανό προϊόν των αντιστοιχιών τους. Χρησιμοποιήστε τα μόνο όταν χρειάζεστε σκόπιμα κάθε συνδυασμό. Για οδηγίες απόδοσης, ανατρέξτε στην ενότητα Χρήση κοινόχρηστων μεταβλητών για αποτελεσματικούς συνδέσμους.
Αντιστοίχιση προαιρετικών σχέσεων
Χρησιμοποιήστε το OPTIONAL MATCH όταν μια σχέση μπορεί να μην υπάρχει για κάθε κόμβο. Οι σειρές χωρίς αντιστοίχιση διατηρούνται με τιμές, παρόμοιες με NULL μια SQL LEFT JOIN.
Για παράδειγμα, επιστρέψτε έως και 100 άτομα με το όνομα της εταιρείας τους, συμπεριλαμβανομένων των ατόμων χωρίς εργοδότη (δηλαδή, που επιστρέφουν NULL για τη στήλη της εταιρείας):
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name AS company
LIMIT 100
Χρησιμοποιήστε το IS NULL μετά OPTIONAL MATCH για να βρείτε έως και 100 άτομα που δεν εργάζονται σε καμία εταιρεία:
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100