Grafikon lekérdezés nyelve - Graph Query Language
A GQL ( Graph Query Language ) egy javasolt szabványos grafikon lekérdező nyelv . 2019 szeptemberében egy új szabványos grafikonos lekérdező nyelv (ISO / IEC 39075 Information Technology - Database Languages - GQL) létrehozására irányuló projektjavaslatot fogadták el az ISO / IEC vegyes technikai bizottság 1 tagjává váló nemzeti szabványügyi testületek szavazatával ( ISO / IEC JTC 1 ). Az 1. JTC felelős a nemzetközi informatikai szabványokért. A GQL deklaratív adatbázis-lekérdező nyelv, például az SQL .
Projekt egy új Nemzetközi Standard Graph Query Language számára
A GQL projektjavaslat kimondja:
"A grafikon használata az adatmodellezés alapvető ábrázolásaként az adatkezelés során kialakulóban lévő megközelítés. Ebben a megközelítésben az adatkészlet grafikonként van modellezve, amely minden egyes adatelemet a grafikon csúcsként (más néven csomópontként) jelenít meg, és minden kapcsolatot két entitás között élként a megfelelő csúcsok között. A gráfadat-modell felhívta a figyelmet egyedülálló előnyeire. Először is, a gráfmodell természetes módon illeszkedhet hierarchikus, összetett vagy akár önkényes struktúrájú adathalmazokhoz. Ilyen struktúrák könnyen kódolható élekként a gráfmodellbe. Ez sokkal kényelmesebb lehet, mint a relációs modell, amely megköveteli az adatsor normalizálását rögzített sortípusú táblákra. Másodszor, a gráfmodell lehetővé teszi a drága lekérdezések hatékony végrehajtását, vagy olyan adatelemző funkciók, amelyeknek meg kell figyelniük az adatelemek közötti többszörös ugrásviszonyokat, például elérhetõségi lekérdezéseket, legrövidebb vagy legolcsóbb elérési útvonal lekérdezéseket vagy központi elemzést. két grafikonmodell a jelenlegi használatban: az erőforrás-leíró keretrendszer (RDF) és a tulajdonsággrafikon-modell. Az RDF modellt a W3C számos specifikációban szabványosította. A Property Graph modell viszont sokféle megvalósítással rendelkezik a gráf adatbázisokban, a gráf algoritmusokban és a gráf feldolgozási lehetőségekben. Hiányzik azonban a tulajdonsággrafikonok közös, szabványosított lekérdezési nyelve (például az SQL a relációs adatbázis-rendszerekhez). A GQL-t javasoljuk ennek az űrnek a kitöltésére. "
A GQL projekt a konvergáló, 2016-ig tartó kezdeményezések csúcspontja, különösen a Neo4j magánjogi javaslata más adatbázis-szállítók számára 2016 júliusában, valamint az Oracle technikai személyzetének javaslata az ISO / IEC JTC 1 szabványok folyamatában abban az évben később.
A GQL projekt vezetője Stefan Plantikow (aki az első vezető mérnöke Neo4j „s Cypher az Apache Spark projekt) és Stephen Cannan (Műszaki Helyesbítés szerkesztője SQL). Szerkesztik a GQL specifikáció kezdeti korai munkájának tervezetét is.
Eredetileg motiváltan a GQL projekt célja egy megvalósítható normatív természetes nyelv specifikáció létrehozásának munkáját kiegészíteni olyan támogató közösségi erőfeszítésekkel, amelyek lehetővé teszik azok hozzájárulását, akik képtelenek vagy nem érdekeltek abban, hogy részt vegyenek a JTC 1 nemzetközi szabvány meghatározásának hivatalos folyamatában. 2019 júliusában a Linked Data Benchmark Council (LDBC) megállapodott abban, hogy a közösségi technikai munkacsoportok erőfeszítéseinek ernyőszervezetévé válik. A Meglévő Nyelvek és a Property Graph Schema munkacsoportok 2018 végén, illetve 2019 elején alakultak. A GQL hivatalos denotációs szemantikájának meghatározására egy munkacsoportot javasoltak a harmadik GQL közösségi frissítésben, 2019 októberében.
A GQL tulajdonsággrafikon adatmodellje
A GQL egy lekérdezési nyelv, amely kifejezetten a tulajdonsággrafikonokra vonatkozik. A tulajdonsággrafikon szorosan hasonlít egy koncepcionális adatmodellre, amelyet entitás-kapcsolat modell vagy UML osztálydiagram fejez ki (bár nem tartalmaz kétnél több entitást összekötő n-ary kapcsolatokat). Az entitásokat vagy fogalmakat csomópontként, a kapcsolatokat pedig élként modellezik egy grafikonon. A tulajdonsággrafikonok többgráfok : ugyanazon csomópár között sok él lehet. A GQL grafikonok keverhetők : tartalmazhatnak irányított éleket, ahol az élek egyik végpontja a farok (vagy forrás), a másik csomópont pedig a fej (vagy cél vagy cél), de tartalmazhatnak irányítatlan (kétirányú) vagy reflexív) élek.
A csomópontok és élek, együttesen elemként ismertek, rendelkeznek attribútumokkal. Ezek az attribútumok lehetnek adatértékek vagy címkék (címkék). A tulajdonságok értékei nem lehetnek grafikonok elemei, és nem lehetnek egész grafikonok: ezek a korlátozások szándékosan kényszerítik a grafikon topológiája és az adatok értékét hordozó attribútumok tiszta elkülönítését a grafikon topológiájával összefüggésben. A tulajdonsággráf adatmodell tehát szándékosan megakadályozza a grafikonok beágyazását vagy az egyik gráfban lévő csomópontok élként való kezelését a másikban. Minden tulajdonsággráf tartalmazhat egy címkekészletet és egy sor tulajdonságot, amelyek az egész gráfhoz vannak társítva.
A jelenlegi grafikon adatbázis-termékek és projektek gyakran támogatják az itt leírt modell korlátozott változatát. Például az Apache Tinkerpop minden csomópontot és élt egyetlen címkével kényszerít; A Cypher lehetővé teszi a csomópontok számára, hogy nulla-sok címke legyen, de a kapcsolatoknak csak egyetlen címkéjük van (ún. Reltype). A Neo4j adatbázisa támogatja a dokumentálatlan, gráfon átívelő tulajdonságokat, a Tinkerpop gráfértékekkel rendelkezik, amelyek ugyanazt a szerepet töltik be, és támogatja a "meta tulajdonságokat" vagy a tulajdonságok tulajdonságait is. Az Oracle PGQL-je nulla-sok címkét támogat a csomópontokon és az éleken, míg az SQL / PGQ egy-sok címkét támogat minden elemtípushoz. Az ETSI által meghatározott NGSI-LD információs modell egy kísérlet a tulajdonsággrafikonok hivatalos megadására, olyan csomópont- és kapcsolattípusokkal (él), amelyek szerepet játszhatnak a címkék szerepében a korábban említett modellekben, és támogatják a szemantikai hivatkozásokat a megosztott ontológiákban meghatározott osztályok öröklésével .
A GQL projekt meghatároz egy szabványos adatmodellt, amely valószínűleg ezeknek a változatoknak a halmaza lesz, és legalább a GQL első verziója lehetővé teszi a gyártók számára, hogy az egyes megvalósításokban döntsenek a címkék számszerűségéről, akárcsak az SQL / PGQ , és kiválaszthatja, hogy támogatja-e a nem irányított kapcsolatokat.
Az ERM- vagy UML-modellek további aspektusait (például általánosítást vagy altípust, vagy entitás- vagy kapcsolati számszerűségeket) GQL-sémák vagy olyan típusok rögzíthetik, amelyek leírják az általános adatmodell lehetséges példányait.
WG3: Az SQL kiterjesztése és a GQL létrehozása
A GQL projekt négyéves időtartamú. Hét nemzeti szabványügyi testület (az Egyesült Államok, Kína, Korea, Hollandia, az Egyesült Királyság, Dánia és Svédország szervei) nemzeti tantárgyi szakértőket nevezett ki a projekt munkájára, amelyet a 3. munkacsoport (adatbázis-nyelvek) végez. az ISO / IEC JTC 1 32. albizottsága (Adatkezelés és -csere), általában ISO / IEC JTC 1 / SC 32 WG3 , vagy röviden csak WG3 rövidítéssel. A WG3 (és a JTC 1 közvetlen elődbizottságai) 1987 óta felelős az SQL szabványért.
Meglévő gráf lekérdezési nyelvek kiterjesztése
A GQL projekt több forrásra vagy bemenetre támaszkodik, nevezetesen a meglévő ipari nyelvekre és az SQL szabvány új szakaszára. A WG3 előkészítő megbeszélésein felméréseket mutattak be ezeknek a bemeneteknek a történetéről és összehasonlító tartalmáról. A GQL deklaratív nyelv lesz, saját szintaxissal, hasonló szerepet játszik az SQL-ben egy adatbázis-alkalmazás felépítésében. Meghatároztak más gráf lekérdezési nyelveket, amelyek közvetlen eljárási funkciókat kínálnak, mint például az elágazás és a hurkolás (Apache Tinkerpop's Gremlin,) és a GSQL, lehetővé téve a grafikon iteratív áthaladását a gráfalgoritmusok osztályának elvégzéséhez, de a GQL nem fogja közvetlenül beépíteni ezeket jellemzők. A GQL-t azonban a gráfnyelvek általánosabb osztályának speciális eseteként tervezik, amely megosztja a gráftípusú rendszert és a hívófelületet a gráfokat feldolgozó eljárásokhoz.
SQL / PGQ tulajdonsággrafikon lekérdezés
A WG3 és SC32 tükörtestek korábbi munkája, különösen az INCITS DM32-ben, segített meghatározni az SQL Standard új tervezett 16. részét, amely lehetővé teszi egy csak olvasható gráf lekérdezés meghívását az SQL SELECT utasításban, egy gráfmintához illesztve. szintaxis, amely nagyon közel áll a Cypherhez, a PGQL-hez és a G-CORE-hoz, és ennek eredményeként egy adatérték-táblázatot ad vissza. Az SQL / PGQ tartalmaz egy DDL-t is, amely lehetővé teszi az SQL táblák hozzárendelését egy grafikon nézet sémaobjektumhoz, csomópontokkal és élekkel társítva címkekészletekhez és adat tulajdonságok halmazához. A GQL projekt szorosan együttműködik az ISO 9075 SQL (kiterjesztése) SQL / PGQ "projektfelosztásával", és az Egyesült Államokban működő technikai munkacsoportoknak (INCITS DM32) és nemzetközi szinten (SC32 / WG3) több szakértő közreműködő van, akik mindkét projekten dolgozni. A GQL projektjavaslat előírja az SQL / PGQ és a GQL szoros összehangolását, jelezve, hogy a GQL általában az SQL / PGQ felülhalmaza lesz.
Rejtjelez
A Cypher egy olyan nyelv, amelyet eredetileg Andrés Taylor és a Neo4j Inc. munkatársai terveztek, és amelyet a cég először 2011-ben hajtott végre. 2015 óta nyílt forráskódú nyelvleírásként, nyelvtani eszközökkel, JVM front-endként elérhetővé tette a Cypher-t. lekérdezéseket és több mint 2000 vizsgálati forgatókönyvet tartalmazó Technológiai Kompatibilitási Kitet (TCK), a Cucumber felhasználásával a nyelv nyelvi hordozhatóságához. A TCK tükrözi a nyelv leírását, valamint a Cypher Improvement javaslatban dokumentált időbeli adattípusok és funkciók továbbfejlesztését.
A Cypher lehetővé teszi grafikonelemek létrehozását, olvasását, frissítését és törlését, és ezért olyan nyelv, amely ezért elemző motorokhoz és tranzakciós adatbázisokhoz használható.
Lekérdezés vizuális útmintákkal
A Cypher kompakt, fix és változó hosszúságú mintákat használ, amelyek ötvözik a csomópont és a kapcsolat (él) topológiák vizuális ábrázolását a címke létezésével és a tulajdonságérték predikátumokkal. (Ezeket a mintákat általában " ASCII art " mintáknak nevezik , és eredetileg olyan programok megjegyzésének módjaként merültek fel, amelyek alacsonyabb szintű grafikus API-t használtak.) Ha egy ilyen mintát gráf adatelemekkel illesztünk, akkor egy lekérdezés kibonthatja a csomópontokra való hivatkozásokat. , kapcsolatok és érdeklődési utak. Ezeket a hivatkozásokat "kötéstáblázatként" adják ki, ahol az oszlopnevek gráfelemek sokaságához vannak kötve. Az oszlop neve egy "kötelező változó" nevévé válik, amelynek értéke a táblázat minden sorának sajátos grafikonelem hivatkozása.
Például egy minta MATCH (p:Person)-[:LIVES_IN]->(c:City) két oszlopos kimeneti táblázatot generál. Az első megnevezett oszlop p hivatkozásokat tartalmaz a címkével ellátott csomópontokra Person . A második megnevezett oszlop c hivatkozásokat tartalmaz a címkével ellátott csomópontokra City , jelezve azt a várost, ahol az illető él.
A kötési változók p és c ezután visszahivatkozási eléréséhez a tulajdonhoz kapcsolódó értékeket az említett elemek által változtatható. Előfordulhat, hogy a példa lekérdezést a-val zárjuk le RETURN , így egy teljes lekérdezést kapunk:
MATCH (p:Person)-[:LIVES_IN]->(c:City)
RETURN p.first_name, p.last_name, c.name, c.state
Ennek eredményeként egy utolsó négy oszlopos táblázat jön létre, amely felsorolja a grafikonon tárolt városok lakóinak nevét.
A mintalapú lekérdezések képesek egyesítéseket kifejezni, többféle minta kombinálásával, amelyek ugyanazt a kötési változót használják a természetes összekapcsolás kifejezéséhez a MATCH záradék használatával:
MATCH (p:Person)-[:LIVES_IN]->(c:City), (p:Person)-[:NATIONAL_OF]->(EUCountry)
RETURN p.first_name, p.last_name, c.name, c.state
Ez a lekérdezés csak az EU-állampolgárok lakóhelyét adná vissza.
Egy külső csatlakozást a következők fejezhetnek ki MATCH ... OPTIONAL MATCH :
MATCH (p:Person)-[:LIVES_IN]->(c:City) OPTIONAL MATCH (p:Person)-[:NATIONAL_OF]->(ec:EUCountry)
RETURN p.first_name, p.last_name, c.name, c.state, ec.name
Ez a lekérdezés visszaadná a grafikonon szereplő személyek lakóhelyének városát a lakossági információkkal együtt, és ha uniós állampolgár, akkor melyik országból származnak.
A lekérdezések tehát először képesek kivetíteni a lekérdezésbe bevitt gráf egy algráfját, majd kibontani az algráfhoz társított adatértékeket. Az adatértékek függvényekkel is feldolgozhatók, beleértve az összesítő függvényeket is, ami olyan számított értékek vetítéséhez vezet, amelyek a vetített grafikonon tárolt információkat különböző módon jelenítik meg. A G-CORE és a Morpheus vezetését követve a GQL célja, hogy az egyező minták által definiált algráfokat (és az ezekre az algráfokokra kiszámított grafikonokat) új grafikonokként vetítse vissza, amelyeket egy lekérdezés ad vissza.
Az ilyen jellegű minták elterjedtek a tulajdonsággráf lekérdezési nyelvekben, és ezek képezik az alapját az SQL / PGQ-ban definiált speciális minta alnyelvnek, amely valószínűleg a GQL nyelv részhalmazává válik. A Cypher mintákat is használ a beillesztési és módosítási záradékokhoz ( CREATE és MERGE ), és a GQL projektben javaslatokat tettek csomópont- és élminták gyűjtésére a gráftípusok leírására.
Ciprus megvalósítások
A Cypher-t a Neo4j adatbázisában, az SAP HANA Graph- jában, Redis Graph., Cambridge Semantics Anzograph, Bitnine AgensGraph, Memgraph, valamint nyílt forráskódú projektekben a rigai Neueda Labs által fenntartott Cypher for Gremlin és az Apache Spark Cypher (most átnevezték Morpheusra), valamint olyan kutatási projektekben, mint a Cypher.PL és az Ingraph. A Cypher mint nyelvet az informális közösség, az OpenCypher projekteként irányítja, amely 2017 február óta öt személyes nyílt OpenCypher Végrehajtó Találkozót tartott.
Cypher 9 és Cypher 10
A Cypher jelenlegi verzióját (ideértve az időbeli kiterjesztést is) Cypher 9-nek nevezik. A GQL projekt előtt egy új verzió, a Cypher 10 [ REF HEADING BELOW ] létrehozását tervezték , amely olyan funkciókat tartalmazna, mint a séma és az összeállítható gráf lekérdezések. és nézetek. A Cypher 10 első tervei, beleértve a grafikonok felépítését és vetítését, a Cypher for Apache Spark projektben valósultak meg 2016-ban.
PGQL
A PGQL az Oracle Inc. által tervezett és bevezetett nyelv, de nyílt forráskódú specifikációként, a JVM elemző szoftverrel együtt elérhetővé vált. A PGQL ötvözi a megszokott SQL SELECT szintaxist, beleértve az SQL kifejezéseket, az eredmények sorrendjét és összesítését a Cypher nyelvéhez nagyon hasonló mintaillesztési nyelvvel. Lehetővé teszi a grafikon specifikációjának lekérdezését, és tartalmaz egy lehetőséget a makrók számára a "mintanézetek" vagy megnevezett részminták rögzítésére. Nem támogatja a beillesztési vagy frissítési műveleteket, elsősorban analitikai környezethez tervezték, például az Oracle PGX termékéhez. A PGQL-t az Oracle Big Data Spatial és Graph, valamint a PGX.D / Async kutatási projektben is megvalósították.
G-CORE
A G-CORE egy tudományos, ipari kutatók és nyelvtervezők csoportja által tervezett kutatási nyelv, amely a Cypher, a PGQL és a SPARQL jellemzőire támaszkodik . A projektet a Linked Data Benchmark Council (LDBC) égisze alatt hajtották végre, kezdve egy Graph Query Language munkacsoport megalakításával 2015 végén, a papírírás munkájának nagy részével 2017-ben. A G-CORE egy összeállítható nyelv, amely gráfokon van bezárva: a gráfbemeneteket egy gráfkimenet létrehozásához dolgozzuk fel, gráfvetületek és gráfkészlet műveletek segítségével építjük fel az új gráfot. A G-CORE lekérdezések tiszta függvények a grafikonokon, nincsenek mellékhatásai, ami azt jelenti, hogy a nyelv nem határoz meg olyan műveleteket, amelyek mutálják (frissítik vagy törlik) a tárolt adatokat. A G-CORE bemutatja a nézeteket (megnevezett lekérdezéseket). Ezenkívül az utakat elemként beépíti a grafikonba ("utak első osztályú polgárokként"), amelyeket a vetített útvonalaktól függetlenül lehet lekérdezni (amelyeket lekérdezéskor számolnak a csomópont és az élelemek felett). A G-CORE-t részben megvalósították nyílt forráskódú kutatási projektekben az LDBC GitHub szervezetében.
GSQL
A GSQL a TigerGraph Inc. ingatlangráf-adatbázisához tervezett nyelv. 2018 októbere óta a TigerGraph nyelvtervezők népszerűsítik és dolgoznak a GQL projekten. A GSQL egy Turing-teljes nyelv, amely magában foglalja az eljárásfolyamat-vezérlést és az iterációt, valamint egy lehetőség a program teljesítéséhez kapcsolódó számított értékek összegyűjtésére és módosítására az egész gráfon vagy a grafikon akkumulátoroknak nevezett elemein. Ezeket a szolgáltatásokat úgy tervezték, hogy lehetővé tegyék az iteratív gráfszámításokat az adatok feltárásával és visszakeresésével. A GSQL grafikonokat csúcsok és élek sémájával kell leírni, amely korlátozza az összes beszúrást és frissítést. Ez a séma tehát egy SQL séma zárt világtulajdonságával rendelkezik, és a GSQL ezen aspektusát (amelyet a Morpheus projektből származó tervjavaslatok is tükrözik) a GQL fontos opcionális jellemzőjeként javasoljuk.
A csúcsokat és az éleket sémaobjektumoknak nevezik, amelyek adatokat tartalmaznak, de definiált típust is definiálnak, ugyanúgy, mint az SQL táblák adattárolók, társított implicit sortípusokkal. A GSQL grafikonok ezekből a csúcs- és élkészletekből állnak, és több megnevezett grafikon tartalmazhatja ugyanazt a csúcsot vagy élkészletet. A GSQL a 2017. szeptemberi megjelenése óta új funkciókat fejlesztett ki, nevezetesen a változó hosszúságú élminták illesztését vezette be a Cypher, PGQL és SQL / PGQ esetében használt szintaxissal, de stílusában is közel áll a fix hosszúságú mintákhoz. Microsoft SQL / Server grafikon
A GSQL támogatja a Multigraphs koncepciót is, amely lehetővé teszi a grafikon részhalmazainak szerepalapú hozzáférés-vezérlését. A többnyomtatók fontosak azoknak a vállalati léptékű grafikonoknak, amelyekhez finom szemcsés hozzáférés-ellenőrzés szükséges a különböző felhasználók számára.
Morpheus: több grafikon és összeállítható gráf lekérdezések az Apache Sparkban
Az opencypher Morpheus projekt a Cypher-t valósítja meg az Apache Spark felhasználók számára. 2016-tól kezdődően ez a projekt eredetileg három kapcsolódó erőfeszítés mellett futott, amelyekben a Morpheus tervezői is részt vettek: SQL / PGQ, G-CORE és a Cypher kiterjesztések megtervezése több grafikon lekérdezéséhez és összeállításához. A Morpheus projekt a Cypher (más néven "Cypher 10") kiterjesztéseinek tesztelő terepeként működött a DDL gráf és a lekérdezés nyelvének kiterjesztése két területén.
A grafikon DDL szolgáltatásai tartalmazzák
- a tulajdonságdiagram nézetek meghatározása a JDBC-hez kapcsolódó SQL táblákon és a Spark DataFrame-eken keresztül
- gráfsémák vagy -típusok meghatározása a csomópont- és éltípus-minták összeállításával, altípussal
- egy gráf tartalmának zárt vagy rögzített sémával való korlátozása
- katalógusbejegyzések létrehozása több megnevezett grafikonhoz hierarchikusan rendezett katalógusban
- ábrázolja az adatforrásokat egy egyesített, heterogén katalógus létrehozásához
- katalógus bejegyzések létrehozása megnevezett lekérdezésekhez (nézetekhez)
A grafikon lekérdezés nyelvbővítményei tartalmazzák
- gráfunió
- a minták egyezésének eredményeiből kiszámított grafikonok vetítése több bemenő grafikonon
- táblák támogatása (Spark DataFrames) a lekérdezések bemeneteként ("meghajtó táblák")
- nézetek, amelyek megnevezett vagy vetített grafikonokat fogadnak el paraméterként.
Ezeket a szolgáltatásokat a tulajdonságdiagram-lekérdezési nyelvek szabványosításának a GQL-projektben történő bevezetésére javasolták.