Skip to content

Commit c94695a

Browse files
authored
Dataaccess improvements/fixes (#436)
* add i to available comlumns for aggregations * edit if statements so sublist and postprocessing execute proc side when query is single proc * add postprocessing functionality to gateway autojoin function * revert changes in previous commit * add postprocessing and sublist functionality to gateway for multi proc queries * remove commented out code * fix formatting changes * clarify function comment * fix documentation errors * remove additional lines * change order of execution of sublist and postprocessing * change sublist functionality to sublist from select [x] from * add unit tests * remove empty lines * remove extra comma * condense conditional in processres func * add test for single query to rdb and single query to hdb * remove extra lines at bottom of files * add line in run.sh files to stop dicovery process after running tests * remove unnecessary connections
1 parent 5fe88c4 commit c94695a

17 files changed

Lines changed: 160 additions & 50 deletions

File tree

code/dataaccess/checkinputs.q

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ filldefaulttimecolumn:{[dict]
5353
checkcolumns:{[table;columns;parameter]
5454
if[not all(`~columns)& parameter~`columns;
5555
columns,:();
56-
avblecols:`date,cols table;
56+
avblecols:`i`date,cols table;
5757
if[any not in[columns;avblecols];
5858
badcol:columns where not in[columns;avblecols];
5959
'`$.checkinputs.formatstring[.schema.errors[`checkcolumns;`errormessage];`badcol`tab`parameter!(badcol;table;parameter)]]];};

code/dataaccess/getdata.q

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,13 @@ getdata:{[inputparams]
3939
if[not 0~count (queryparams`ordering);
4040
table:f[table;;queryparams`ordering]/[1;last til count (queryparams`ordering)]];
4141
// rename the columns
42-
result:queryparams[`renamecolumn] xcol table;
43-
if[10b~`sublist`procs in key inputparams;result:select [inputparams`sublist] from result];
44-
// apply post-processing function
45-
if[10b~in[`postprocessing`procs;key inputparams];
46-
result:.eqp.processpostback[result;inputparams`postprocessing];];
42+
result:queryparams[`renamecolumn] xcol table;
43+
// apply post-processing function if called in process or query to single process called from gateway
44+
if[(10b~in[`postprocessing`procs;key inputparams])or((1b~`postprocessing in key inputparams)and(1~count inputparams `procs));
45+
result:.eqp.processpostback[result;inputparams`postprocessing]];
46+
// apply sublist function if called in process or query to single process called from gateway
47+
if[(10b~`sublist`procs in key inputparams)or((1b~`sublist in key inputparams)and(1~count inputparams `procs));
48+
result:(inputparams`sublist) sublist result];
4749
.requests.updatelogger[requestnumber;`endtime`success!(.proc.cp[];1b)];
4850
:result
4951
};

code/gateway/dataaccess.q

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ getdata:{[o]
8080
:.gw.syncexec[(`.dataaccess.buildquery;o);options[`procs]];
8181
:.gw.asyncexec[(`.dataaccess.buildquery;o);options[`procs]]]];
8282
:$[.gw.call .z.w;
83-
//if sync
83+
// if sync
8484
.gw.syncexecjt[(`getdata;o);options[`procs];autojoin[options];options[`timeout]];
8585
// if async
8686
.gw.asyncexecjpt[(`getdata;o);options[`procs];autojoin[options];options[`postback];options[`timeout]]];
@@ -92,8 +92,19 @@ autojoin:{[options]
9292
// if there is only one proc queried output the table
9393
if[1=count options`procs;:first];
9494
// if there is no need for map reducable adjustment, return razed results
95-
if[not options`mapreduce;:raze];
96-
:mapreduceres[options;];
95+
:$[not options`mapreduce;razeresults[options;];mapreduceres[options;]];
96+
};
97+
98+
// raze results and call process res to apply postprocessing and sublist
99+
razeresults:{[options;res]
100+
res:raze res;
101+
processres[options;res]
102+
};
103+
104+
//apply sublist and post processing to joined results
105+
processres:{[options;res]
106+
res:(options`postprocessing)res;
107+
:$[(options`sublist)<>0W;(options`sublist) sublist res;res];
97108
};
98109

99110
// function to correctly reduce two tables to one
@@ -115,7 +126,9 @@ mapreduceres:{[options;res]
115126
a!a:(),options[`timebar;2];
116127
0b];
117128
// select aggs by gr from res
118-
:?[res;();gr;raze{mapaggregate[x 0;camel x 1]}'[aggs]];
129+
res:?[res;();gr;raze{mapaggregate[x 0;camel x 1]}'[aggs]];
130+
//apply sublist and postprocesing to map reduced results
131+
processres[options;res]
119132
};
120133

121134

@@ -134,23 +147,6 @@ attributesrouting:{[options;procdict]
134147
:types;
135148
};
136149

137-
// mixture of all the post processing functions in gw
138-
returntab:{[input;tab;reqno]
139-
joinfn:input[`join];
140-
// Join the tables together with the join function
141-
tab:joinfn[tab];
142-
// Sort the joined table in the gateway
143-
if[`ordering in key input;tab:{.[y;(z;x)]}/[tab;(input[`ordering])[;0];(input[`ordering])[;1]]];
144-
// Return the sublist from the table then apply the post processing function
145-
tab:select [input`sublist] from tab;
146-
// Undergo post processing
147-
tab:(input[`postprocessing])[tab];
148-
// Update the logger
149-
.requests.updatelogger[reqno;`endtime`success!(.proc.cp[];1b)];
150-
:tab
151-
};
152-
153-
154150
// Generates a dictionary of `tablename!mindate;maxdate
155151
partdict:{[input]
156152
tabname:input[`tablename];

docs/dataaccess.md

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ maxAsk maxBid minAsk minBid
269269
The cross process aggregations also work with groupings and freeformby keys, for example
270270

271271
```
272-
q)querydict1:`tablename`starttime`endtime`aggregations`ordering`head!(`quote;2021.03.16D01:00:00.000000000;2021.03.17D18:00:00.000000000;"sym";`max`min!(`ask`bid;`ask`bid);`desc`maxAsk;-2)
272+
q)querydict1:`tablename`starttime`endtime`freeformby`aggregations`ordering`sublist!(`quote;2021.03.16D01:00:00.000000000;2021.03.17D18:00:00.000000000;"sym";`max`min!(`ask`bid;`ask`bid);`desc`maxAsk;-2)
273273
q)g(`.dataaccess.getdata;querydict1)
274274
sym | maxAsk maxBid minAsk minBid
275275
----| ---------------------------
@@ -278,7 +278,7 @@ DOW | 24.52 23.48 2.56 1.55
278278
```
279279
Such behaviour is not demonstrated when using freeform queries, for example:
280280
```
281-
q)querydict2:`tablename`starttime`endtime`aggregations`freeformcolumn!(`quote;2021.02.08D00:00:00.000000000;2021.02.09D09:00:00.000000000;"max ask,min ask,max bid, min bid")
281+
q)querydict2:`tablename`starttime`endtime`freeformcolumn!(`quote;2021.02.08D00:00:00.000000000;2021.02.09D09:00:00.000000000;"max ask,min ask,max bid, min bid")
282282
q)g(`.dataaccess.getdata;querydict2)
283283
ask bid ask1 bid1
284284
-----------------------
@@ -570,8 +570,7 @@ querynumber| user starttime endtime h
570570
2 | admin 2021.03.25D14:52:20.546227000 2021.03.25D14:52:20.546341000 11 `tablename`starttime`endtime`aggregations`grouping!(`quote;2021.02.12D00:00:00.000000000;15;(,`max)!,`ask`bid;`sym) 0 `endtime input type incorrect - valid type(s):-12 -14 -15h - input type:-7h
571571
572572
// The bad query errored out in the gateway, consequently only the good query is seen in the rdb logs
573-
574-
q).dataaccess.stats
573+
q)g".dataaccess.stats"
575574
querynumber| user starttime endtime handle request success error
576575
-----------| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
577576
1 | gateway 2021.03.25D14:52:03.381980000 2021.03.25D14:52:03.407870000 10 `tablename`starttime`endtime`aggregations`grouping`checksperformed`procs!(`quote;2021.02.12D00:00:00.000000000;2021.03.25D14:52:03.380478000;(,`max)!,`ask`bid;`sym;1b;`hdb`rdb) 1
@@ -638,7 +637,7 @@ For every key in the dictionary the following examples provide a query, output a
638637
If the time column isn't specified it defaults to the value of ``` `primaryattributecolumn ```
639638

640639
```
641-
getdata`tablename`starttime`endtime!(`quote;2021.01.20D0;2021.01.23D0)
640+
q)getdata`tablename`starttime`endtime!(`quote;2021.01.20D0;2021.01.23D0)
642641
date time sym bid ask bsize asize mode ex src
643642
----------------------------------------------------------------------------------
644643
2021.01.21 2021.01.21D13:36:45.714478000 AAPL 84.01 84.87 77 33 A N BARX
@@ -657,7 +656,7 @@ date time sym bid ask bsize asize mode ex sr
657656
Use the ``` `instruments ``` parameter to filter for ``` sym=`AAPL ```
658657

659658
```
660-
getdata`tablename`starttime`endtime`instruments!(`quote;2021.01.20D0;2021.01.23D0;`AAPL)
659+
q)getdata`tablename`starttime`endtime`instruments!(`quote;2021.01.20D0;2021.01.23D0;`AAPL)
661660
date time sym bid ask bsize asize mode ex src
662661
----------------------------------------------------------------------------------
663662
2021.01.21 2021.01.21D13:36:45.714478000 AAPL 84.01 84.87 77 33 A N BARX
@@ -676,7 +675,7 @@ q).dataaccess.buildquery `tablename`starttime`endtime`instruments!(`quote;2021.0
676675
Use the ``` `columns ``` parameter to extract the following columns - ``` `sym`time`bid ```
677676

678677
```
679-
getdata`tablename`starttime`endtime`columns!(`quote;2021.01.20D0;2021.01.23D0;`sym`time`bid)
678+
q)getdata`tablename`starttime`endtime`columns!(`quote;2021.01.20D0;2021.01.23D0;`sym`time`bid)
680679
sym time bid
681680
----------------------------------------
682681
AAPL 2021.01.21D13:36:45.714478000 84.01
@@ -696,7 +695,7 @@ q).dataaccess.buildquery `tablename`starttime`endtime`columns!(`quote;2021.01.20
696695
Run a free form select using the ``` `freeformcolumn ``` parameter
697696

698697
```
699-
getdata`tablename`starttime`endtime`freeformcolumn!(`quote;2021.01.20D0;2021.01.23D0;"sym,time,mid:0.5*bid+ask")
698+
q)getdata`tablename`starttime`endtime`freeformcolumn!(`quote;2021.01.20D0;2021.01.23D0;"sym,time,mid:0.5*bid+ask")
700699
sym time mid
701700
-----------------------------------------
702701
AAPL 2021.01.21D13:36:45.714478000 84.44
@@ -734,7 +733,7 @@ q).dataaccess.buildquery `tablename`starttime`endtime`freeformcolumn`grouping!(`
734733
Group average ``` `mid```, by ``` instru:sym ``` using the ``` `freeformby ``` parameter
735734

736735
```
737-
getdata`tablename`starttime`endtime`freeformcolumn`freeformby!(`quote;2021.01.20D0;2021.01.23D0;"avgmid:avg 0.5*bid+ask";"instr:sym")
736+
q)getdata`tablename`starttime`endtime`freeformcolumn`freeformby!(`quote;2021.01.20D0;2021.01.23D0;"avgmid:avg 0.5*bid+ask";"sym")
738737
instr| avgmid
739738
-----| --------
740739
AAPL | 70.63876
@@ -743,8 +742,8 @@ AMD | 36.46488
743742
DELL | 8.34496
744743
DOW | 22.8436
745744
746-
q).dataaccess.buildquery `tablename`starttime`endtime`freeformcolumn`freeformby!(`quote;2021.01.20D0;2021.01.23D0;"avgmid:avg 0.5*bid+ask";"instr:sym")
747-
? `quote ,(within;`time;2021.01.20D00:00:00.000000000 2021.01.23D00:00:00.000000000) (,`instr)!,`sym (,`avgmid)!,(avg;(*;0.5;(+;`bid;`ask)))
745+
q).dataaccess.buildquery `tablename`starttime`endtime`freeformcolumn`freeformby!(`quote;2021.01.20D0;2021.01.23D0;"avgmid:avg 0.5*bid+ask";"sym")
746+
? `quote ,(within;`time;2021.01.20D00:00:00.000000000 2021.01.23D00:00:00.000000000) (,`sym)!,`sym (,`avgmid)!,(avg;(*;0.5;(+;`bid;`ask)))
748747
749748
```
750749

@@ -753,7 +752,7 @@ q).dataaccess.buildquery `tablename`starttime`endtime`freeformcolumn`freeformby!
753752
Group max ask by 6 hour buckets using the ``` `timebar ``` parameter
754753

755754
```
756-
getdata(`tablename`starttime`endtime`aggregations`instruments`timebar)!(`quote;2021.01.21D1;2021.01.28D23;(enlist(`max))!enlist(enlist(`ask));`AAPL;(6;`hour;`time))
755+
q)getdata(`tablename`starttime`endtime`aggregations`instruments`timebar)!(`quote;2021.01.21D1;2021.01.28D23;(enlist(`max))!enlist(enlist(`ask));`AAPL;(6;`hour;`time))
757756
time | maxAsk
758757
-----------------------------| ------
759758
2021.01.21D12:00:00.000000000| 98.99
@@ -775,7 +774,7 @@ Max of both ``` `bidprice ``` and ``` `askprice ```
775774

776775

777776
```
778-
getdata`tablename`starttime`endtime`aggregations!(`quote;2021.01.20D0;2021.01.23D0;((enlist `max)!enlist `ask`bid))
777+
q)getdata`tablename`starttime`endtime`aggregations!(`quote;2021.01.20D0;2021.01.23D0;((enlist `max)!enlist `ask`bid))
779778
maxAsk maxBid
780779
-------------
781780
109.5 108.6
@@ -791,7 +790,7 @@ q).dataaccess.buildquery `tablename`starttime`endtime`aggregations!(`quote;2021.
791790
Use the ``` `filters ``` parameter to execute a functional select style where clause
792791

793792
```
794-
getdata`tablename`starttime`endtime`filters!(`quote;2021.01.20D0;2021.01.23D0;(enlist(`src))!enlist enlist(in;`GETGO`DB))
793+
q)getdata`tablename`starttime`endtime`filters!(`quote;2021.01.20D0;2021.01.23D0;(enlist(`src))!enlist enlist(in;`GETGO`DB))
795794
date time sym bid ask bsize asize mode ex src
796795
---------------------------------------------------------------------------------
797796
2021.01.21 2021.01.21D13:36:45.714478000 AAPL 83.1 84.52 58 84 Y N DB
@@ -811,7 +810,7 @@ q).dataaccess.buildquery `tablename`starttime`endtime`filters!(`quote;2021.01.20
811810
Use the ``` `freefromwhere ``` parameter to execute the same filter as above
812811

813812
```
814-
getdata`tablename`starttime`endtime`freeformwhere!(`quote;2021.01.20D0;2021.01.23D0;"src in `DB`GETGO")
813+
q)getdata`tablename`starttime`endtime`freeformwhere!(`quote;2021.01.20D0;2021.01.23D0;"src in `DB`GETGO")
815814
date time sym bid ask bsize asize mode ex src
816815
---------------------------------------------------------------------------------
817816
2021.01.21 2021.01.21D13:36:45.714478000 AAPL 83.1 84.52 58 84 Y N DB
@@ -831,7 +830,7 @@ q).dataaccess.buildquery `tablename`starttime`endtime`freeformwhere!(`quote;2021
831830
Use the ``` `ordering ``` parameter to sort results by column ascending or descending
832831

833832
```
834-
getdata`tablename`starttime`endtime`ordering!(`quote;2000.01.01D00:00:00.000000000;2000.01.06D10:00:00.000000000;enlist(`asc`asksize))
833+
q)getdata`tablename`starttime`endtime`ordering!(`quote;2000.01.01D00:00:00.000000000;2000.01.06D10:00:00.000000000;enlist(`asc`asksize))
835834
sym time sourcetime bidprice bidsize askprice asksize
836835
----------------------------------------------------------------------------------------------------
837836
AAPL 2000.01.01D02:24:00.000000000 2000.01.01D02:24:00.000000000 90.9 932.4 111.1 1139.6
@@ -850,7 +849,7 @@ q).dataaccess.buildquery `tablename`starttime`endtime`ordering!(`quote;2000.01.0
850849
Use the ``` `renamecolumn ``` parameter to rename the columns
851850

852851
```
853-
getdata (`tablename`starttime`endtime`freeformby`freeformcolumn`instruments`renamecolumn)!(`trade;2021.01.18D0;2021.01.20D0;"sym,date";"max price";`IBM`AAPL`INTC;`sym`price`date!`newsym`newprice`newdate)
852+
q)getdata (`tablename`starttime`endtime`freeformby`freeformcolumn`instruments`renamecolumn)!(`trade;2021.01.18D0;2021.01.20D0;"sym,date";"max price";`IBM`AAPL`INTC;`sym`price`date!`newsym`newprice`newdate)
854853
newdate newsym| newprice
855854
-----------------| --------
856855
2021.01.18 IBM | 69.64
@@ -859,24 +858,27 @@ newdate newsym| newprice
859858
2021.01.19 AAPL | 111.67
860859
2021.01.18 INTC | 70.77
861860
2021.01.19 INTC | 65.6
861+
q).dataaccess.buildquery (`tablename`starttime`endtime`freeformby`freeformcolumn`instruments`renamecolumn)!(`trade;2021.01.18D0;2021.01.20D0;"sym,date";"max price";`IBM`AAPL`INTC;`sym`price`date!`newsym`newprice`newdate)
862+
? `trade ((=;`sym;,`IBM);(within;`time;2021.01.18D00:00:00.000000000 2021.01.20D00:00:00.000000000)) `date`sym!`time.date`sym (,`price)!,(max;`price)
863+
? `trade ((=;`sym;,`AAPL);(within;`time;2021.01.18D00:00:00.000000000 2021.01.20D00:00:00.000000000)) `date`sym!`time.date`sym (,`price)!,(max;`price)
864+
? `trade ((=;`sym;,`INTC);(within;`time;2021.01.18D00:00:00.000000000 2021.01.20D00:00:00.000000000)) `date`sym!`time.date`sym (,`price)!,(max;`price)
862865
```
863866

864867
**Postprocessing**
865868

866869
Use the ``` `postproccessing``` key to under go post proccessing on a table for example flipping the table into a dictionary
867870

868871
```
869-
q)getdata`tablename`starttime`endtime`aggregations`postback!(`quote;2021.02.12D0;2021.02.12D12;((enlist `max)!enlist `ask`bid);{flip x})
872+
q)getdata`tablename`starttime`endtime`aggregations`postprocessing!(`quote;2021.02.12D0;2021.02.12D12;((enlist `max)!enlist `ask`bid);{flip x})
870873
maxAsk| 91.74
871874
maxBid| 90.65
872875
873-
q).dataaccess.buildquery `tablename`starttime`endtime`aggregations`postback!(`quote;2021.02.12D0;2021.02.12D12;((enlist `max)!enlist `ask`bid);{flip x})
876+
q).dataaccess.buildquery `tablename`starttime`endtime`aggregations`postprocessing!(`quote;2021.02.12D0;2021.02.12D12;((enlist `max)!enlist `ask`bid);{flip x})
874877
? `quote ,(within;`time;2021.02.12D00:00:00.000000000 2021.02.12D12:00:00.000000000) 0b `maxAsk`maxBid!((max;`ask);(max;`bid))
875878
876879
```
877880
More complex example collecting the avg price across multiple processes in the gateway g
878881
```
879-
880882
q)g".dataaccess.getdata`tablename`starttime`endtime`aggregations`postprocessing!(`quote;2021.02.12D0;.z.p;(`sum`count)!2#`ask;{flip x})"
881883
sumAsk | 1.288549e+09
882884
countAsk| 28738958
@@ -892,17 +894,17 @@ avgprice
892894
Use the ``` `sublist``` key to return the first n rows of a table, for example we get the first 2 rows of the table.
893895

894896
```
895-
q)getdata `tablename`starttime`endtime`freeformby`aggregations`ordering`sublist!(`quote;00:00+2021.02.17D10;.z.d+18:00;\"sym\";(`max`min)!((`ask`bid);(`ask`bid));enlist(`desc;`maxAsk);2)
896897
898+
q)getdata `tablename`starttime`endtime`freeformby`aggregations`ordering`sublist!(`quote;00:00+2021.02.17D10;.z.d+18:00;"sym";(`max`min)!((`ask`bid);(`ask`bid));enlist(`desc;`maxAsk);2)
897899
sym | maxAsk maxBid minAsk minBid
898900
----| ---------------------------
899901
AAPL| 171.23 170.36 56.35 55.32
900902
GOOG| 101.09 99.96 45.57 44.47
901903
902-
q).dataaccess.buildquery `tablename`starttime`endtime`freeformby`aggregations`ordering`head!(`quote;00:00+2021.02.17D10;.z.d+18:00;\"sym\";(`max`min)!((`ask`bid);(`ask`bid));enlist(`desc;`maxAsk);2)
904+
q).dataaccess.buildquery `tablename`starttime`endtime`freeformby`aggregations`ordering`sublist!(`quote;00:00+2021.02.17D10;.z.d+18:00;"sym";(`max`min)!((`ask`bid);(`ask`bid));enlist(`desc;`maxAsk);2)
903905
? `quote ,(within;`time;2021.02.17D10:00:00.000000000 2021.03.03D18:00:00.000000000) (,`sym)!,`sym `maxAsk`maxBid`minAsk`minBid!((max;`ask);(max;`bid);(min;`ask);(min;`bid))
904906
905-
q)getdata `tablename`starttime`endtime`freeformby`aggregations`ordering`sublist!(`quote;00:00+2021.02.17D10;.z.d+18:00;\"sym\";(`max`min)!((`ask`bid);(`ask`bid));enlist(`desc;`maxAsk);2 3)"
907+
q)getdata `tablename`starttime`endtime`freeformby`aggregations`ordering`sublist!(`quote;00:00+2021.02.17D10;.z.d+18:00;"sym";(`max`min)!((`ask`bid);(`ask`bid));enlist(`desc;`maxAsk);3)
906908
sym | maxAsk maxBid minAsk minBid
907909
----| ---------------------------
908910
INTC| 68.51 67.56 44.59 43.63

tests/dataaccess/checkinputs/run.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,5 @@ ${TORQHOME}/torq.sh start discovery1
1919
-procfile ${testpath}/config/process.csv \
2020
-dataaccess ${testpath}/config/tableproperties.csv \
2121
$debug $stop $write $quiet
22+
23+
${TORQHOME}/torq.sh stop discovery1

tests/dataaccess/common/run.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,5 @@ ${TORQHOME}/torq.sh start discovery1
1919
-procfile ${testpath}/config/process.csv \
2020
-dataaccess ${testpath}/config/tableproperties.csv \
2121
$debug $stop $write $quiet
22+
23+
${TORQHOME}/torq.sh stop discovery1

tests/dataaccess/extractqueryparam/run.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@ ${TORQHOME}/torq.sh start discovery1
2020
-dataaccess ${testpath}/config/tableproperties.csv \
2121
$debug $stop $write $quiet
2222

23+
${TORQHOME}/torq.sh stop discovery1
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
parameter,parametervalue
2+
tablename,`xdaily
3+
starttime,2000.01.03D00:00:00.000000000
4+
endtime,2000.01.04D00:00:00.000000000
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
parameter,parametervalue
2+
tablename,`xdaily
3+
starttime,2000.01.01D00:00:00.000000000
4+
endtime,2000.01.06D23:59:00.000000000
5+
aggregations,(enlist `max)!(enlist`askprice)
6+
grouping,`sym
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
parameter,parametervalue
2+
tablename,`xdaily
3+
starttime,2000.01.01D00:00:00.000000000
4+
endtime,2000.01.06D23:59:00.000000000

0 commit comments

Comments
 (0)