如何设置KDB RDB只订阅tickerplant中的某些表

问题描述

我想使用相同的脚本设置2个RDB实例,其中一个实例订阅了2个表,另一个实例订阅了tickerplant中的一个单独的表。我试图操纵.u.sub但没有成功

if[system"p"=RDB_INSTANCE_1;
   .u.rep .(hopen `$":",.u.x 0)"({.u.sub[x;`]} each `Trade`quote;`.u `i`L)";
];
if[system"p"=RDB_INSTANCE_2;
   .u.rep .(hopen `$":",.u.x 0)"(.u.sub[`aggTradeStats;`];`.u `i`L)";
];

   ?[system"p"=RDB_INSTANCE_1;..u.rep .(hopen `$":",.u.x 0)"({.u.sub[x;`]} each `Trade`quote;`.u `i`L)"; .u.rep .(hopen `$":",.u.x 0)"(.u.sub[`aggTradeStats;`];`.u `i`L)"];

有什么想法可以实现吗?

解决方法

当涉及订阅选项时,普通的tick脚本并不那么灵活,但是在不费吹灰之力的情况下,下面的一些快速更改应该可以让您按照要求进行操作(我还没有测试以下内容)而不是启动实例

.u.sub更改为以下内容,以允许订阅所有表(`),表列表或单个表

{$[x~`;.z.s[;y]each t;1<count x;.z.s[;y]each x;[if[not x in t;'x];del[x].z.w;add[x;y]]]};

r.q更改为以下内容,其中通过命令行标志传递了所需的表。我删除了对.z.x的引用并解析了各种标志。最后一行以字符串格式构建了表列表(不是很优雅,但这是一种快速的解决方案)。

/q tick/r.q [host]:port[:usr:pwd] [host]:port[:usr:pwd]
/2008.09.09 .k ->.q

if[not "w"=first string .z.o;system "sleep 1"];

upd:insert;

args:.Q.opt .z.x;

/ get the ticker plant and history ports,defaults are 5010,5012
/.u.x:.z.x[0],(count .z.x 0)_(":5010";":5012");

/ end of day: save,clear,hdb reload
.u.end:{t:tables`.;t@:where `g=attr each t@\:`sym;.Q.hdpf[`$"::",first args`hdb;`:.;x;`sym];@[;`sym;`g#] each t;};

/ init schema and sync up from log file;cd to hdb(so client save can run)
.u.rep:{if[0>type first x;x:enlist x];(.[;();:;].)each x;if[null first y;:()];-11!y;system "cd ",1_-10_string first reverse y};
/ HARDCODE \cd if other than logdir/db

/ connect to ticker plant for (schema;(logcount;log))
.u.rep .(hopen `$"::",first args`tp)"(.u.sub[`",("`" sv args`tabs),";`];`.u `i`L)";

然后按如下所示启动RDB

ec2-user@/home/ec2-user  $ ## RDB 1 table
ec2-user@/home/ec2-user  $ q tick/r.q -tp 5010 -hdb 6000 -tabs trade -q
tables[],`trade
ec2-user@/home/ec2-user  $ # RDB 2 tables
ec2-user@/home/ec2-user  $ q tick/r.q -tp 5010 -hdb 6000 -tabs trade quote -q
tables[]
`quote`trade
ec2-user@/home/ec2-user  $ ## RDB all tables
ec2-user@/home/ec2-user  $ q tick/r.q -tp 5010 -hdb 6000 -q
tables[]
`s#`other`quote`trade

在tp上重新检查订阅字典

q).u.w
other|,(9i;`)
quote| ((8i;`);(9i;`))
trade| ((7i;`);(8i;`);(9i;`))

希望这会有所帮助,就像我说的那样,我还没有进行测试

Jason

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...