Spørgsmål til grafforespørgsel - Graph Query Language
GQL ( graf Query Language ) er en foreslået standard graf query sprog . I september 2019 blev et forslag til et projekt til oprettelse af et nyt standardgrafforespørgselssprog (ISO / IEC 39075 Information Technology - Database Languages - GQL) godkendt ved afstemning af nationale standardiseringsorganer, der er medlemmer af ISO / IEC Joint Technical Committee 1 ( ISO / IEC JTC 1 ). JTC 1 er ansvarlig for internationale standarder for informationsteknologi. GQL er beregnet til at være et deklarativt databaseforespørgselssprog som SQL .
Projekt til et nyt International Standard Graph Query Language
I GQL-projektforslaget hedder det:
"Brug af graf som en grundlæggende repræsentation til datamodellering er en ny tilgang i datastyring. I denne tilgang er datasættet modelleret som en graf, der repræsenterer hver dataenhed som et toppunkt (også kaldet en node) af grafen og hvert forhold mellem to enheder som en kant mellem tilsvarende hjørner. Grafdatamodellen har gjort opmærksom på sine unikke fordele. For det første kan grafmodellen være en naturlig pasform til datasæt, der har hierarkiske, komplekse eller endog vilkårlige strukturer. Sådanne strukturer kan være let kodet i grafmodellen som kanter. Dette kan være mere praktisk end den relationsmodel, som kræver normalisering af datasættet i et sæt tabeller med faste række typer. For det andet muliggør grafmodellen effektiv udførelse af dyre forespørgsler eller dataanalysefunktioner, der skal overholde multi-hop-forhold mellem dataenheder, såsom forespørgsler om tilgængelighed, forespørgsler på korteste eller billigste sti eller centralitetsanalyse. er to grafmodeller i øjeblikket brug: Resource Description Framework (RDF) -modellen og Property Graph-modellen. RDF-modellen er standardiseret af W3C i en række specifikationer. Property Graph-modellen har derimod en lang række implementeringer i grafdatabaser, grafalgoritmer og grafbehandlingsfaciliteter. Der mangler dog et almindeligt, standardiseret forespørgselssprog til egenskabsdiagrammer (som SQL til relationsdatabasesystemer). GQL foreslås at udfylde dette tomrum. "
GQL-projektet er kulminationen på konvergerende initiativer, der går tilbage til 2016, især et privat forslag fra Neo4j til andre databaseleverandører i juli 2016 og et forslag fra Oracles tekniske personale inden for ISO / IEC JTC 1-standardprocessen senere samme år.
GQL - projektet ledes af Stefan Plantikow (som var den første ledende ingeniør i Neo4j 's Cypher for Apache Spark - projekt) og Stephen Cannan (Technical Corrigenda editor for SQL). De er også redaktører for de første tidlige arbejdskladder til GQL-specifikationen.
Som oprindeligt motiveret sigter GQL-projektet mod at supplere arbejdet med at skabe en implementerbar normativ sprogspecifikation med støttende samfundsindsats, der muliggør bidrag fra dem, der ikke er i stand til eller ikke er interesseret i at deltage i den formelle proces med at definere en JTC 1 International Standard. I juli 2019 accepterede Linked Data Benchmark Council (LDBC) at blive paraplyorganisation for indsatsen fra samfundstekniske arbejdsgrupper. Arbejdsgrupperne Eksisterende sprog og ejendomsgrafskema blev dannet i henholdsvis slutningen af 2018 og begyndelsen af 2019. En arbejdsgruppe til at definere formel denotationssemantik for GQL blev foreslået ved den tredje GQL Community Update i oktober 2019.
Datamodellen til GQL-egenskabsdiagrammet
GQL er et forespørgselssprog specifikt til ejendomsgrafer. En egenskabsgraf ligner meget en konceptuel datamodel, som den udtrykkes i en enhedsrelationsmodel eller i et UML- klassediagram (skønt den ikke inkluderer n-ari-relationer, der forbinder mere end to enheder). Enheder eller koncepter modelleres som noder og relationer som kanter i en graf. Ejendomsgrafer er multigrafier : der kan være mange kanter mellem det samme par noder. GQL-grafer kan blandes : de kan indeholde rettede kanter, hvor en af slutpunktsnoderne på en kant er halen (eller kilden), og den anden node er hovedet (eller målet eller destinationen), men de kan også indeholde ikke-rettet (tovejs eller refleksive) kanter.
Noder og kanter, samlet kaldet elementer, har attributter. Disse attributter kan være dataværdier eller etiketter (tags). Værdier for egenskaber kan ikke være elementer i grafer, og de kan heller ikke være helgrafer: disse begrænsninger tvinger bevidst en ren adskillelse mellem topologien i en graf og de attributter, der bærer dataværdier i forbindelse med en graftopologi. Ejendomsgrafdatamodellen forhindrer derfor bevidst indlejring af grafer eller behandling af noder i en graf som kanter i en anden. Hver egenskabsgraf kan have et sæt etiketter og et sæt egenskaber, der er knyttet til grafen som helhed.
Nuværende grafdatabaseprodukter og -projekter understøtter ofte en begrænset version af modellen beskrevet her. For eksempel tvinger Apache Tinkerpop hver knude og hver kant til at have en enkelt etiket; Cypher tillader noder at have nul til mange etiketter, men relationer har kun en enkelt etiket (kaldet en reltype). Neo4j's database understøtter udokumenterede grafegenskaber, Tinkerpop har grafværdier, der spiller den samme rolle, og understøtter også "metaproperties" eller egenskaber på egenskaber. Oracle's PGQL understøtter nul til mange labels på noder og på kanter, mens SQL / PGQ understøtter en til mange labels for hver slags element. Den NGSI-LD informationsmodel specificeret af ETSI er et forsøg på formelt specificerer ejendom grafer, med node og relationer (kant) typer, der kan spille rollen som etiketter i tidligere nævnte modeller og understøtter semantisk henvisninger ved at arve klasser i delte ontologier .
GQL-projektet vil definere en standard datamodel, som sandsynligvis vil være superset af disse varianter, og i det mindste vil den første version af GQL sandsynligvis tillade leverandører at beslutte om kardinaliteterne for etiketter i hver implementering, ligesom SQL / PGQ , og at vælge, om de vil støtte ikke-rettet forhold.
Yderligere aspekter af ERM- eller UML-modellerne (som generalisering eller undertypning eller kardinaliteter for enheder eller forhold) kan fanges af GQL-skemaer eller -typer, der beskriver mulige forekomster af den generelle datamodel.
WG3: Udvidelse af SQL og oprettelse af GQL
GQL-projektet har en fire-årig tidsperiode. Syv nationale standardiseringsorganer (USA, Kina, Korea, Holland, Det Forenede Kongerige, Danmark og Sverige) har nomineret nationale fageksperter til at arbejde på projektet, der gennemføres af arbejdsgruppe 3 (databasesprog) i ISO / IEC JTC 1's Underudvalg 32 (Data Management and Interchange), normalt forkortet som ISO / IEC JTC 1 / SC 32 WG3 , eller bare WG3 for kort. WG3 (og dets direkte forgængerkomiteer inden for JTC 1) har været ansvarlig for SQL-standarden siden 1987.
Udvidelse af eksisterende sprog til grafforespørgsler
GQL-projektet trækker på flere kilder eller input, især eksisterende industrielle sprog og et nyt afsnit af SQL-standarden. I forberedende diskussioner inden for WG3 blev der præsenteret undersøgelser af historikken og det sammenlignende indhold af nogle af disse input. GQL vil være et deklarativt sprog med sin egen distinkte syntaks, der spiller en lignende rolle som SQL i opbygningen af en databaseapplikation. Der er defineret andre grafforespørgselssprog, der tilbyder direkte proceduremæssige funktioner såsom forgrening og looping (Apache Tinkerpop's Gremlin,) og GSQL, hvilket gør det muligt at krydse en graf iterativt for at udføre en klasse af grafalgoritmer, men GQL vil ikke direkte indarbejde sådan funktioner. Imidlertid er GQL tænkt som et specifikt tilfælde af en mere generel klasse af gravesprog, som vil dele et graftypesystem og en kaldende grænseflade til procedurer, der behandler grafer.
SQL / PGQ-egenskabsgrafforespørgsel
Tidligere arbejde af spejllegemer WG3 og SC32, især i INCITS DM32, har hjulpet med at definere en ny planlagt del 16 af SQL Standard, som gør det muligt at kalde en skrivebeskyttet grafforespørgsel inde i en SQL SELECT-sætning, der matcher et grafmønster ved hjælp af syntaks, som er meget tæt på Cypher, PGQL og G-CORE, og returnerer en tabel med dataværdier som resultat. SQL / PGQ indeholder også DDL for at tillade, at SQL-tabeller kortlægges til et diagramvisningsskemaobjekt med noder og kanter tilknyttet sæt etiketter og sæt dataegenskaber. GQL-projektet koordinerer tæt med SQL / PGQ "projektsplit" af (udvidelse til) ISO 9075 SQL og de tekniske arbejdsgrupper i USA (INCITS DM32) og på internationalt niveau (SC32 / WG3) har flere ekspertbidragere, som arbejde på begge projekter. GQL-projektforslaget kræver tæt tilpasning af SQL / PGQ og GQL, hvilket indikerer, at GQL generelt vil være et supersæt af SQL / PGQ.
Cypher
Cypher er et sprog, der oprindeligt blev designet af Andrés Taylor og kolleger hos Neo4j Inc., og først implementeret af dette firma i 2011. Siden 2015 er det gjort tilgængeligt som en open source-sprogbeskrivelse med grammatikværktøj, en JVM -frontend, der analyserer Cypher forespørgsler og et teknologikompatibilitetssæt (TCK) med over 2000 testscenarier ved hjælp af agurk til implementering af sprogportabilitet. TCK afspejler sprogbeskrivelsen og en forbedring af tidsmæssige datatyper og funktioner dokumenteret i et Cypher Improvement Proposal.
Cypher tillader oprettelse, læsning, opdatering og sletning af grafelementer og er et sprog, der derfor kan bruges til analysemotorer og transaktionsdatabaser.
Forespørgsel med visuelle sti- mønstre
Cypher bruger kompakte mønstre med fast og variabel længde, der kombinerer visuelle repræsentationer af knudepunkter og forhold (kant) topologier med etiketeksistens og egenskabsværdipræikater. (Disse mønstre kaldes normalt " ASCII-kunst " -mønstre og opstod oprindeligt som en måde at kommentere programmer, der brugte en graf-API på et lavere niveau.) Ved at matche et sådant mønster mod grafdataelementer kan en forespørgsel udtrække referencer til noder , relationer og stier af interesse. Disse referencer udsendes som en "bindingstabel", hvor kolonnenavne er bundet til et multisæt af grafelementer. Navnet på en kolonne bliver navnet på en "bindingsvariabel", hvis værdi er en specifik grafelementreference for hver række i tabellen.
For eksempel MATCH (p:Person)-[:LIVES_IN]->(c:City) genererer et mønster en output-tabel med to søjler. Den første navngivne kolonne p indeholder henvisninger til noder med en etiket Person . Den anden navngivne kolonne c indeholder henvisninger til noder med en etiket City , der angiver den by, hvor personen bor.
De bindende variabler p og c kan derefter derefereret at få adgang til ejendommen værdier forbundet med elementerne ved en variabel nævnt. Eksemplet på forespørgsel kan afsluttes med a RETURN , hvilket resulterer i en komplet forespørgsel som denne:
MATCH (p:Person)-[:LIVES_IN]->(c:City)
RETURN p.first_name, p.last_name, c.name, c.state
Dette ville resultere i en endelig tabel med fire søjler, der viser navnene på beboerne i de byer, der er gemt i grafen.
Mønsterbaserede forespørgsler er i stand til at udtrykke sammenføjninger ved at kombinere flere mønstre, der bruger den samme bindingsvariabel til at udtrykke en naturlig sammenføjning ved hjælp af MATCH klausulen:
MATCH (p:Person)-[:LIVES_IN]->(c:City), (p:Person)-[:NATIONAL_OF]->(EUCountry)
RETURN p.first_name, p.last_name, c.name, c.state
Denne forespørgsel returnerer kun EU-statsborgeres boligområde.
En ydre sammenføjning kan udtrykkes ved 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
Denne forespørgsel returnerer hver persons bopæl i grafen med oplysninger om beboelse og, hvis en EU-borger, hvilket land de kommer fra.
Forespørgsler er derfor i stand til først at projicere en undergraf af den graf, der indtastes i forespørgslen, og derefter udpakke de dataværdier, der er knyttet til denne undergraf. Dataværdier kan også behandles af funktioner, herunder aggregeringsfunktioner, hvilket fører til projicering af beregnede værdier, der gengiver informationen, der holdes i den projicerede graf på forskellige måder. Efter ledelsen af G-CORE og Morpheus sigter GQL mod at projicere undergraferne defineret ved matchende mønstre (og grafer derefter beregnet over disse undergrafer) som nye grafer, der skal returneres af en forespørgsel.
Mønstre af denne art er blevet udbredt i forespørgselssprog for egenskabsgraf og er grundlaget for, at det avancerede mønsterundersprog defineres i SQL / PGQ, som sandsynligvis bliver en delmængde af GQL-sproget. Cypher bruger også mønstre til indsættelse og modifikationsklausuler ( CREATE og MERGE ), og der er fremsat forslag i GQL-projektet til indsamling af node- og kantmønstre til beskrivelse af graftyper.
Cypher-implementeringer
Cypher er implementeret i Neo4j's database, i SAPs HANA Graph, af Redis Graph., Af Cambridge Semantics 'Anzograph, af Bitnine's AgensGraph, af Memgraph og i open source-projekter Cypher for Gremlin vedligeholdt af Neueda Labs i Riga og Cypher for Apache Spark (nu omdøbt til Morpheus) såvel som i forskningsprojekter som Cypher.PL og Ingraph. Cypher som sprog styres som openCypher-projektet af et uformelt samfund, der har afholdt fem openCypher Implementers 'møder ansigt til ansigt siden februar 2017.
Cypher 9 og Cypher 10
Den nuværende version af Cypher (inklusive den tidsmæssige udvidelse) kaldes Cypher 9. Forud for GQL-projektet var det planlagt at oprette en ny version, Cypher 10 [ REF HEADING NEDER ], der ville omfatte funktioner som skema og komponerbare grafforespørgsler og synspunkter. De første designs til Cypher 10, herunder grafkonstruktion og projektion, blev implementeret i Cypher for Apache Spark-projektet startende i 2016.
PGQL
PGQL er et sprog designet og implementeret af Oracle Inc., men gjort tilgængeligt som en open source-specifikation sammen med JVM-parsingssoftware. PGQL kombinerer velkendt SQL SELECT-syntaks inklusive SQL-udtryk og resultatbestilling og aggregering med et mønster, der matcher et sprog, der minder meget om Cypher's. Det gør det muligt at forespørge specifikationen af grafen og inkluderer en mulighed for makroer til at fange "mønstervisninger" eller navngivne undermønstre. Det understøtter ikke indsættelse eller opdatering af operationer, der primært er designet til et analysemiljø, såsom Oracles PGX-produkt. PGQL er også implementeret i Oracle Big Data Spatial and Graph og i et forskningsprojekt, PGX.D / Async.
G-CORE
G-CORE er et forskningssprog designet af en gruppe akademiske og industrielle forskere og sprogdesignere, der trækker på funktioner fra Cypher, PGQL og SPARQL . Projektet blev gennemført i regi af Linked Data Benchmark Council (LDBC), der startede med dannelsen af en Graph Query Language-taskforce i slutningen af 2015, hvor størstedelen af arbejdet med papirskrivning fandt sted i 2017. G-CORE er en komponerbart sprog, der lukkes over grafer: grafindgange behandles for at oprette en grafoutput ved hjælp af graffremskrivninger og grafsætningsoperationer til at konstruere den nye graf. G-CORE-forespørgsler er rene funktioner i forhold til grafer uden nogen bivirkninger, hvilket betyder, at sproget ikke definerer operationer, der muterer (opdaterer eller sletter) lagrede data. G-CORE introducerer visninger (navngivne forespørgsler). Det indeholder også stier som elementer i en graf ("stier som førsteklasses borgere"), som kan forespørges uafhængigt af projicerede stier (som beregnes ved forespørgselstid over node- og kantelementer). G-CORE er delvist implementeret i open source forskningsprojekter i LDBC GitHub organisationen.
GSQL
GSQL er et sprog designet til TigerGraph Inc.s ejendomsgrafdatabase. Siden oktober 2018 har TigerGraph-sprogdesignere promoveret og arbejdet med GQL-projektet. GSQL er et komplet Turing-sprog, der inkorporerer proceduremæssig strømningskontrol og iteration og en facilitet til at samle og ændre beregnede værdier tilknyttet en programudførelse for hele grafen eller for elementer i en graf kaldet akkumulatorer. Disse funktioner er designet til at gøre det muligt at kombinere iterative grafberegninger med udforskning og hentning af data. GSQL-grafer skal beskrives med et skema over hjørner og kanter, der begrænser alle indsættelser og opdateringer. Dette skema har derfor den lukkede verdensegenskab ved et SQL-skema, og dette aspekt af GSQL (også afspejlet i designforslag, der stammer fra Morpheus-projektet) foreslås som et vigtigt valgfrit træk ved GQL.
Vertexes og kanter er navngivet skemaobjekter, der indeholder data, men definerer også en imputeret type, ligesom SQL-tabeller er databeholdere med en tilknyttet implicit række. GSQL-grafer er derefter sammensat af disse top- og kantsæt, og flere navngivne grafer kan omfatte det samme toppunkt eller kantsæt. GSQL har udviklet nye funktioner siden udgivelsen i september 2017, især med introduktion af kantmønster med variabel længde ved hjælp af en syntaks relateret til det, der ses i Cypher, PGQL og SQL / PGQ, men også tæt i stil med de mønstre med fast længde, der tilbydes af Microsoft SQL / Server-graf
GSQL understøtter også konceptet med multigrafier, der tillader delmængder af en graf at have rollebaseret adgangskontrol. Multigrafier er vigtige for grafer i virksomhedsskala, der har brug for finkornsadgangskontrol for forskellige brugere.
Morpheus: flere grafer og komponerbare grafforespørgsler i Apache Spark
Opencypher Morpheus-projektet implementerer Cypher til Apache Spark-brugere. Begyndende i 2016 løb dette projekt oprindeligt sammen med tre relaterede indsatser, hvor Morpheus-designere også deltog: SQL / PGQ, G-CORE og design af Cypher-udvidelser til forespørgsel og konstruktion af flere grafer. Morpheus-projektet fungerede som en testbed for udvidelser til Cypher (kendt som "Cypher 10") i de to områder af grafen DDL og udvidelser med forespørgselssprog.
Graf DDL-funktioner inkluderer
- definition af egenskabsgrafvisninger over JDBC- forbundne SQL-tabeller og Spark DataFrames
- definition af grafskemaer eller typer defineret ved at samle node- og kanttypemønstre med undertypning
- begrænse indholdet af en graf ved hjælp af et lukket eller fast skema
- oprettelse af katalogposter for flere navngivne grafer i et hierarkisk organiseret katalog
- graf datakilder for at danne et sammensat, heterogent katalog
- oprettelse af katalogposter for navngivne forespørgsler (visninger)
Grafforespørgsel inkluderer sprogudvidelser
- grafforening
- projektion af grafer beregnet ud fra resultaterne af mønsteroverensstemmelser på flere inputgrafer
- understøttelse af tabeller (Spark DataFrames) som input til forespørgsler ("køreborde")
- visninger, der accepterer navngivne eller projicerede grafer som parametre.
Disse funktioner er blevet foreslået som input til standardiseringen af ejendomsgrafforespørgselssprog i GQL-projektet.