createDeviceEngine

语法

createDeviceEngine(name, metrics, dummyTable, outputTable, keyColumn, [keepOrder])

详情

创建一个设备引擎,该引擎会将注入输入表的数据,通过 GPU 加速完成 metrics 中定义的计算,将结果输出到输出表。

参数

name 字符串标量,表示设备引擎的名称,作为其在一个数据节点/计算节点上的唯一标识。可包含字母,数字和下划线,但必须以字母开头。

metrics 以元代码的形式表示计算公式。有关元代码的详情可参考 Metaprogrammingmetrics 支持 GPU 加速的函数包括:
  • 单目基础运算操作:not, neg, cast, log, log2, log10 ,log1p ,abs, sign

  • 双目基础运算操作:add, sub, mul, div, ratio, pow, lt, gt, eq, ne, and, or

  • 双目整型运算(其中 mod 支持 BOOL 类型,其他只支持数值类型):mod, bitAnd, bitOr, bitXor, lshift, rshift

  • 三目运算:iif

  • 单目滑动窗口函数:mavg, msum, mcount, mprod, mvar, mvarp, mstd, mstdp, mmin, mmax, mimin, mimax, sma, wma, mfirst, mlast, mrank, mmaxPositiveStreak, mmed, mpercentile, mmad

  • 双目滑动窗口函数:mcorr, mbeta, mcovar, mwsum, mwavg

  • 其他滑动窗口函数:linearTimeTrend,mslr

  • 单目累计窗口函数:cumsum, cumprod, cummin, cummax, cumvar, cumvarp, cumstd, cumstdp

  • 序列相关函数:deltas, ratios, ffill, move, prev, percentChange, iterate, prevState

dummyTable 一个表对象,注入数据的结构与其 schema 一致。可以含有数据,亦可为空表。

outputTable 计算结果的输出表,可以是内存表或分布式表。使用 createDeviceReactiveEngine函数之前,需要将输出表预先设立为一个空表,并指定各列列名以及数据类型。DeviceReactiveEngine会将计算结果注入该表。

keyColumn 字符串标量或向量表示分组列名。计算将在各分组进行。

keepOrder 可选参数,表示输出表数据是否按照输入时的顺序排序。默认值为 false。设置 keepOrder = true,表示输出表按照输入时的顺序排序; keepOrder = false,表示输出表按照分组列排序。

例子

// 创建引擎
dummyTb = table(1:0, `sym`id`value, [SYMBOL,INT,DOUBLE])
result = table(100:0, `sym`id`value`factor, [SYMBOL,INT,DOUBLE,DOUBLE])
de = createDeviceEngine(name="myDe", metrics=[<id>,<value>,<mavg(value,5)>], dummyTable=dummyTb, outputTable=result, keyColumn="sym")

// 准备数据 
data1 = table(take("A", 100) as sym, 1..100 as id, double(10+1..100) as value)
data2 = table(take("B", 100) as sym, 1..100 as id, double(20+1..100) as value)
data3 = table(take("C", 100) as sym, 1..100 as id, double(30+1..100) as value)
data = data1.unionAll(data2).unionAll(data3).sortBy!(`id)

// 写入数据
de.append!(data)
select top 10 * from result 
sym id value factor
A 1 11
A 2 12
A 3 13
A 4 14
A 5 15 13
A 6 16 14
A 7 17 15
A 8 18 16
A 9 19 17
A 10 20 18