一直引人注目的實時圖數據庫TigerGraph最近終於出了Developer Edition版本供你們熟悉使用,TigerGraph是使用其本身研發的Gsql來實現各類數據分析,本人也下載試用了一下,感受功能仍是很強大的,在此和你們分享一些使用的技巧。html
TigerGraph下載地址:https://www.tigergraph.com/download/sql
藉着最近世界盃的氛圍,以足球爲內容爲你們舉例實現TigerGraph中的Group By + Order By功能。數據庫
首先,咱們把圖中的頂點分爲三個類型:footballer(球員),club(俱樂部),country(國家)。footballer頂點屬性有:name,age,position。club頂點屬性有:name,city。country頂點屬性有:name,continent。學習
其次,咱們來定義邊的關係:footballer--(belong_to)-->club,club--(in)-->country,footballer--(belongs_to)-->country。舉例:梅西--(屬於)-->(巴塞羅那),巴塞羅那--(屬於)-->西班牙,梅西--(屬於)-->阿根廷。 像這樣的一個圖形,咱們能夠根據實際狀況作不少數據分析,爲了讓你們簡單的理解TigerGraph的Gsql語言,咱們只實現一個簡單的統計功能,分析不一樣年齡的球員數量,並根據年齡倒排序。優化
在Gsql中,是沒有關鍵字GroupBy的,但它提供了不少Accumulators,正是由於這些Accumulators才能使得使用TigerGraph時實現底層的並行機制。這一次咱們首先運用的是GroupByAccum(),它能夠實現咱們比較瞭解的Group By方法。其次,咱們須要使用其中略微複雜的HeapAccum(),它可以爲咱們實現最最關鍵的Order by方法。雖然Gsql有Order By關鍵字,但想要實現Group By以後的排序,咱們目前使用HeapAccum()更合理且更快速。code
實現方法以下:htm
CREATE QUERY groupby(INT num) FOR GRAPH MyGraph { // num參數用於自定義返回結果的數量 TYPEDEF tuple<INT age, INT nums> ageResults; //建立一個元組,用於保存年齡和數量 HeapAccum<ageResults>(num, nums DESC) @@topAgeResults; // 第一個參數設置返回結果的數量,第二個參數用於設定排序的值,並設置正序和倒敘規則 GroupByAccum<INT ages,SumAccum<INT> numt> @@group; // 第一個參數是須要被Group By的值,第二個用於統計Group By值的數量 Footballer = {footballer.*}; // 定義頂點 Result = SELECT f FROM Footballer:f ACCUM @@group += (f.age->1); // ACCUM關鍵字來使用Accumulator //Foreach循環來取Group By的值,經過HeapAccum來最終完成排序 FOREACH g IN @@group DO @@topAgeResults += ageResults(g.ages,g.numt); END; PRINT @@topAgeResults; // 輸出最終排序後的結果 }
TigerGraph的Gsql比起其餘圖數據庫的語言,有其自身的特色,且針對並行運行有着很好的優化。 本文僅僅只是拋磚引玉,想進一步瞭解TigerGraph的Gsql,能夠進入官網學習瞭解。排序