Могу ли я загрузить 2 разных корня hdb в одном сервисе KDB? - PullRequest
0 голосов
/ 21 апреля 2020

Скажем, у меня есть две разные подпапки в моей директории hdb, папка A и папка B. В обеих есть данные, разделенные по дате, и файлы sym, перечисленные для каждой отдельной таблицы. Каталог A имеет 1 подстолью, `quote и каталог B имеет другую таблицу` trade. Я могу загрузить оба этих каталога в мой сеанс q по отдельности, используя:

system "l /dir/A"
system "l /dir/B"

Когда я пытаюсь щелкнуть таблицы, находящиеся в каталоге 'A', я сталкиваюсь со следующей ошибкой в ​​QStudio:

kx.c$KException: ./2020.04.21/quote. OS reports: No such file or directory

Теперь, если я go a, снова выполню следующее:

system "l /dir/A" 

Ошибка исчезает, но я сталкиваюсь с тем же стилем ошибки, когда пытаюсь нажать на таблицу торговли. , Кто-нибудь знает, возможно ли загрузить из двух отдельных каталогов в один сервис?

Ответы [ 2 ]

2 голосов
/ 22 апреля 2020

Если у вас есть два разных файла sym, которые не имеют одно и то же имя, то вам повезло - вы можете просто создать синтетическую базу данных c, используя ссылки Symboli c, где ссылки указывают на обе таблицы, а затем вы можете загрузить база данных syntheti c. Конечно, поддержка базы данных syntheti c - это еще одна проблема, но она не слишком сложна. Это будет выглядеть так:

synthdb/
    2020.01.01/
        trade -> /db1/2020.01.01/trade
        quote -> /db2/2020.01.01/quote
    2020.01.02/
        trade -> /db1/2020.01.02/trade
        quote -> /db2/2020.01.02/quote
    splay1 -> /db1/splay1
    splay2 -> /db2/splay2
    flat1 -> /db1/flat1
    flat2 -> /db2/flat2
    sym -> /db1/sym
    sym2 -> /db2/sym2

2 голосов
/ 21 апреля 2020

Проблема здесь в том, что эта вторая загрузка hdb system "l /dir/B" перезаписывает первую. Когда вы загружаете hdb, kdb отображает его в память и использует файл sym для отображения перечисленных символов в их оригинальной читабельной форме. Он может использовать только 1 файл sym, чтобы сделать это, поскольку перечисленные столбцы на самом деле являются индексом того места, где они находятся в файле sym, и не имеет смысла ссылаться на более чем 1.

Я думаю, вы должны посмотреть на имея их как один раздел hdb на одну дату, но если это не вариант, вы можете настроить 2 процесса hdb с портами, к которым вы можете подключиться:

// start hdbA with quotes
q /dir/A -p 12345

// start hdbB with trades
q /dir/B -p 23456

// connect to hdbB from hdbA
hdbB:hopen `::23456;
// example query 
hdbB"select from trades where date = .z.d"

// connect to hdbA from hdbB
hdbA:hopen `::12345;
// example query
hdbA"select from quotes where date = .z.d"
...