Σημείωμα
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να εισέλθετε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Η αντιστοίχιση μοτίβων γραφήματος σάς επιτρέπει να περιγράψετε τη δομή των δεδομένων που θέλετε να βρείτε χρησιμοποιώντας διαισθητική, οπτική σύνταξη. Αντί να ενώνετε πίνακες, γράφετε μοτίβα που μοιάζουν με τις ίδιες τις σχέσεις - κόμβους που συνδέονται με ακμές. Αυτό το άρθρο σάς δείχνει πώς μπορείτε να συντάξετε ερωτήματα μοτίβων GQL για συνηθισμένα σενάρια στο γράφημα στο Microsoft Fabric.
Τα παραδείγματα χρησιμοποιούν το δείγμα συνόλου δεδομένων κοινωνικού δικτύου. Για μια πλήρη αναφορά σύνταξης μοτίβου, ανατρέξτε στο θέμα Μοτίβα γραφήματος 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 μέσα στο μοτίβο για να φιλτράρετε κόμβους και ακμές καθώς ταιριάζουν. Αυτή η προσέγγιση είναι πιο αποτελεσματική από το φιλτράρισμα εκ των υστέρων.
Για παράδειγμα, για να βρείτε άτομα που γεννήθηκαν πριν από το 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 χρησιμοποιεί TRAIL τη λειτουργία, η οποία αποτρέπει τη διέλευση της ίδιας ακμής περισσότερες από μία φορές. Χρησιμοποιήστε ρητά τις λειτουργίες διαδρομής όταν χρειάζεστε διαφορετικές εγγυήσεις.
| Λειτουργία διαδρομής | Συμπεριφορά | Χρησιμοποιήστε όταν... |
|---|---|---|
WALK |
Επιτρέπει επαναλαμβανόμενους κόμβους και ακμές | Θέλετε ακατέργαστη διέλευση χωρίς περιορισμούς. Σπάνια χρειάζεται. Κυρίως χρήσιμο για διερευνητικές ερωτήσεις. |
TRAIL |
Χωρίς επαναλαμβανόμενες άκρες (προεπιλογή) | Θέλετε να αποφύγετε την επανάληψη της ίδιας σχέσης, αλλά ο ίδιος κόμβος μπορεί να εμφανιστεί μέσω διαφορετικών σχέσεων. Λειτουργεί καλά για τα περισσότερα ερωτήματα διέλευσης. |
SIMPLE |
Δεν υπάρχουν επαναλαμβανόμενοι κόμβοι εκτός από την αρχή και το τέλος | Δεν θέλετε κανένας κόμβος να εμφανίζεται περισσότερες από μία φορές στη μέση μιας διαδρομής, αλλά να επιτρέπετε διαδρομές που κλείνουν πίσω στην αρχή. Χρήσιμο για την ανίχνευση βρόχων. |
ACYCLIC |
Δεν υπάρχουν καθόλου επαναλαμβανόμενοι κόμβοι | Πρέπει να εγγυηθείτε ότι κανένας κόμβος δεν εμφανίζεται πουθενά στη διαδρομή περισσότερες από μία φορές. Χρησιμοποιήστε το για αυστηρές ιεραρχίες, γενεαλογία ή οποιαδήποτε διέλευση όπου η επανεξέταση ενός κόμβου θα παρήγαγε λανθασμένα αποτελέσματα. |
WALK είναι ο πιο ανεκτικός τρόπος και ACYCLIC είναι ο πιο περιοριστικός.
TRAIL είναι η προεπιλογή και λειτουργεί καλά για τα περισσότερα ερωτήματα. Χρησιμοποιήστε μια πιο περιοριστική λειτουργία μόνο όταν το απαιτεί η περίπτωση χρήσης σας.
Για να δείξετε τη διαφορά, εξετάστε το μονοπάτι Αλίκη → Μπομπ → Κάρολ → Μπομπ:
- WALK — επιτρέπει αυτό το μονοπάτι. Οι κόμβοι και οι ακμές μπορούν να επαναλαμβάνονται ελεύθερα.
- TRAIL — επιτρέπει αυτό το μονοπάτι. Ο Μπομπ εμφανίζεται δύο φορές, αλλά κάθε ακμή που χρησιμοποιείται είναι μια διαφορετική σχέση (Αλίκη→Μπομπ και Κάρολ→Μπομπ είναι διακριτές ακμές), επομένως καμία ακμή δεν επαναλαμβάνεται.
- ΑΠΛΟ — μπλοκάρει αυτό το μονοπάτι. Το Bob εμφανίζεται περισσότερες από μία φορές και το SIMPLE επιτρέπει σε έναν κόμβο να επαναληφθεί μόνο εάν είναι και η αρχή και το τέλος της διαδρομής (ένας κλειστός κύκλος). Εδώ η Αλίκη είναι η αρχή και ο Μπομπ το τέλος, οπότε δεν ισχύει καμία εξαίρεση.
- ΑΚΥΚΛΙΚΟ — μπλοκάρει αυτό το μονοπάτι. Ο Μπομπ εμφανίζεται περισσότερες από μία φορές οπουδήποτε στο μονοπάτι.
Το παρακάτω παράδειγμα δείχνει πώς μπορείτε να μετρήσετε TRAIL πόσες διαφορετικές διαδρομές οδηγούν σε καθένα από τα πρώτα 100 άτομα που είναι προσβάσιμα στο δίκτυο της Alice μέσα σε τέσσερα άλματα:
MATCH TRAIL (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName, count(*) AS pathCount
LIMIT 100
Χρησιμοποιήστε το ACYCLIC για να επιστρέψετε έως και 100 άτομα που είναι προσβάσιμα από την Αλίκη μέσα σε τέσσερα άλματα, όπου κάθε άτομο στη διαδρομή είναι μοναδικό:
MATCH ACYCLIC (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName
LIMIT 100
Συμβουλή
Για μεγάλα γραφήματα, να ορίζετε πάντα ένα άνω όριο σε μοτίβα μεταβλητού μήκους ({1,4} αντί για {1,}). Η απεριόριστη διέλευση σε πυκνά γραφήματα μπορεί να φτάσει τα όρια χρονικού ορίου ερωτήματος.
Δείτε Τρέχοντες περιορισμοί.
Χρήση μεταβλητής επαναχρησιμοποίησης για την έκφραση κοινόχρηστων οντοτήτων
Η επαναχρησιμοποίηση της ίδιας μεταβλητής σε δύο μέρη ενός μοτίβου δημιουργεί έναν σιωπηρό περιορισμό ισότητας - και οι δύο αναφορές πρέπει να ταιριάζουν με τον ίδιο κόμβο. Αυτή η τεχνική σάς επιτρέπει να εκφράσετε "εύρεση οντοτήτων που συνδέονται μέσω μιας κοινόχρηστης τρίτης οντότητας".
Για παράδειγμα, για να βρείτε έως και 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