значения столбцов меняются между загрузкой двух секционированных таблиц в KDB (q)

У меня на диске есть две разбитые на разделы таблицы kdb (одна называется trades, другая — books). Я создал данные, используя

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

и

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

на каждый день. Если я выберу данные из таблицы trades, а затем загружу таблицу books (без выбора данных), значения в столбцах symTrade моего результата изменятся на новые значения. Я предполагаю, что это как-то связано с разделением в таблице книг, применяемым к результату из таблицы сделок (также таблица сделок больше недоступна после загрузки таблицы книг).

Как мне:

  • сохранить доступ к таблице сделок после загрузки таблицы книг?
  • избежать перезаписи моего столбца symTrade значениями sym в таблице books?

Вот пример:

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

person Hans Roggeman    schedule 01.07.2020    source источник


Ответы (1)


Я думаю, проблема в том, что вы сохраняете эти таблицы в двух разных базах данных.

Первый аргумент в .Q.dpft — это путь к корню базы данных, а четвертый аргумент — это имя таблицы, которую вы хотите сохранить. Итак, когда вы делаете

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

Вы сохраняете таблицу сделок в базе данных в I:/check/trades, и когда вы это делаете

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

вы сохраняете таблицу books в базе данных в 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/";

Дайте нам знать, если это сработает!

person Matthew Greenlees    schedule 01.07.2020
comment
Чтобы добавить, причина изменения ваших значений в столбце символов связана с файлом sym. .Q.dpft будет перечислять все значения символов в файле sym, который хранится в корневом каталоге HDB. Файл sym загружается в память при загрузке базы данных. Когда вы загружаете вторую базу данных, вы перезаписываете текущий файл sym новым, поэтому ваши столбцы символов в первой загруженной таблице сопоставляются с неправильным файлом sym и, следовательно, отображают неправильные значения. Либо сохраните таблицы в одной базе данных, либо загрузите базы данных в разные процессы, либо отмените нумерацию первой таблицы. - person Adam Bonham; 02.07.2020