如何通过KDB查询用关联表数据填充结果表的空size列?
实现KDB查询填充空值需求的方案
当然可以实现这个需求!KDB+的等值连接和空值填充特性正好能解决这类场景,我给你整理了具体的实现步骤和查询语句:
步骤1:定义基础查询
首先分别获取表1和表2的查询结果,注意给表2的聚合结果重命名字段,让关联字段和表1对齐:
// 获取表1数据 t1: select customer, date, product, orderId, version, size from tableA where date=2020.04.08, product in (`Derivative); // 获取表2数据,重命名关联字段并聚合size t2: select t2_size: sum size by date, product, orderId: parent_orderId, version: parent_version from tableB where date=2020.04.08, product in (`Derivative);
步骤2:等值连接并填充空值
使用ej(等值连接)将两个表按指定规则关联,再用^操作符自动填充表1中的空size字段:
// 完成关联+空值填充 result: update size: size ^ t2_size from ej[`date`product`orderId`version; t1; t2]; // 可选:移除临时字段t2_size result: delete t2_size from result;
关键逻辑解释
- 等值连接
ej:确保只有同时匹配date、product、orderId=parent_orderId、version=parent_version的行才会关联,保证数据匹配的准确性。 - 空值填充
^:KDB+中的^操作符会自动判断左边的size值,如果是空值(0N),就用右边的t2_size替换;如果原size有值,则保留原值,完美符合你的需求。
执行上述查询后,就能得到你预期的输出结果:
+----------+----------+------------+---------+---------+------+ | customer | date | product | orderId | version | size | +----------+----------+------------+---------+---------+------+ | XYZ fund | 4/8/2020 | Derivative | 1 | 6 | 10 | | XYZ fund | 4/8/2020 | Derivative | 2 | 6 | 1000 | | XYZ fund | 4/8/2020 | Derivative | 3 | 4 | 20 | +----------+----------+------------+---------+---------+------+
内容的提问来源于stack exchange,提问作者JavaBuilder
相关产品推荐
相关产品推荐

