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.
Porovnávanie vzorov grafov vám umožňuje opísať štruktúru dát, ktoré chcete nájsť, pomocou intuitívnej, vizuálnej syntaxe. Namiesto spájania tabuliek píšete vzory, ktoré vyzerajú ako samotné vzťahy – uzly spojené hranami. Tento článok vám ukáže, ako písať GQL vzorové dotazy pre bežné scenáre v grafe v Microsoft Fabric.
Príklady používajú vzorkovú dátovú sadu sociálnych sietí. Pre úplnú referenciu syntaxe vzorov pozri GQL grafové vzory.
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.
Zladiť priame vzťahy
Základný vzor zodpovedá typu uzla, konkrétnemu typu hrany a inému typu uzla. Syntax vyzerá ako diagram vzťahu.
Napríklad, ak chcete nájsť až 100 ľudí spárovaných so spoločnosťou, v ktorej pracujú:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name
LIMIT 100
Používajte neorientovaný vzor hrany, keď neviete alebo vám nezáleží na smere. Napríklad, aby ste našli až 100 spoločných známych bez ohľadu na to, kto kontakt inicioval:
MATCH (a:Person)-[:knows]-(b:Person)
RETURN a.firstName, b.firstName
LIMIT 100
Note
Graph momentálne nepodporuje vytváranie neorientovaných hrán, ale pomocou syntaxe môžete vyhľadávať hrany v ľubovoľnom smere -[:label]- .
Filtračné vzory s inline WHERE
Umiestnite ho WHERE do vzoru, aby ste filtrovali uzly a hrany podľa ich zhody. Tento prístup je efektívnejší než filtrovanie dodatočne.
Napríklad, aby sme našli ľudí narodených pred rokom 1990, ktorí pracujú v spoločnosti, ktorej názov začína na 'A':
MATCH (p:Person WHERE p.birthday < 19900101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Filtrujte vlastnosti hrán, aby ste obmedzili, ktoré vzťahy sa zhodujú. Napríklad, aby sme vracali len ľudí, ktorí začali pracovať v spoločnosti v roku 2010 alebo neskôr:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2010]->(c:Company)
RETURN p.firstName, c.name, w.workFrom
Zladiť viacskokové vzťahy
Použite vzory s premenlivou dĺžkou na prechod viacerými skokmi v jednom výraze. Špecifikujte minimálny a maximálny počet hopov pomocou syntaxe {min,max} .
Napríklad, aby ste našli až 100 ľudí dostupných v rámci dvoch až štyroch stupňov priateľstva od Alice:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{2,4}(dst:Person)
RETURN dst.firstName, dst.lastName
LIMIT 100
Ak chcete nájsť až 100 bezprostredných a druhostupňových spojení (jeden alebo dva skoky) z Alice:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,2}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Prechádzanie ovládaním pomocou režimov dráhy
Štandardne GQL používa TRAIL režim, ktorý zabraňuje tomu, aby sa ten istý okraj prechádzal viackrát. Používajte režimy cesty výslovne, keď potrebujete rôzne záruky.
| Režim cesty | Správanie | Použi, keď... |
|---|---|---|
WALK |
Umožňuje opakované uzly a hrany | Chceš surový pohyb bez obmedzení. Zriedka potrebné; Hlavne užitočné pre prieskumné dotazy. |
TRAIL |
Žiadne opakujúce sa hrany (predvolené) | Chcete sa vyhnúť spätnému sledovaniu toho istého vzťahu, ale ten istý uzol sa môže objaviť cez rôzne vzťahy. Funguje to dobre na väčšinu dotazov pri pohybe. |
SIMPLE |
Žiadne opakované uzly okrem začiatku a konca | Nechcete, aby sa žiadny uzol objavil viac ako raz uprostred cesty, ale povoľte cesty, ktoré sa uzatvárajú späť na začiatok. Užitočné na detekciu slučiek. |
ACYCLIC |
Žiadne opakujúce sa uzly | Musíte zabezpečiť, aby sa žiadny uzol neobjavil nikde na ceste viac ako raz. Použitie pre prísne hierarchie, rodokmeň alebo akékoľvek prechádzanie, kde by opätovné návštevy uzla priniesli nesprávne výsledky. |
WALK je najpermisívnejší a ACYCLIC zároveň najviac obmedzujúci.
TRAIL je predvolená a funguje dobre pre väčšinu dotazov. Používajte prísnejší režim len vtedy, keď to vyžaduje váš prípad použitia.
Aby sme ilustrovali rozdiel, zvážme cestu Alice → Bob → Carol → Bob:
- CHÔDZA — umožňuje túto cestu. Uzly a hrany sa môžu voľne opakovať.
- TRAIL — umožňuje túto cestu. Bob sa objavuje dvakrát, ale každá použitá hrana je iný vzťah (Alice→Bob a Carol→Bob sú odlišné hrany), takže žiadna hrana sa neopakuje.
- SIMPLE — blokuje túto cestu. Bob sa objavuje viackrát a SIMPLE umožňuje uzlu opakovať sa len vtedy, ak je to zároveň začiatok aj koniec cesty (uzavretý cyklus). Tu je Alice začiatok a Bob je koniec, takže žiadna výnimka neplatí.
- ACYCLICKÝ — blokuje túto cestu. Bob sa objaví viackrát kdekoľvek na ceste.
Nasledujúci príklad ukazuje, ako použiť TRAIL na počítanie, koľko odlišných ciest vedie ku každému z prvých 100 ľudí dostupných v sieti Alice do štyroch skokov:
MATCH TRAIL (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName, count(*) AS pathCount
LIMIT 100
Použite na ACYCLIC návrat až 100 ľudí dostupných z Alice do štyroch preskokov, pričom každá osoba na ceste je jedinečná:
MATCH ACYCLIC (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName
LIMIT 100
Tip
Pre veľké grafy vždy nastavte hornú hranicu pre vzory s premenlivou dĺžkou ({1,4} namiesto {1,}). Neobmedzené prechádzanie cez husté grafy môže naraziť na časové limity dotazu. Pozri Aktuálne obmedzenia.
Použitie opätovného použitia premenných na vyjadrenie zdieľaných entít
Opätovné použitie tej istej premennej v dvoch častiach vzoru vytvára implicitné obmedzenie rovnosti – obe referencie musia zodpovedať rovnakému uzlu. Táto technika vám umožňuje vyjadriť "nájsť entity spojené cez zdieľanú tretiu entitu."
Napríklad, aby ste našli až 100 párov ľudí, ktorí sa poznajú a pracujú v tej istej spoločnosti:
MATCH (c:Company)<-[:workAt]-(a:Person)-[:knows]-(b:Person)-[:workAt]->(c)
RETURN a.firstName, b.firstName, c.name
LIMIT 100
Premenná c sa opakovane používa pre oba workAt ciele, takže dotaz vracia len páry, kde sa obaja ľudia poznajú a pracujú v tej istej spoločnosti.
Ak chcete nájsť až 100 párov ľudí, ktorí obaja lajkovali ten istý príspevok:
MATCH (a:Person)-[:likes]->(post:Post)<-[:likes]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, post.id
LIMIT 100
Tip
Táto WHERE a.id < b.id podmienka zabraňuje vzniku duplikátnych párov (Alice + Bob a Bob + Alice) vo výsledkoch.
Kombinujte viacero vzorov
Uveďte viacero vzorov v jednom MATCH, oddelené čiarkami. Všetky vzory musia zdieľať aspoň jednu premennú, aby sa správne spojili.
Napríklad, aby ste našli až 100 ľudí spolu s ich pracoviskom a mestom, v ktorom žijú:
MATCH (p:Person)-[:workAt]->(c:Company),
(p)-[:isLocatedIn]->(city:City)
RETURN p.firstName, c.name AS company, city.name AS city
LIMIT 100
Zdieľaná premenná p spája oba vzory. Každý riadok výsledkov predstavuje jednu osobu so svojou spoločnosťou a mestom.
Vzťahy s voliteľným párovaním
Používajte OPTIONAL MATCH , keď vzťah nemusí existovať pre každý uzol. Riadky bez zhody sa zachovávajú s hodnotami NULL , podobne ako v SQL LEFT JOIN.
Napríklad vráťte až 100 ľudí s názvom ich spoločnosti, vrátane ľudí bez zamestnávateľa (teda ktorí sa vracajú NULL v stĺpci spoločnosti):
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name AS company
LIMIT 100
Použite IS NULL ho OPTIONAL MATCH na nájdenie až 100 ľudí, ktorí nepracujú v žiadnej spoločnosti:
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100