在monetdb中创建嵌入式R窗口函数

时间:2016-02-23 15:06:51

标签: r monetdb

我试图在monetdb中使用嵌入式R创建一个窗口聚合函数。我使用的功能是:

CREATE AGGREGATE r_sw(val double, part varchar(255), endtime timestamp, starttime timestamp) RETURNS double LANGUAGE R {
library(data.table)
library(zoo)
DT=data.table(ag=aggr_group,pa=part,va=val,et=endtime,st=starttime)
setorder(DT,pa,et)
DT[, o:=mapply(function(x,y) DT[(et>=x & pa==y),.N], DT$st, DT$pa)]
as.data.frame(DT[,.(s:=rollapply(va,o,sum), by=pa)]$s)
};

当尝试从该功能中选择时,我收到错误声称聚合不存在:

Error: SELECT: no such operator 'r_sw'
SQLState:  22000
ErrorCode: 0

我认为这是我传递的参数数量的问题,与R代码无关。我创建了具有2个参数的聚合,这些参数完美地工作,但是3个或更多似乎导致了问题。我还需要做些什么才能让它发挥作用吗?

(编辑)重现的步骤:

CREATE TABLE mytable (myval double, mypart varchar(255), myend timestamp, mystart timestamp);
INSERT INTO mytable VALUES (10,'A','2016-01-01 00:00:00','2016-01-07 00:00:00');
INSERT INTO mytable VALUES (200,'A','2016-01-04 00:00:00','2016-01-12 00:00:00');
SELECT mypart, r_sw(myval,mypart,myend,mystart) from mytable GROUP BY mypart;

0 个答案:

没有答案