如何在AnzoGraph中使用窗口聚合来随时间运行总计或聚合

AnzoGraph是一个图OLAP数据库,支持窗口聚合功能,允许用户在一个查询中计算特定分区或时间窗口的聚合值。本文介绍了窗口聚合的概念,如AVG、COUNT、SUM等,并展示了如何在SPARQL查询中应用窗口聚合,提供了电子商务销售分析的示例,展示了如何进行月度销售总计和运行总计等分析。
摘要由CSDN通过智能技术生成

AnzoGraph是一个原生的大规模并行处理(MPP)图OLAP数据库,专门用于交互式数据仓库分析和图形分析。在我们之前的文章中,我们向您展示了AnzoGraph如何不仅支持语义图,还使用RDF *提出的W3C标准标记属性图。本文将向您展示AnzoGraph如何为窗口聚合等高级分析提供内置支持,这使得用户只需使用一个查询即可在结果集的特定分区或窗口上计算多个聚合值,而无需编写和提交多个冗余查询以获得相同的结果。

与对结果进行分组并返回单个值的分组聚合函数不同,窗口聚合为指定窗口中的每一行返回一个值。例如,使用分组的聚合SUM函数来累计一年中销售的票证总数,将返回一个值:当年销售的票证总数。但是,通过使用SUM 窗口聚合,结果可以按月分区,以便您的单个查询返回12个值:一年中每个月销售的票证总和。

本文介绍了受支持的窗口聚合,解释了如何将它们合并到AnzoGraph中的SPARQL查询中,并提供了一些示例查询。

AnzoGraph内置窗口聚合

AnzoGraph提供以下内置聚合和排名功能:

  • AVG:计算输入表达式值的平均值。
  • COUNT:计算表达式定义的结果数。
  • MAX:返回输入表达式值的最大值。
  • MIN:返回输入表达式值的最小值。
  • NTILE:将分区中的行划分为指定数量的已排名组,并返回每个值所属的组。
  • PERCENTILE:与使用NTILE(100)一样,此函数将分区中的行划分为100个排名组,并返回每个值所属的组。
  • PRODUCT:将输入表达式值相乘并返回乘积。
  • QUARTILE:与使用NTILE(4)一样,此函数将分区中的行划分为4个排序组,并返回每个值所属的组。
  • ROW_NUMBER:为分区中的每一行分配唯一的数字。
  • SUM:返回输入表达式值的总和。

窗口聚合SPARQL语法

在SPARQL查询中合并窗口聚合时,请使用以下语法。语法下面的列表描述了每个选项:

FUNCTION_NAME  表达式1  OVER  
  [  PARTITION  BY  表达式2  ]  |
  [  ORDER  BY  expression3  [  frame_clause  ]  ]
AS  ?变量 

FUNCTION_NAME(表达式1)

窗口聚合名称和表达式,用于生成要操作的值。

过度()

必需的OVER()关键字将窗口聚合与其他聚合函数区分开来。

PARTITION BY表达式2

此可选子句形成行组,将结果集划分为分区。如果不包含PARTITION BY子句,则分区将成为WHERE子句标识的整个结果集。当包含PARTITION BY时,系统会为每个分区中的行计算指定的函数。

ORDER BY表达式3

此可选子句定义每个分区中的行的顺序或顺序。

frame_clause

可选的frame子句定义窗口框架,该框架指定分区中与当前行组合的行。窗框有两种类型:

具有两个移动端点的固定框架,其中每个行在窗口框架在分区中向前滑动时成为当前行。这种类型的帧非常适合计算移动时间帧上的聚合。

具有一个锚定端点的调整大小框架,其中一行是固定端点,并且框架向上(向前)或向下(向下)调整大小。这种类型的框架非常适合计算运行总计。

所有窗口框架的参考点是当前行。frame子句可以是以下选项之一:

[ ROWS ] frame_start
[ ROWS ] BETWEEN frame_start AND frame_end
 

其中frame_start是以下选项之一:

UNBOUNDED PRECEDING
positive_value PRECEDING
CURRENT ROW
positive_value FOLLOWING
 

frame_end是以下选项之一:

positive_value PRECEDING
CURRENT ROW
positive_value FOLLOWING
UNBOUNDED FOLLOWING
 

如果未指定frame子句,系统会将窗口框架视为无界:在无界预定和无限制下行之间行。

AnzoGraph窗口聚合查询示例

下面的示例查询分析了虚构的电子商务网站的销售活动,我们称之为“Tickit”,人们购买和出售体育赛事,演出和音乐会的门票。数据包括人员,地点,类别,日期,事件,列表和销售类别。注意:Tickit示例数据包含在AnzoGraph的安装中,也可在Amazon S3上使用。

以下简单查询在Tickit图中汇总了每月的事件数:

SELECT  ?month  COUNT ?event  OVER  PARTITION  BY  ?month  AS  ?events 
FROM  <tickit>
在哪里 {
 {  SELECT  ?event  MONTH ?date  AS  ?month 
   在哪里 {
      ?sale  <dateid>  ?dateid  
      ?dateid  <caldate>  ?date  
      ?sale  <eventid>  ?eventid  
      ?eventid  <eventname>  ?event  
  }
 }
}
ORDER  BY  ?月
 |  事件
------ + --------
1      |  26117
1      |  26117
2      |  30911
2      |  30911
3      |  33932
3      |  33932
4      |  32196
4      |  32196
8      |  34315
8      |  34315
12     |  11648
12     |  11648

此示例查询返回每个销售人员来自事件“Gypsy”的总销售额的百分比:

SELECT  ?event_name  ?fname  ?lname
?美元 *  100 0 / SUM ?美元 OVER PARTITION  BY  ?事件  ?percent_of_sales 
FROM  <tickit>
在哪里 {
  ?sale  <eventid>  ?活动 
  ?event  <eventname>  ?event_name  
  ?sale  <卖方>  ?销售人员 
  ?sale  <pricepaid>  ?美元 
  ?salesperson  <firstname>  ?fname  
  ?salesperson  <lastname>  ?lname  
  FILTER ?event_name  =  “Gypsy” 
}
ORDER  BY  ?event_name  desc ?percent_of_sales 
event_name  |  fname    |  lname      |  percent_of_sales
----------- --------- + + + ----------- ---------------- - 
吉普赛      |  佐伊     |  索萨      |  100 000000
吉普赛      |  Xaviera  |  雅各布森  |  50 941458
吉普赛      |  Brianna  |  麦克法兰 |  50 507614
吉普赛      |  Alexa    |  贝尔德     |  45 792564
吉普赛      |  Roanna   |  木材      |  42 040816
吉普赛      |  科莱特 |  粘土      |  36 938776
吉普赛      |  Amela    |  霍尔曼    |  35 727660
吉普赛      |  奥布里  |  特雷尔   |  32 245681
吉普赛      |  布鲁诺   |  格里芬   |  31 813858
吉普赛      |  达米安  |  伯杰    |  31 245923
吉普赛      |  Zelenia  |  伍兹     |  31 161644
吉普赛      |  Imogene  |  麦克莱恩    |  31 000483
吉普赛      |  海伦   |  哈尼     |  30 295666
吉普赛      |  西拉斯   |  永利      |  28 730306
吉普赛      |  Caryn    |  海丝特    |  28 714012
吉普赛      |  卡姆登  |  霍恩     |  27 253097
吉普赛      |  阿达拉   |  伯里斯    |  26 809349
吉普赛      |  拉雅    |  弗莱明   |  26 790955

此示例查询示例Tickit数据集,以返回为“Mamma Mia!”事件销售的票数的运行总计:

SELECT  ?event  ?month  SUM ?qty  OVER  PARTITION  BY  ?month  ORDER  BY  ?event
ROWS  BETWEEN  UNBOUNDED  PRECEDING  AND  CURRENT  ROW  AS  ?票
FROM  <tickit>
在哪里 {
  ?s  <qtysold>  ?数量 
  ?s  <eventid>  ?eventid  
  ?eventid  <eventname>  ?event  
  ?s  <dateid>  ?date  
  ?date  <month>  ?month  
  过滤器?event = “Mamma Mia!” 
}
ORDER  BY  ?门票
限制 500
事件      |   |  门票
----------- + ------- + ---------
妈妈咪 呀! |  五月   |  1
妈妈咪 呀! |  JAN    |  1
妈妈咪 呀! |  SEP    |  1
妈妈咪 呀! |  APR    |  2
妈妈咪 呀! |  JAN    |  2
妈妈咪 呀! |  AUG    |  2
妈妈咪 呀! |  JUN    |  2
妈妈咪 呀! |  五月   |  2
妈妈咪 呀! |  NOV    |  2
妈妈咪 呀! |  SEP    |  3
妈妈咪 呀! |  NOV    |  3
妈妈咪 呀! |  FEB    |  4
妈妈咪 呀! |  APR    |  4
妈妈咪 呀! |  JAN    |  85
妈妈咪 呀! |  JUL    |  85
妈妈咪 呀! |  MAR    |  85
妈妈咪 呀! |  JUN    |  85
妈妈咪 呀! |  OCT    |  85
妈妈咪 呀! |  NOV    |  85
妈妈咪 呀! |  FEB    |  86
妈妈咪 呀! |  APR    |  86
...

与可能需要您编写多个查询以获得数据集中值的整体视图的其他图形数据库不同,AnzoGraph的窗口聚合使用户能够运行单个查询,该查询返回有关数据模式的详细信息,例如运行总计或更改随着时间的推移。除了窗口聚合之外,AnzoGraph还包含一个包含其他类似SQL和Microsoft Excel的函数的丰富库。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值