在 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).
我如何:
- 加载书籍后保持交易 table 可访问 table?
- 避免我的 symTrade 列被 sym 值覆盖
书 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/";
如果可行,请告诉我们!
我在磁盘上有两个分区的 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).
我如何:
- 加载书籍后保持交易 table 可访问 table?
- 避免我的 symTrade 列被 sym 值覆盖 书 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/";
如果可行,请告诉我们!