一直引人注目的实时图数据库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,能够进入官网学习了解。排序