Σημείωμα
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να εισέλθετε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Το φιλτράρισμα περιορίζει τα αποτελέσματά σας στις γραμμές που έχουν σημασία. Η συνάθροιση συνοψίζει αυτές τις γραμμές σε μετρήσεις, σύνολα και μέσους όρους. Αυτό το άρθρο σάς δείχνει πώς μπορείτε να εφαρμόσετε και τις δύο τεχνικές σε ερωτήματα GQL έναντι γραφήματος στο Microsoft Fabric.
Τα παραδείγματα χρησιμοποιούν το δείγμα συνόλου δεδομένων κοινωνικού δικτύου. Για μια ολοκληρωμένη επεξήγηση της ροής ερωτημάτων και των προτάσεων, ανατρέξτε στον Οδηγό γλώσσας GQL.
Χρησιμοποιήστε αυτό το άρθρο για φιλτράρισμα γραμμών και μοτίβων, ομαδοποιημένη και μη ομαδοποιημένη συνάθροιση, φίλτρα ειδικά για συγκεντρωτικές συναθροίσεις και δρομολόγηση υπό όρους. Για τη δημιουργία μοτίβων multihop και την επιλογή διαδρομών, ανατρέξτε στο θέμα Σύνταξη ερωτημάτων μοτίβων γραφήματος. Για επιχειρηματικές εργασίες έτοιμες για προσαρμογή, ανατρέξτε στην ενότητα Σύνταξη συνηθισμένων ερωτημάτων GQL.
Prerequisites
- Ένα στοιχείο γραφήματος που έχει δημιουργηθεί από το δείγμα συνόλου δεδομένων κοινωνικού δικτύου, με τους τύπους κόμβων, τους τύπους ακμών και τις ιδιότητες που περιγράφονται στο παράδειγμα σχήματος κοινωνικού δικτύου.
- Εξοικείωση με βασικά
MATCHκαιRETURNερωτήματα. Δείτε τον οδηγό γλώσσας GQL.
Φιλτράρισμα σειρών με FILTER
Χρησιμοποιήστε το FILTER για να διατηρήσετε μόνο τις γραμμές που ικανοποιούν μια συνθήκη. Τοποθετήστε FILTER μετά MATCH για να περιορίσετε τα αποτελέσματα που ταιριάζουν.
Το παρακάτω ερώτημα επιστρέφει όλες τις γυναίκες με το όνομα και τα γενέθλιά τους:
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Συνδυάστε πολλές συνθήκες με AND και OR. Για παράδειγμα, το παρακάτω ερώτημα επιστρέφει τα ονόματα όλων των θηλυκών που γεννήθηκαν πριν από το 1990:
MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName
Συμβουλή
Χρησιμοποιήστε έναν ενσωματωμένο WHERE όρο όταν η συνθήκη καθορίζει ποιος κόμβος ή ακμή μπορεί να συμμετάσχει στην αντιστοίχιση. Χρησιμοποιήστε FILTER το όταν η συνθήκη ισχύει για τη γραμμή που παράγεται από μια προηγούμενη πρόταση. Η τοποθέτηση κατηγορήματος μπορεί να αλλάξει τα αποτελέσματα της συντομότερης διαδρομής. Δείτε την ενότητα Τοποθέτηση κατηγορημάτων πριν ή μετά την επιλογή διαδρομής.
Φιλτράρισμα κατά την αντιστοίχιση μοτίβων
Οι ενσωματωμένοι WHERE όροι μέσα σε ένα MATCH μοτίβο περιορίζουν τους κόμβους και τις ακμές που πληρούν τις προϋποθέσεις για την αντιστοίχιση. Το εργαλείο βελτιστοποίησης ερωτημάτων μπορεί να εφαρμόσει ισοδύναμα κατηγορήματα κατά τη διάρκεια της σάρωσης, επομένως η ενσωματωμένη σύνταξη δεν είναι εγγενώς ταχύτερη από ένα ξεχωριστό FILTER. Επιλέξτε τη φόρμα που εκφράζει την επιδιωκόμενη σημασιολογία.
Για παράδειγμα, για να βρείτε άτομα που γεννήθηκαν πριν από το 1994 μαζί με την εταιρεία στην οποία εργάζονται, περιορίζοντας τα αποτελέσματα σε εταιρείες των οποίων το όνομα αρχίζει με «Α»:
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Φιλτράρετε τις ιδιότητες των άκρων με τον ίδιο τρόπο. Για παράδειγμα, για να επιστρέψετε μόνο άτομα που άρχισαν να εργάζονται σε μια εταιρεία το 2000 ή αργότερα:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom
Για περισσότερες πληροφορίες σχετικά με την επιλογή μεταξύ ενσωματωμένου φιλτραρίσματος και φιλτραρίσματος μετά την αντιστοίχιση, ανατρέξτε στο θέμα Βελτιστοποίηση επιδόσεων ερωτημάτων GQL.
Χειρισμός τιμών null σε φίλτρα
Η GQL χρησιμοποιεί λογική τριών τιμών: τα κατηγορήματα αξιολογούνται σε TRUE, FALSE, ή UNKNOWN. Όταν μια τιμή ιδιότητας είναι μηδενική, οι συγκρίσεις επιστρέφουν UNKNOWN.
FILTER αντιμετωπίζει UNKNOWN ως μη ταιριαστή, επομένως η σειρά εξαιρείται.
Χρησιμοποιήστε IS NULL και IS NOT NULL για να ελέγξετε ρητά για μηδενικές τιμές:
-- Only include people whose browser is known
MATCH (p:Person)
FILTER p.browserUsed IS NOT NULL
RETURN p.firstName, p.browserUsed
Χρησιμοποιήστε το coalesce() για να αντικαταστήσετε μια προεπιλεγμένη τιμή όταν μια ιδιότητα μπορεί να είναι null:
MATCH (p:Person)
RETURN p.firstName, coalesce(p.browserUsed, 'Unknown browser') AS browser
Προσοχή
NULL = NULL αξιολογεί σε UNKNOWN, όχι TRUE. Χρησιμοποιείται IS NULL πάντα για τον έλεγχο μηδενικών τιμών, όχι ισότητας.
Συγκεντρωτικά αποτελέσματα με RETURN
Χρησιμοποιήστε συναρτήσεις συγκεντρωτικών αποτελεσμάτων στο RETURN για να συνοψίσετε τα αποτελέσματά σας. Το Graph υποστηρίζει τις ακόλουθες συγκεντρωτικές συναρτήσεις: COUNT, SUM, AVG, MIN, MAX, COLLECT_LIST, και COLLECT_ELEMENTSCOLLECT_ONE.
Για παράδειγμα, για να μετρήσετε όλα τα άτομα στο γράφημα:
MATCH (p:Person)
RETURN count(*) AS totalPeople
Για να μετρήσετε διακριτές αξίες, όπως πόσες διαφορετικές εταιρείες απασχολούν άτομα:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount
Φιλτράρισμα εισόδου για ένα σύνολο
Προσθέστε FILTER (WHERE predicate) μετά από μια συγκεντρωτική τιμή για να φιλτράρετε μόνο την είσοδο αυτής της συγκεντρωτικής τιμής. Άλλα συγκεντρωτικά στοιχεία στο ίδιο RETURN εξακολουθούν να λαμβάνουν όλες τις γραμμές εισόδου.
MATCH (p:Person)
RETURN count(*) AS allPeople,
count(*) FILTER (WHERE p.birthday < 19900101) AS peopleBornBefore1990
Προσθέστε LIMIT μέσα στο φίλτρο συγκεντρωτικών αποτελεσμάτων για να χρησιμοποιήσετε το πολύ τόσες σειρές που πληρούν τις προϋποθέσεις. Το ερώτημα εφαρμόζει το κατηγόρημα πριν από το συγκεκριμένο όριο συγκεντρωτικών αποτελεσμάτων.
MATCH (p:Person)
RETURN count(*) FILTER (WHERE p.birthday < 19900101 LIMIT 100) AS sampleCount
Συγκεκριμένη FILTER για συγκεντρωτική τιμή και LIMIT μην καταργείτε γραμμές από το υπόλοιπο ερώτημα. Χρησιμοποιήστε μια πρόταση ή έναν FILTER όρο επιπέδου WHERE αντιστοίχισης όταν θέλετε να φιλτράρετε τη ροή γραμμών.
Συλλέξτε τιμές
Χρησιμοποιήστε το COLLECT_LIST για να επιστρέψετε ένα στοιχείο λίστας για κάθε τιμή εισόδου, συμπεριλαμβανομένων των μηδενικών τιμών. Προσθήκη DISTINCT για κατάργηση διπλότυπων.
MATCH (p:Person)
RETURN collect_list(DISTINCT p.browserUsed) AS browsers
COLLECT_ONE Επιστρέφει μία μη μηδενική τιμή εισόδου. Η επιλεγμένη τιμή δεν είναι ντετερμινιστική, επομένως χρησιμοποιήστε την μόνο όταν οποιαδήποτε τιμή από την ομάδα είναι αποδεκτή.
COLLECT_ELEMENTS δέχεται εισόδους με τιμή λίστας και συνενώνει τα στοιχεία τους σε μία λίστα:
MATCH (p:Person)
RETURN collect_elements([p.firstName, p.lastName]) AS names
Χωρίς ομαδοποίηση στηλών, ένα ερώτημα συγκεντρωτικών αποτελεσμάτων χωρίς γραμμές εισόδου επιστρέφει μια κενή λίστα από COLLECT_LIST και COLLECT_ELEMENTS και null από COLLECT_ONE.
Ομαδικά αποτελέσματα με GROUP BY
Χρησιμοποιήστε το GROUP BY για RETURN να ομαδοποιήσετε γραμμές κατά κοινόχρηστες τιμές και να υπολογίσετε συγκεντρωτικές τιμές σε κάθε ομάδα. Αυτή η ομαδοποίηση είναι το ισοδύναμο GQL της SQL GROUP BY.
Για παράδειγμα, για να μετρήσετε τους υπαλλήλους ανά εταιρεία:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyId = c.id, companyName = c.name
RETURN companyId, companyName, count(*) AS employeeCount
GROUP BY companyId, companyName
ORDER BY employeeCount DESC
Ομαδοποιήστε κατά πολλές στήλες και υπολογίστε πολλές συγκεντρωτικές τιμές ταυτόχρονα. Για παράδειγμα, αναλύστε τον αριθμό των ατόμων και το εύρος γενεθλίων ανά φύλο και πρόγραμμα περιήγησης, επιστρέφοντας τους 10 πιο συνηθισμένους συνδυασμούς:
MATCH (p:Person)
LET gender = p.gender
LET browser = p.browserUsed
RETURN gender,
browser,
count(*) AS personCount,
min(p.birthday) AS earliestBirthday,
max(p.birthday) AS latestBirthday
GROUP BY gender, browser
ORDER BY personCount DESC
LIMIT 10
Σημείωμα
Όλες οι μη συγκεντρωτικές εκφράσεις στο RETURN πρέπει να εμφανίζονται στο GROUP BY. Οι παραστάσεις που δεν περιλαμβάνονται πρέπει GROUP BY να χρησιμοποιούν μια συνάρτηση συγκεντρωτικών αποτελεσμάτων.
Ταξινόμηση και περιορισμός συγκεντρωτικών αποτελεσμάτων
Χρησιμοποιήστε και ORDER BYLIMIT μαζί με GROUP BY για να βρείτε κορυφαία αποτελέσματα.
Για παράδειγμα, για να βρείτε τις πέντε κορυφαίες πόλεις ανά αριθμό κατοίκων:
MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityId = city.id, cityName = city.name
RETURN cityId, cityName, count(*) AS residentCount
GROUP BY cityId, cityName
ORDER BY residentCount DESC
LIMIT 5
Σημαντικό
Τοποθετήστε ORDER BY πριν .LIMIT
LIMIT ισχύει πάντα για το ήδη ταξινομημένο σύνολο αποτελεσμάτων.
Δρομολόγηση γραμμών με προτάσεις υπό συνθήκη
Χρησιμοποιήστε μια πρόταση υπό όρους για να δρομολογήσετε κάθε εισερχόμενη γραμμή στον πρώτο κλάδο που ταιριάζει. Η είσοδος μπορεί να προέρχεται από οποιοδήποτε προηγούμενο στάδιο ερωτήματος, όχι μόνο από μια συνάθροιση. Για παράδειγμα, το ακόλουθο ερώτημα κατηγοριοποιεί τις εταιρείες μετά τον υπολογισμό του αριθμού των εργαζομένων τους:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyId = c.id, companyName = c.name
RETURN companyId, companyName, count(*) AS employeeCount
GROUP BY companyId, companyName
NEXT
WHEN employeeCount >= 100u THEN
RETURN companyId, companyName, employeeCount, 'Large' AS category
WHEN employeeCount >= 10u THEN
RETURN companyId, companyName, employeeCount, 'Medium' AS category
ELSE
RETURN companyId, companyName, employeeCount, 'Small' AS category
Οι κλάδοι μπορούν να εκτελούν πλήρεις προτάσεις ερωτημάτων και ένθετες διαδικασίες, αντί να επιστρέφουν μόνο εκφράσεις. Το παρακάτω παράδειγμα στέλνει τρεις γραμμές εισόδου μέσω διαφορετικών σχημάτων διακλάδωσης. Ένας κλάδος εκτελεί ένα MATCH, ένας συνδυάζει δύο συγκεντρωτικές τιμές και UNION ALL , στη συνέχεια, συγκεντρώνει τα αποτελέσματά τους και ο εναλλακτικός κλάδος επιστρέφει μια σταθερά:
FOR selector IN [1, 2, 3]
RETURN selector
NEXT
WHEN selector = 1 THEN
MATCH (:Person)-[:knows]->(:Person)
RETURN count(*) AS total, 'Knows edges' AS category
WHEN selector = 2 THEN {
MATCH (:Person)-[:workAt]->(:Company)
RETURN count(*) AS partialCount
UNION ALL
MATCH (:Person)-[:studyAt]->(:University)
RETURN count(*) AS partialCount
NEXT
RETURN sum(partialCount) AS total, 'Affiliation edges' AS category
}
ELSE
RETURN 0u AS total, 'No selected metric' AS category
Ο μηχανισμός ερωτημάτων αξιολογεί τα κατηγορήματα με τη σειρά για κάθε γραμμή. Εκτελεί μόνο τον πρώτο κλάδο που ταιριάζει. Εάν ένα κατηγόρημα αποτιμάται σε UNKNOWN, η αξιολόγηση συνεχίζεται με τον επόμενο κλάδο. Χωρίς , ELSEοι γραμμές που δεν ταιριάζουν με έναν WHEN κλάδο παραλείπονται.
Οι προτάσεις υπό συνθήκη διαφέρουν από CASE τις εκφράσεις. Το Graph υποστηρίζει απλές CASE <expression> WHEN <value> εκφράσεις για επιλογή τιμών με βάση την ισότητα. Οι εκφράσεις που αναζητήθηκαν CASE WHEN <predicate> δεν υποστηρίζονται. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Προτάσεις υπό όρους.