как связать результаты с правильными строками в секционированной таблице kdb - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть столбец дат, основанный на следующих условиях в lst, и он работает нормально, и мне нужно связать его по set или upsert или любым другим способом с подходящими строками в многораздельной базе данных.

(Это разбитые таблицы для соответствующих дней, состоящие из множества столбцов)

tbp:2016.11.01 
tb:2016.11.02

lst: distinct select  b_market_order_no,instrumentID,mkt from tb  where event=`OvernightOrder

Я получаю столбец дат, основанный на условиях в lst, теперь я должен связать его с соответствующими строками таблицы, tb, в база данных. То, что у меня есть для команды «set», просто вслепую добавляет даты, я думаю, к каждой строке, пока она не будет израсходована. Не уверен, как передать соответствующее расположение строки для установки или даже если это правильный способ сделать это. Или upsert нужно использовать! Или же нужно реализовать совсем другое!

(`$":PATH/2016.11.02/order/b_orig_date") set select b_orig_date from tbp where ([]b_market_order_no;instrumentID;mkt) in lst

1 Ответ

3 голосов
/ 29 апреля 2020

Я думаю, что это то, что вы хотите, также для простоты я называю таблицу порядком с соответствующей датой, где указаны пункты:

Редактировать: добавлено .Q.par также обратите внимание на 3! как необходимо иметь b_market_order_no, instrumentID, mkt all в качестве столбцов с ключами

Редактировать: Обобщенное использование, если у вас загружен hdb в процесс aq:

dirPath:string .Q.par[`:.;2016.11.02;`order]
(`$dirPath,"/b_orig_date") set exec b_orig_date from 
  (select b_market_order_no, instrumentID, mkt from order where date = 2016.11.02) lj 
  3!select b_market_order_no, instrumentID, mkt, b_orig_date from order where 
    date = 2016.11.01,([]b_market_order_no;instrumentID;mkt) in lst

Также, если это совершенно новый столбец на 2016.11.02 / заказ, вам нужно будет отредактировать .d

(`$dirPath,"/.d") set (get `$dirPath,"/.d"),`b_orig_date

Этот столбец также необходимо добавить в hdb с помощью dbmaint.q

https://github.com/KxSystems/kdb/blob/master/utils/dbmaint.q

Ответ:

dirPath:string .Q.par[`:.;2016.11.02;`order]
(`$dirPath,"/b_orig_date") set exec b_orig_date from 
  (select b_market_order_no, instrumentID, mkt from tb) lj 
  3!select b_market_order_no, instrumentID, mkt, b_orig_date from tbp where 
  ([]b_market_order_no;instrumentID;mkt) in lst
...