如何 link 在分区的 table kdb 中生成正确的行

how to link results to a correct rows in a partitioned table kdb

我在 lst 中有一列基于以下条件的日期并且运行良好,我需要通过设置或更新插入或任何方式将其 link 到分区数据库的适当行。

(这些是由许多列组成的相应日期的分区 tables)

tbp:2016.11.01 
tb:2016.11.02

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

我根据 lst 中的条件得到一列日期,现在我必须 link 它到数据库中 table,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

我认为这就是您想要的,同样为了简单起见,我指的是 table 作为带有适当日期的订单 where 子句:

编辑:添加。Q.par 还要注意 3!因为需要 b_market_order_no、instrumentID、mkt 全部作为键控列

编辑:如果您将 hdb 加载到 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 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/order 的全新专栏,您将需要编辑 .d

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

可能还需要使用 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