如何在横截面引擎中定时刷新股票价格?
分段式引擎的聚合器表可以是结果表。如果我想定期更新股票的价格,我应该怎么做?
发布于 2021-09-10 02:25:34
DolphinDB中的横截面表可以为聚合计算提供中间数据表,但横截面表也可以是最终结果。例如,我们需要定期刷新某只股票的最新交易价格。传统的想法是从实时交易表中按代码筛选股票,并检索最后一条记录。随着时间的推移,交易表的数据量会迅速增加。如果您经常在查询中执行此操作,无论从系统的资源消耗还是查询的性能来看,这都不是最佳实践。截面表始终只保存所有股票的最新交易数据,数据量稳定,非常适合这种定时轮询的场景。要使用截面表作为结果,需要在创建截面表时清空metrics和outputTable这两个参数。示例代码如下:
def clearEnv(){
unsubscribeTable(server="", tableName="trades", actionName="tradesCrossAggregator") dropAggregator("CrossSectionalDemo")
undef("trades", SHARED)
undef("outputTable", SHARED)
}
def writeData(n, trades){
for (i in 0:n) {
timev = take(now(), 3)
symv = rand(`A`B`C, 3)
pricev = rand(10.0, 3)
qtyv = rand(10 20 30 , 3)
insert into trades values(timev, symv, pricev,qtyv)
sleep(1000)
}
}
login("admin", "123456")//clearEnv()//undef all
share(streamTable(10:0, `time`sym`price`qty, [TIMESTAMP, SYMBOL, DOUBLE, INT]), "trades") share(table(1:0, `updateTime`maxQty`maxDollarVolume`sumDollarVolume`count, [TIMESTAMP, INT, DOUBLE, DOUBLE, INT]), "outputTable") tradesCrossAggregator=createCrossSectionalAggregator(name="CrossSectionalDemo", dummyTable=objByName("trades"), keyColumn="sym", triggeringPattern="perRow")subscribeTable(server="", tableName="trades", actionName="tradesCrossAggregator", offset=-1, handler=append!{tradesCrossAggregator}, msgAsTable=true)
submitJob("jobId","writeDataTrades",writeData{20, objByName("trades")})
select * from tradesCrossAggregatorhttps://stackoverflow.com/questions/68174368
复制相似问题