Σημείωμα
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να εισέλθετε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Τα μοτίβα γραφήματος είναι βασικά δομικά στοιχεία των ερωτημάτων σας GQL στο γράφημα στο Microsoft Fabric. Περιγράφουν τις δομές που αναζητάτε στο γράφημα χρησιμοποιώντας κόμβους και άκρα με έναν έξυπνο, οπτικό τρόπο. Σκεφτείτε τα μοτίβα γραφημάτων ως πρότυπα που προσπαθεί να αντιστοιχίζει η μηχανή ερωτημάτων με τα πραγματικά δεδομένα στο γράφημάτός σας.
Αυτό το άρθρο εξηγεί τους κανόνες σύνταξης και σύνθεσης για μοτίβα γραφημάτων στο GQL.
Σημαντικό
Αυτό το άρθρο χρησιμοποιεί αποκλειστικά το σύνολο δεδομένων παραδειγμάτων γραφήματος κοινωνικού δικτύου.
Απλά μοτίβα στοιχείων
Τα απλά μοτίβα στοιχείων σάς βοηθούν να αντιστοιχίζετε μεμονωμένους κόμβους και άκρα από το γράφημάτός σας που πληρούν συγκεκριμένες απαιτήσεις. Αυτά τα μοτίβα αποτελούν τη βάση για πιο σύνθετη αντιστοίχιση μοτίβων.
Μοτίβα απλών κόμβων
Ένα μοτίβο κόμβου καθορίζει τις ετικέτες και τις ιδιότητες που πρέπει να συμφωνούν ένας κόμβος:
(:City { name: "New York" })
Αυτό το μοτίβο συμφωνεί με όλους τους κόμβους που έχουν αμφότερους τις Place ετικέτες και City (υποδεικνύονται από τον τελεστή) και των οποίων η &name ιδιότητα ισούται με "New York". Αυτός ο συνδυασμός υποχρεωτικών ετικετών και ιδιοτήτων ονομάζεται filler του μοτίβου κόμβου.
Βασικές έννοιες:
-
Αντιστοίχιση ετικετών: Χρησιμοποιήστε
&την για να απαιτούνται πολλές ετικέτες. - Φιλτράρισμα ιδιοτήτων: Καθορίστε ακριβείς τιμές που πρέπει να συμφωνούν οι ιδιότητες.
- Ευέλικτη ("συναλλοίωτη") συμφωνία: Οι αντιστοιχισμένοι κόμβοι μπορούν να έχουν περισσότερες ετικέτες και ιδιότητες πέρα από αυτές που έχουν καθοριστεί.
Σημείωμα
Οι κόμβοι μπορούν να έχουν πολλές ετικέτες, αλλά οι τύποι άκρου με πολλαπλές ετικέτες δεν υποστηρίζονται ακόμα.
Απλά μοτίβα άκρου
Τα μοτίβα άκρου είναι πιο σύνθετα από τα μοτίβα κόμβων. Δεν καθορίζουν μόνο ένα πληρωτικό αλλά συνδέουν επίσης ένα μοτίβο κόμβου προέλευσης με ένα μοτίβο κόμβου στόχου. Τα μοτίβα άκρου περιγράφουν απαιτήσεις τόσο στο άκρο όσο και στα τελικά σημεία του:
(:Person)-[:likes|knows { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]->(:Comment)
Η κατεύθυνση -[...]-> του βέλους είναι σημαντική—καθορίζει (:Person) ως το μοτίβο του κόμβου προέλευσης και (:Comment) ως το μοτίβο του κόμβου στόχου. Η κατανόηση της κατεύθυνσης άκρου είναι ζωτικής σημασίας για τη σωστή υποβολή ερωτημάτων στο γράφησή σας.
Ισοδύναμο μοτίβο κατοπτρισμού:
Μπορείτε να γυρίσετε το βέλος και να αλλάξετε τα μοτίβα κόμβου για να δημιουργήσετε το ισοδύναμο μοτίβο κατοπτρισμού άκρου:
(:Comment)<-[:likes { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]-(:Person)
Αυτό το μοτίβο βρίσκει τις ίδιες σχέσεις αλλά από την αντίθετη προοπτική.
Μοτίβα άκρου οποιασδήποτε κατεύθυνσης
Όταν η κατεύθυνση ενός άκρου γραφήματος δεν έχει σημασία για το ερώτημά σας, μπορείτε να το αφήσετε μη καθορισμένο δημιουργώντας ένα μοτίβο άκρου με οποιαδήποτε κατεύθυνση:
(:Song)-[:inspired]-(:Movie)
Αυτό το μοτίβο ταιριάζει με τις ίδιες ακμές και (:Song)-[:inspired]->(:Movie)(:Movie)-[:inspired]->(:Song) συνδυάζεται, ανεξάρτητα από το ποιος κόμβος είναι η αρχή και ποιος είναι ο στόχος (αυτό το παράδειγμα δεν προέρχεται από τον τύπο γραφήματος κοινωνικού δικτύου).
Συντομεύσεις μοτίβου άκρου γραφήματος
Το GQL παρέχει βολικές συντομεύσεις για συνήθη μοτίβα άκρου, για να κάνετε τα ερωτήματά σας πιο συνοπτικά:
-
()->()()-[]->()σημαίνει (κατευθυνόμενη άκρη με οποιαδήποτε ετικέτα) -
()<-()σημαίνει (()<-[]-()κατευθυνόμενο άκρο σε αντίστροφη με οποιαδήποτε ετικέτα) -
()-()σημαίνει (()-[]-()άκρο με οποιαδήποτε κατεύθυνση με οποιαδήποτε ετικέτα)
Αυτές οι συντομεύσεις μπορεί να είναι χρήσιμες όταν ενδιαφέρεστε για τη συνδεσιμότητα, αλλά όχι για τον συγκεκριμένο τύπο άκρου γραφήματος.
Παραστάσεις ετικέτας
Τα μοτίβα μπορούν να εκφράσουν σύνθετες απαιτήσεις στις ετικέτες των αντιστοιχισμένων κόδων και άκρων.
Παράδειγμα:
MATCH (:Person|(Organization&!Company))-[:isLocatedIn]->(p:City|Country)
RETURN count(*) AS num_matches
Καταμετρά τον αριθμό των isLocatedIn άκρων που συνδέουν Person κόμβους ή Organization-αλλά-όχι-Company κόμβους (που είναι πάντα University κόμβοι στο σχήμα κοινωνικών δικτύων) σε City ή Country κόμβους.
Σύνταξη:
| Σύνταξη | Έννοια |
|---|---|
A&B |
Οι ετικέτες πρέπει να περιλαμβάνουν το A και το B. |
A\|B |
Οι ετικέτες πρέπει να περιλαμβάνουν τουλάχιστον ένα από το A ή το B. |
!A |
Οι ετικέτες πρέπει να εξαιρέσουν το A. |
Επιπλέον, χρησιμοποιήστε παρένθεση για να ελέγξετε τη σειρά αξιολόγησης της παράστασης ετικέτας. Από προεπιλογή, ! η έχει την υψηλότερη προτεραιότητα και & έχει υψηλότερη προτεραιότητα από |την . Επομένως, !A&B|C|!D είναι το ίδιο με ((!A)&B)|C|(!D)το .
Σύνδεση μεταβλητών
Οι μεταβλητές σάς επιτρέπουν να αναφερθείτε σε αντιστοιχισμένα στοιχεία γραφήματος σε άλλα τμήματα του ερωτήματός σας. Η κατανόηση του τρόπου σύνδεσης και χρήσης μεταβλητών είναι απαραίτητη για τη δημιουργία ισχυρών ερωτημάτων.
Μεταβλητές στοιχείων σύνδεσης
Αμφότερα τα μοτίβα κόμβων και άκρων μπορούν να συνδέσουν αντιστοιχισμένους κόμβους και άκρα σε μεταβλητές για μελλοντική αναφορά.
(p:Person)-[w:workAt]->(c:Company)
Σε αυτό το μοτίβο, p το συνδέεται σε αντίστοιχους Person κόμβους, w σε ασορτί workAt άκρα και c σε αντίστοιχους Company κόμβους.
Μεταβλητή επαναχρησιμοποίησης για δομικούς περιορισμούς:
Η επανάληψη χρήσης της ίδιας μεταβλητής σε ένα μοτίβο πολλές φορές εκφράζει έναν περιορισμό στη δομή των αντιστοιχιών. Κάθε εμφάνιση της ίδιας μεταβλητής πρέπει να συνδέεται πάντα στο ίδιο στοιχείο γραφήματος σε μια έγκυρη αντιστοίχιση. Η επαναχρησιμοποίηση μεταβλητών είναι ισχυρή για την έκφραση σύνθετων δομικών απαιτήσεων.
(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
Το μοτίβο εντοπίζει Person κόμβους x και y οι οποίοι γνωρίζουν ο ένας τον άλλον και λειτουργούν στην ίδια Company, η οποία συνδέεται με τη μεταβλητή c. Η επαναχρησιμοποίηση του c εξασφαλίζει ότι αμφότερα τα άτομα εργάζονται στην ίδια εταιρεία.
Κατηγορήματα μοτίβου με μεταβλητές στοιχείων:
Οι μεταβλητές στοιχείων σύνδεσης σάς επιτρέπουν να καθορίσετε κατηγορήματα κόμβου και μοτίβου άκρου. Αντί να παρέχει απλώς ένα πληρωτικό με ακριβείς τιμές ιδιοτήτων όπως { name: "New York, USA" }, ένα πληρωτικό μπορεί να καθορίσει ένα κατηγόρημα που αξιολογείται για κάθε υποψήφιο στοιχείο. Το μοτίβο συμφωνεί μόνο εάν το κατηγόρημα έχει ως αποτέλεσμα TRUE:
(p:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T18:00:00Z")]-(o:Person)
Το μοτίβο άκρου εντοπίζει άτομα που γνωρίζονται από την 1η Ιανουαρίου 2000, χρησιμοποιώντας μια ευέλικτη κατάσταση και όχι μια ακριβή αντιστοιχία.
Σημείωμα
Οι μεταβλητές μοτίβου άκρου συνδέονται πάντα με το μεμονωμένο άκρο στο κατηγόρημα μοτίβου άκρου, ακόμα και όταν χρησιμοποιούνται μοτίβα μεταβλητού μήκους. Αυτό μπορεί να σας βοηθήσει να μην χρειάζεται να καταργήσετε τις μεταβλητές λίστας ομάδων άκρου για να εκτελέσετε ένα μετα-φίλτρο. Ανατρέξτε στο θέμα Σύνδεση μεταβλητών άκρου μοτίβου μεταβλητού μήκους.
Προηγμένες τεχνικές κατηγόρησης μοτίβου:
Τα κατηγορήματα μοτίβων παρέχουν ισχυρές δυνατότητες ενσωματωμένου φιλτραρίσματος που μπορούν να βελτιώσουν την αναγνωσιμότητα των ερωτημάτων:
-- Multiple conditions in node predicates
MATCH (p:Person WHERE p.age > 30 AND p.department = 'Engineering')
-[:workAt]->
(c:Company WHERE c.revenue > 1000000 AND c.location = 'Seattle')
-- Complex edge predicates with calculations
MATCH (p1:Person)-[w:workAt WHERE w.start_date < ZONED_DATETIME('2020-01-01T00:00:00Z')
AND w.salary > 75000]-(c:Company)
-- MATCH WHERE: evaluated after pattern matching
MATCH (p:Person)-[:workAt]->(c:Company)
WHERE p.active = TRUE AND c.public = TRUE
-- Filter during matching and after
MATCH (p:Person WHERE p.department = 'Sales')-[:workAt]->(c:Company)
WHERE p.quota_achievement > 1.2 AND c.revenue > c.revenue_target
Φιλοδώρημα
Η χρήση κατηγορημάτων μοτίβου όταν οι συνθήκες είναι εξαιρετικά επιλεκτικές μπορεί να μειώσει το μέγεθος των ενδιάμεσων αποτελεσμάτων.
Μεταβλητές διαδρομής σύνδεσης
Μπορείτε επίσης να συνδέσετε μια αντιστοιχισμένη διαδρομή σε μια μεταβλητή διαδρομής για περαιτέρω επεξεργασία ή να επιστρέψετε την πλήρη δομή διαδρομής στον χρήστη:
p=(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
Εδώ, p το συνδέεται σε μια τιμή διαδρομής που αντιπροσωπεύει την πλήρη αντιστοιχισμένη δομή διαδρομής, συμπεριλαμβανομένων των τιμών αναφοράς για όλους τους κόμβους και τα άκρα με τη σειρά που παρέχεται.
Οι δεσμευμένες διαδρομές μπορούν είτε να επιστραφούν στον χρήστη είτε να υποβληθούν σε περαιτέρω επεξεργασία χρησιμοποιώντας συναρτήσεις όπως NODES ή EDGES:
MATCH p=(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
LET path_edges = edges(p)
RETURN path_edges, size(path_edges) AS num_edges
GROUP BY path_edges
Σύνταξη μοτίβων
Τα ερωτήματα από τον πραγματικό κόσμο συχνά απαιτούν πιο σύνθετα μοτίβα από τις απλές δομές κόμβου-άκρου-κόμβου. Το GQL παρέχει διάφορους τρόπους για να συντάσετε μοτίβα για εξελιγμένες διασχίσεις γραφημάτων.
Σύνταξη μοτίβων διαδρομής
Τα μοτίβα διαδρομής μπορούν να συντεθούν με συνένωση απλών μοτίβων κόμβων και άκρων για τη δημιουργία μεγαλύτερων διανύσεων.
(:Person)-[:knows]->(:Person)-[:workAt]->(:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)
Το μοτίβο διέρχεται από ένα άτομο μέσω των κοινωνικών και επαγγελματικών συνδέσεών του για να εντοπίσει πού βρίσκεται η εταιρεία του συναδέλφου του.
Κατασκευή τμηματοδείκτων: Μπορείτε επίσης να δημιουργήσετε μοτίβα διαδρομών πιο επαυξητική, το οποίο μπορεί να κάνει πιο ευανάγνωστη και κατανοητή τα σύνθετα μοτίβα:
(:Person)-[:knows]->(p:Person),
(p:Person)-[:workAt]->(c:Company),
(c:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)
Αυτή η προσέγγιση αναλύει την ίδια διέλευση σε λογικά βήματα, διευκολύνοντας την κατανόηση και τον εντοπισμό σφαλμάτων.
Σύνταξη μη γραμμικών μοτίβων
Το σχήμα ενός μοτίβου που προκύπτει δεν χρειάζεται να είναι μια γραμμική διαδρομή. Μπορείτε να αντιστοιχίσετε πιο σύνθετες δομές όπως μοτίβα σε σχήμα αστεριού που εκπέμπουν από έναν κεντρικό κόμβο:
(p:Person),
(p)-[:studyAt]->(u:University),
(p)-[:workAt]->(c:Company),
(p)-[:likes]-(m)
Το μοτίβο εντοπίζει ένα άτομο μαζί με την εκπαίδευση, την απασχόληση και τις προτιμήσεις περιεχομένου του ταυτόχρονα, ένα ολοκληρωμένο ερώτημα προφίλ.
Ίχνη αντιστοίχισης
Σε σύνθετα μοτίβα, είναι συχνά ανεπιθύμητο να διασχίσετε το ίδιο άκρο πολλές φορές. Η επαναχρησιμοποίηση του άκρου γίνεται σημαντική όταν το πραγματικό γράφημα περιέχει κύκλους που θα μπορούσαν να οδηγήσουν σε άπειρες ή υπερβολικά μεγάλες διαδρομές. Για να χειριστείτε την επαναχρησιμοποίηση άκρου, το γράφημα υποστηρίζει τη TRAIL λειτουργία αντιστοίχισης.
Η προσθήκη προθέματος σε ένα μοτίβο διαδρομής με τη λέξη-κλειδί TRAIL απορρίπτει όλες τις αντιστοιχίσεις που συνδέουν το ίδιο άκρο πολλές φορές:
TRAIL (a)-[e1:knows]->(b)-[e2:knows]->(c)-[e3:knows]->(d)
TRAILΧρησιμοποιώντας το , το μοτίβο παράγει μόνο αντιστοιχίσεις στις οποίες όλα τα άκρα είναι διαφορετικά. Επομένως, ακόμα και αν c = a η διαδρομή σχηματίζει έναν κύκλο σε μια δεδομένη συμφωνία, e3 δεν συνδέεται ποτέ στο ίδιο άκρο e1με το .
Η TRAIL λειτουργία είναι απαραίτητη για την αποτροπή ατέρμονων βρόχων και τη διασφάλιση ότι τα ερωτήματά σας επιστρέφουν χαρακτηριστικές, μη αιωρεμένες διαδρομές.
Χρήση μοτίβων μεταβλητού μήκους
Τα μοτίβα μεταβλητού μήκους είναι ισχυρές κατασκευές που σας επιτρέπουν να βρίσκετε διαδρομές διαφόρων μηκών χωρίς τη σύνταξη επαναλαμβανόμενων προδιαγραφών μοτίβων. Είναι απαραίτητες για τη διέλευση ιεραρχιών, κοινωνικών δικτύων και άλλων δομών όπου το βέλτιστο μήκος της διαδρομής δεν είναι γνωστό εκ των προτέρων.
Μοτίβα οριοθέτησης μεταβλητού μήκους
Σημαντικό
Προς το παρόν, τα μοτίβα δεσμευμένου μήκους μεταβλητού μήκους υποστηρίζουν μόνο μέγιστο ανώτατο όριο 8. Ανατρέξτε στο άρθρο σχετικά με τους τρέχοντες περιορισμούς.
Πολλά συνήθη ερωτήματα γραφήματος απαιτούν την επανάληψη του ίδιου μοτίβου άκρου πολλές φορές. Αντί να γράφετε λεπτομερή μοτίβα όπως:
(:Person)-[:knows]->(:Person)-[:knows]->(:Person)-[:knows]->(:Person)
Μπορείτε να χρησιμοποιήσετε την πιο συνοπτική σύνταξη μεταβλητού μήκους:
(:Person)-[:knows]->{3}(:Person)
Το {3} καθορίζει ότι το μοτίβο άκρου -[:knows]-> πρέπει να επαναληφθεί ακριβώς τρεις φορές.
Ευέλικτες περιοχές επανάληψης: Για περισσότερη ευελιξία, μπορείτε να καθορίσετε ένα χαμηλότερο όριο και ένα επάνω όριο για την επανάληψη:
(:Person)-[:knows]->{1, 3}(:Person)
Αυτό το μοτίβο βρίσκει άμεσους φίλους, φίλους φίλων και φίλους φίλων όλων σε ένα μόνο ερώτημα.
Σημείωμα
Το κατώτερο όριο μπορεί επίσης να είναι 0. Σε αυτή την περίπτωση, δεν αντιστοιχίζονται άκρα και ολόκληρο το μοτίβο συμφωνεί μόνο εάν και μόνο εάν τα δύο μοτίβα κόμβου τελικού σημείου συμφωνούν με τον ίδιο κόμβο.
Παράδειγμα:
(p1:Person)-[r:knows WHERE NOT p1=p2]->{0,1}(p2:Person)
Αυτό το μοτίβο ταιριάζει με ζεύγη διαφορετικών ατόμων που γνωρίζονται μεταξύ τους, αλλά ταιριάζει επίσης με το ίδιο άτομο και με τα δύο p1 και - ακόμα κι p2 αν αυτό το άτομο δεν «γνωρίζει» τον εαυτό του.
Όταν δεν καθορίζεται χαμηλότερο όριο, γενικά ορίζεται από προεπιλογή σε 0 (μηδέν).
Σύνθετες συνθέσεις μεταβλητού μήκους: Τα μοτίβα μεταβλητού μήκους μπορούν να αποτελούν μέρος μεγαλύτερων, πιο περίπλοκων μοτίβων, όπως στο ακόλουθο ερώτημα:
MATCH (c1:Comment)<-[:likes]-(p1:Person)-[:knows]-(p2:Person)-[:likes]->(c2:Comment),
(c1:Comment)<-[:replyOf]-{1,3}(m)-[:replyOf]->{1,3}(c2:Comment)
RETURN *
LIMIT 100
Το μοτίβο εντοπίζει ζεύγη σχολίων όπου οι χρήστες που γνωρίζονται ήθελαν διαφορετικά σχόλια και αυτά τα σχόλια συνδέονται μέσω αλυσίδων απαντήσεων 1-5 επιπέδων το καθένα.
Σύνδεση μεταβλητών άκρου μοτίβου μεταβλητού μήκους
Όταν συνδέσετε ένα μοτίβο άκρου μεταβλητού μήκους, η τιμή και ο τύπος της μεταβλητής άκρου αλλάζουν ανάλογα με το περιβάλλον αναφοράς. Η κατανόηση αυτής της συμπεριφοράς είναι ζωτικής σημασίας για τη σωστή επεξεργασία αντιστοιχιών μεταβλητού μήκους:
Δύο μοίρες αναφοράς:
- Μέσα σε ένα μοτίβο μεταβλητού μήκους: Οι μεταβλητές άκρου γραφήματος συνδέονται με κάθε μεμονωμένο άκρο κατά μήκος της αντιστοιχισμένης διαδρομής (ονομάζεται επίσης "βαθμός αναφοράς singleton")
- Εκτός ενός μοτίβου μεταβλητού μήκους: Οι μεταβλητές άκρου γραφήματος συνδέονται με την ακολουθία όλων των άκρων κατά μήκος της αντιστοιχισμένης διαδρομής (ονομάζεται επίσης "βαθμός αναφοράς ομάδας")
Παράδειγμα που δείχνει και τα δύο περιβάλλοντα:
MATCH (:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")]->{1,3}()
RETURN e[0]
LIMIT 100
Η αξιολόγηση της μεταβλητής e άκρου πραγματοποιείται σε δύο περιβάλλοντα:
MATCHΣτη δήλωση: Το ερώτημα βρίσκει αλυσίδες φίλων φίλων φίλων όπου ιδρύθηκε κάθε φιλία από το έτος 2000. Κατά την αντιστοίχιση μοτίβων, το κατηγόρημαe.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")μοτίβου άκρου αξιολογείται μία φορά για κάθε υποψήφιο άκρο. Σε αυτό το περιβάλλον,eτο συνδέεται σε μια μοναδική τιμή αναφοράς άκρου.RETURNΣτην πρόταση: Εδώ,eτο συνδέεται σε μια λίστα (ομάδας) τιμών αναφοράς άκρου με τη σειρά που εμφανίζονται στην αντιστοιχισμένη αλυσίδα. Το αποτέλεσμα είναι η πρώτη τιμή αναφοράςe[0]άκρου σε κάθε αντιστοιχισμένη αλυσίδα.
Μεταβλητές άκρων μοτίβου μεταβλητού μήκους σε οριζόντια συνάθροιση:
Οι μεταβλητές άκρων που δεσμεύονται από αντιστοίχιση μοτίβου μεταβλητού μήκους είναι λίστες ομάδων εκτός του μοτίβου μεταβλητού μήκους και επομένως μπορούν να χρησιμοποιηθούν σε οριζόντια συνάθροιση.
MATCH (a:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")]->{1,3}(b)
RETURN a, b, size(e) AS num_edges
LIMIT 100
Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα οριζόντια συνάθροιση.