Graph Query Language(GQL,圖形查詢語言)是由同時維護SQL標準的國際工作組開發和維護的一種新語言。
GQL很大程度上借鑒了現有的語言,主要的靈感來自Cypher(現在實現版本有10多個,包括6個商業產品)、Oracle的PGQL和SQL本身。GQL項目是自SQL之后的第一個ISO/IEC國際標準數據庫語言項目。
今年6月,隸屬ISO/IEC聯合技術委員會1(負責定制IT標準)的全球諸多國家性標準機構開始就GQL項目提案進行表決,有七個國家派出專家參與這項為期四年的項目。在本周投票結束,提案獲得通過。
共有十個國家投出了贊成票,其中包括中國、韓國、瑞典、美國、德國、英國、荷蘭、丹麥、哈薩克斯坦、加拿大和芬蘭。另外有五個國家選擇棄權,其理由是缺乏對該提案作出判斷或發表評論的專門知識。
只有日本投了反對票,它列舉了兩個理由:
現有的語言已經能實現這類需求
具體來說,SQL/Property Graph Query擴展以及SQL標準的其余部分可以滿足需求
為什么我們需要一種特定于圖形的查詢語言?
許多供應商、研究人員和用戶一致認為,可以使用非關系型“圖形原生”存儲和運行時模型來開發圖形數據庫。例如Neo4j的行業領先的圖形數據庫平臺和新的Redis Labs圖形產品。
但是,他們也需要一種類似 Cypher 的語言來支持數據的插入和維護,而不僅僅是數據查詢。對于以圖行為中心的語言來說,SQL不太可能是一個合適的模型,所需的語言是能夠將圖形作為查詢輸入,然后輸出一個圖,就像SQL可以讀取表,并生成實為新表的結果集。
GQL和SQL如何協同工作?
許多支持GQL 提案的公司和國家標準機構并不認為GQL和SQL是競爭對手,而是通過共享的基礎和互操作來相互補充。(其中指的是核心數據類型和表達式的形成方式,以及共享的概念,如目錄中持有的模式對象,以及與用戶/角色相關的會話)。
SQL/PgQ查詢實際上是一個圍繞著一段“proto-gql”的SQL子查詢。下面有一個示例查詢,在今年SIGMOD 大會接近尾聲時,Oracle 的Oskarvanrest為今年7月在阿姆斯特丹舉行的鏈接數據庫基準理事會(Link Database Benchmark Council)會議提出的。
以關鍵字MATCH開頭的紅色部分是模式匹配查詢的一個片段,該查詢非常類似用Cypher或PGQL編寫的查詢。你可能會注意到,它用于引入標簽(如在Creator IS Person 中),以及用于引入主機參數或變量。但是,你也可以在標簽表達式中使用冒號(如果SQL引擎的解析器是智能地),那么與先前存在的“輸入”屬性圖查詢語言的相似性就會更加明顯。
PgQ查詢的其他部分(黑色和綠色)將這個Proto-GQL連接到一個SQL SELECT語句中。表格結果通過Columns子句流到常規SQL查詢中。它們只關注與圖形查詢交互的SQL引擎,GQL本身不會涉及到這種SQL“外部函數接口”。
SQL 生成表,GQL 生成圖
SQL是一種在一個關鍵方面與 cypher 語言大不相同。Cypher 讓用戶在不知道將返回哪些類型的數據的情況下探索其數據圖的結構。它可以讓你進行真正的圖形查詢,其中值得關注不僅僅是值,還包括數據子集的形狀,定義與匹配圖形模式的元素值方面。換句話說,圖查詢針對在一個或多個輸入圖上計算的子圖或投射圖。
GQL將建立在 openCypher Morpheus 的基礎上(它將Cypher引入到Apache Spark),并結合來自LDBC的G-CORE的靈感,為用戶提供了一種組合圖查詢語言,支持所有那些功能,這將使GQL在概念上等同于SQL。
更普遍地說,GQL是一種比SQL更現代的語言,它具有更結構化的類型系統。
GQL項目的工作將于本月晚些時候在坦桑尼亞阿魯沙召開的SQL/GQL標準委員會ISO/IEC JTC 1 SC 32/WG3的下一次會議上全面開始。
目前還無法確定GQL的第一個可實現版本,但很有可能在2020年下半年之前制定某個相當完整的草案。