replay函数多对多回放时replayRate=200000, absoluteRate=true时是每个表每秒回放20w条还是多个表一共20w条?每秒每张表回放多少条?

如题,我试了以下的回放,两张表总共200w行,一共回放了10s,所以应该是两张表每秒一共回放20w条吧,但是每秒每张表回放多少条是怎么确定的?

replayRate =200000, absoluteRate =true

//unsubscribeTable(tableName=`trades, actionName = `engine1)
//dropStreamTable(`trades)

n=5000000
sym = rand(symbol(`IBM`APPL`MSFT`GOOG`GS),n)
date=take(2012.06.12..2012.06.16,n)
time=rand(13:30:11.008..13:30:11.012,n)
volume = rand(100,n)
t=table(sym,date,time,volume)
if(existsDatabase("dfs://test_stock")){
dropDatabase("dfs://test_stock")
}
db=database("dfs://test_stock",VALUE,2012.06.12..2012.06.16)
trades=db.createPartitionedTable(t,`trades,`date)
trades.append!(t)

share streamTable(100:0,`sym`date`time`volume,[SYMBOL,DATE,TIME,INT]) as st1
share streamTable(100:0,`sym`date`time`volume,[SYMBOL,DATE,TIME,INT]) as st2

ds1=replayDS(sqlObj=<select * from trades where date=2012.06.12>,dateColumn=`date,timeColumn=`time,timeRepartitionSchema=[13:30:11.008,13:30:11.010,13:30:11.013])
ds2=replayDS(sqlObj=<select * from trades where date=2012.06.16>,dateColumn=`date,timeColumn=`time,timeRepartitionSchema=[13:30:11.008,13:30:11.010,13:30:11.013])

timer replay(inputTables=[ds1,ds2],outputTables=[st1,st2],dateColumn=`date,timeColumn=`time, replayRate =200000, absoluteRate =true);       //将ds1和ds2分别回放到st1和st2中
select * from st1;
请先 登录 后评论

1 个回答

Yating Xie
replay(inputTables=[ds1,ds2],outputTables=[st1,st2],dateColumn=`date,timeColumn=`time, replayRate =200000, absoluteRate =true)

是的,这样设置的话是每秒两张表一共回放200000条数据。每秒每张表分别回放多少条数据取决于原始数据的分布,并不是一个固定的值。


举个例子:

表1的数据时间戳分别是13:30:00,13:30:02,13:30:02,13:30:02,13:30:06 ...;表2的数据的时间戳是13:30:02,13:30:03,13:30:05 ... 

如果要求每秒回放5行,会逐条比较两个表的时间戳,选定回放时间戳最小的5条,最终,本秒的结果效果是表1的前4条为一批被写入目标表1,表2的第1条被写入目标表2

请先 登录 后评论