马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一直引人注目的实时图数据库TigerGraph最近终于出了Developer Edition版本供大家熟悉使用,TigerGraph是使用其自己研发的Gsql来实现各种数据分析,本人也下载试用了一下,感觉功能还是很强大的,在此和大家分享一些使用的技巧。 TigerGraph下载地址:https://www.tigergraph.com/download/ 借着最近世界杯的氛围,以足球为内容为大家举例实现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()更合理且更快速。 实现方法如下: [AppleScript] 纯文本查看 复制代码 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,可以进入官网学习了解。 官网Gsql学习网址:https://doc.tigergraph.com/GSQL- ... rying-ORDERBYClause
|