【问题标题】:how to link results to a correct rows in a partitioned table kdb如何将结果链接到分区表 kdb 中的正确行
【发布时间】:2020-04-30 03:55:44
【问题描述】:

我在 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

【问题讨论】:

  • 我不完全确定我是否在关注。您是想仅更改 b_orig_date 的现有行,还是需要附加这些全新的行?
  • 您是否要追加 2016.11.01 至 2016.11.02 的隔夜订单?
  • b_orig_date 是添加到表中的新列,需要根据第 01 天的结果在 lst 中创建的条件和结果下附加第 02 天的值。 b_orig_date 的第 1 天已完全填充。因此,如果 market_Order_no 在第 01 天为 222,我如何将该行中的日期插入到 market_Order_no=222 的第 2 天

标签: kdb


【解决方案1】:

我认为这就是您想要的,为了简单起见,我将表格称为带有适当日期 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 在整个 hdb 中添加此列

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

【讨论】:

  • 我们可以使用 .Q.par 做到这一点吗?我想我需要为所有三个不同的列设置此项(从日期 = 2016.11.02 lj 1 的订单中选择 b_market_order_no,instrumentID,mkt!从日期 = 2016.11.01 的订单中选择 b_market_order_no,instrumentID,mkt,b_orig_date,([] b_market_order_no;instrumentID;mkt) 在 lst
  • 是的,如果 b_market_order_no 不明显,让我编辑我的查询,是的,您可以使用 .Q.par。
  • 我试过这个 .Q.par 似乎更容易理解,但类型不匹配。 b_market_order_no,instrumentID,mkt 在那天是不同的。 " .Q.par[$":/...../2016.11.02/order";;hsym b_orig_date] 更新获取 .Q.par[$":/..../2016.11.01/order";;hsym b_orig_date] "
  • 对于初学者来说,这不是你使用 .Q.par 的方式,其次是无法达到你想要的效果。 .Q.par 用于查找特定分区的表的文件位置(在这种情况下,在大多数情况下,这是日期),当您有一个拆分为多个目录且通常不止一个硬盘驱动器的 hdb 时
  • 请告诉我在这种情况下如何正确使用 .Q.par。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多