在 KDB (q) 中加载两个分区表之间列值发生变化

column values change between loading two partioned tables in KDB (q)

我在磁盘上有两个分区的 kdb tables(一个叫 trades,一个叫 books)。我创建了数据 使用

.Q.dpft[`:I:/check/trades/;2020.01.01;`symTrade;`trades]

.Q.dpft[`:I:/check/books/;2020.01.01;`sym;`books]

每天。如果我 select 来自交易 table 的数据,然后加载账簿 table(没有 selecting 数据),我结果的 symTrade 列中的值将更改为新值。我认为这与书籍 table 中的分区应用于交易 table 的结果有关(而且交易 table 在加载书籍后不再可访问 table).

我如何:

这是一个例子:

system "l I:/check/trades/";
test: 10 sublist select from trades where date=2020.01.01;
show cols test;
// gives `date`symTrade`time`Price`Qty`Volume
select distinct symTrade from test;
// gives TICKER1
// now loading another table
system "l I:/check/books";
select distinct symTrade from test;
// now gives a different value e.g. TICKER200

我认为问题在于您将这些 table 保存到两个不同的数据库中。

.Q.dpft中的第一个参数是数据库根目录的路径,第四个参数是table要存储的名称。所以当你这样做时

.Q.dpft[`:I:/check/trades/;2020.01.01;`symTrade;`trades]

您正在将交易 table 存储在 I:/check/trades 的数据库中,当您这样做时

.Q.dpft[`:I:/check/books/;2020.01.01;`sym;`books]

您正在将书籍 table 存储在 I:/check/books 的数据库中。我认为 q 一次只能加载一个数据库,所以这可能是问题所在。

尝试这样做

.Q.dpft[`:I:/check/;2020.01.01;`symTrade;`trades]
.Q.dpft[`:I:/check/;2020.01.01;`sym;`books]
system "l I:/check/";

如果可行,请告诉我们!