replayDS

语法

replayDS(sqlObj, [dateColumn], [timeColumn], [timeRepartitionSchema])

参数

sqlObj 表示 SQL 查询的元代码。SQL 查询的表对象是 DFS 表,且至少有一个分区列为时间类型。

dateColumn 列必须为 SQL 查询的表对象的时间类型列,一般为 DATE 类型,亦可为 MONTH 类型或其它时间类型。作为数据的排序依据。dateColumn 列必须为表的分区列之一,系统将根据 dateColumn 列的分区粒度划分数据源,如 dateColumn 列按天进行分区,则数据源也按天进行划分。

timeColumn 列必须为 SQL 查询的表对象的时间列,作为数据的排序依据。若 dateColumn 为 DATE 类型时,可以指定 timeColumn 为 SECOND, TIME 或 NANOTIME 类型的列作为第二排序列。此外,配合 timeRepartitionSchema 参数,timeColumn 列也可以作为数据源划分依据。

注意:

  • dateColumn 和 timeColumn 暂不支持 DATEHOUR 类型的时间列。

  • 如果没有指定 dateColumn,原数据表的第一列将会作为 dateColumn。

timeRepartitionSchema 时间类型的向量。如果指定了 timeColumn,timeRepartitionSchema 可用于划分更小粒度的数据源。如果 timeRepartitionSchema 为 [t1, t2, t3],均为 TIME 类型,那么将每天的数据进一步划分为 4 个数据源:[00:00:00.000,t1), [t1,t2), [t2,t3) 和 [t3,23:59:59.999)。

详情

将一个SQL表达式,根据时间维度划分为多个数据源,作为 replay 函数的输入,逐一进行回放。时间维度既可以为 DFS 表的时间列的分区粒度,也可以是基于该分区粒度的进一步的划分(由参数 timeColumn 与 timeRepartitionSchema 决定)。返回一个由数据源列表(类型为 ANY VECTOR)。

若要回放 DFS 表中的数据,只能使用 ReplayDS 函数配合 replay 函数进行。

例子

例 1. 回放一张表

$ n=int(60*60*6.5)
$ sym = take(take(`IBM,n).join(take(`GS,n)), n*2*3)
$ date=take(2021.01.04..2021.01.06, n*2*3).sort!()
$ time=take(09:30:00..15:59:59,n*2*3)
$ volume = rand(100, n*2*3)
$ t=table(sym,date,time,volume)
$ if(existsDatabase("dfs://test_stock")){
$ dropDatabase("dfs://test_stock")
$ }
$ db1=database("",RANGE, 2021.01.04..2021.01.07)
$ db2=database("",VALUE,`IBM`GS)
$ db=database("dfs://test_stock",COMPO,[db1, db2])
$ trades=db.createPartitionedTable(t,`trades,`date`sym)
$ trades.append!(t);
$ ds = replayDS(sqlObj=<select * from loadTable(db, `trades)>, dateColumn=`date, timeColumn=`time)
$ ds.size();
3

$ ds = replayDS(sqlObj=<select * from loadTable(db, `trades)>, dateColumn=`date, timeColumn=`time, timeRepartitionSchema=[11:30:00, 14:00:00])
$ ds.size();
9