Poznámka
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete sa skúsiť prihlásiť alebo zmeniť adresáre.
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete skúsiť zmeniť adresáre.
Filtrovanie zúži výsledky na riadky, ktoré sú dôležité. Agregácia tieto riadky zhrňuje do počtov, súčtov a priemerov. Tento článok vám ukáže, ako aplikovať obe techniky v GQL dotazoch proti grafu v Microsoft Fabric.
Príklady používajú vzorkovú dátovú sadu sociálnych sietí. Pre úplný prehľad o GQL príkazoch a výrazoch pozri GQL jazykový sprievodca.
Požiadavky
- Grafová položka s načítanými dátami. Ak ste v Graphe nováčik, najskôr dokončite tutoriál .
- Znalosť základov
MATCHaRETURNotázok. Pozri jazykový sprievodca GQL.
Riadky filtra s FILTER
Používajte FILTER len riadky, ktoré spĺňajú podmienku. Umiestnite za ním FILTERMATCH , aby ste zúžili zhodné výsledky.
Nasledujúci dotaz vracia všetky ženy s ich menom a dátumom narodenia:
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Skombinujte viacero podmienok s AND a .OR Napríklad nasledujúci dotaz vráti mená všetkých žien narodených pred rokom 1990:
MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName
Tip
Pre lepší výkon filtrujte počas pattern matching pomocou inline WHERE klauzuly namiesto samostatného príkazu FILTER . Pozri Filter počas porovnávania vzorov.
Filter počas rozpoznávania vzorov
Inline WHERE klauzuly vo vnútri vzoru MATCH obmedzujú, ktoré uzly a hrany sa zhodujú pred vytvorením akýchkoľvek výsledkov. Tento prístup je efektívnejší ako klauzula po zhode FILTER , pretože dotazovací engine orezuje riadky skôr.
Napríklad, aby ste našli ľudí narodených pred rokom 1994 spolu so spoločnosťou, v ktorej pracujú, a obmedziť výsledky na spoločnosti, ktorých názov začína na 'A':
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Vlastnosti hrán filtrujte rovnakým spôsobom. Napríklad, aby sme vracali len ľudí, ktorí začali pracovať v spoločnosti v roku 2000 alebo neskôr:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom
Viac o rozdieloch vo výkone medzi inline a post-match filtrovaním nájdete v článku Optimalizovať výkon dotazov GQL.
Spracovanie nulových hodnôt vo filtroch
GQL používa trojhodnotovú logiku: predikáty vyhodnocujú do TRUE, FALSE, alebo UNKNOWN. Keď je hodnota vlastnosti nulová, porovnania vrátia .UNKNOWN
FILTER považuje sa UNKNOWN za nezhodujúce, takže riadok je vylúčený.
Použite IS NULL a IS NOT NULL na testovanie nulových hodnôt explicitne:
-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname
Použite coalesce() na dosadenie predvolenej hodnoty, keď môže byť vlastnosť nulová:
MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName
Výstraha
NULL = NULL vyhodnocuje na UNKNOWN, nie TRUE. Vždy používajte IS NULL na testovanie nulových hodnôt, nie rovnosti.
Agregované výsledky s RETURN
Použite agregované funkcie na RETURN zhrnutie vašich výsledkov. GQL podporuje count(), sum(), avg(), min(), a .max()
Napríklad, ak počítame všetkých ľudí v grafe:
MATCH (p:Person)
RETURN count(*) AS totalPeople
Na počítanie rôznych hodnôt, napríklad koľko rôznych spoločností zamestnáva ľudí:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount
Výsledky skupín s GROUP BY
Použite GROUP BY v RETURN na zoskupenie riadkov podľa zdieľaných hodnôt a výpočet agregátov v rámci každej skupiny. Táto skupina je ekvivalentom SQL GROUP BYv GQL.
Napríklad, ak počítame zamestnancov na spoločnosť:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Zoskupte podľa viacerých stĺpcov a vypočítajte viacero agregátov naraz. Napríklad rozložte počet osôb a rozsah narodenia podľa pohlavia a prehliadača, vráťte 10 najbežnejších kombinácií:
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
Note
Všetky neagregované výrazy v musia RETURN byť v GROUP BY. Výrazy, ktoré nie sú v , GROUP BY musia používať agregovanú funkciu.
Triedenie a obmedzovanie agregovaných výsledkov
Používajte ORDER BY a LIMIT spolu s GROUP BY hľadaním najlepších výsledkov.
Napríklad na nájdenie piatich najlepších miest podľa počtu obyvateľov:
MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5
Dôležité
Miesto ORDER BY pred LIMIT.
LIMIT vždy platí pre už zoradený súbor výsledkov.
Použite CASE pre podmienené hodnoty vo výsledkoch
Použitie CASE/WHEN/THEN/ELSEna výpočet podmienených hodnôt v RETURN alebo .LET
Napríklad, na kategorizáciu ľudí do období podľa roku narodenia:
MATCH (p:Person)
RETURN p.firstName,
CASE WHEN p.birthday < 19800101 THEN 'Before 1980'
WHEN p.birthday < 20000101 THEN '1980–1999'
ELSE '2000 or later'
END AS era