2014-10-03 102 views
1

我有两个分区表。表A是我的主表,而表B是满表A的列,它们是表A中某些列的精确副本。但是,表B中有一列有我需要的数据 - 因为表A中的匹配列已满的空值。kdb使用另一个表中的数据更新整个列

我想完全摆脱表B的,因为大部分是冗余的,并与来自于表B.

视觉上一列中的数据更新在表A中的匹配列,

Table A:    Table B: 
a  b  c d  a b d 
__________________  ______________ 
1 null 11 A  1 joe A 
2 null 22 B  2 bob B 
3 null 33 C  3 sal C 

我想用表B中b列的值填充表A中的b列,然后我不再需要表B并且可以删除它。我必须反复这样做,因为这两张桌子每天都从两个不同的来源获得。

我无法键入这些表,因为它们都是分区的。

我曾尝试:

update columnb:(exec columnb from TableB) from TableA; 

但我得到一个`长度误差。

有关如何以任何方式解决此问题的建议,我们感激不尽。

回答

1

要替换内存中的列,您可以执行以下操作。

t1:([]a:1 2 3;b:0N) 
a b 
--- 
1 
2 
3 

t2:([]c:`aa`bb`cc;b:5 6 7) 
c b 
---- 
aa 5 
bb 6 
cc 7 


t1,'t2 
a b c 
------ 
1 5 aa 
2 6 bb 
3 7 cc 

如果您收到长度错误则列没有 相同数量和下面会解决它。该解决方案明显的 问题在于,如果t2的列数小于t1,它将开始重复 数据。你将不得不找出原因。

t1,'count[t1]#t2 

现在的分区,你将使用修订功能改变 分区表,表A的B列,在日期2007年2月23日(或任何日期你的分区)。 这会将tableB的b列加载到内存中以进行修改。您必须对每个分区执行修改。

@[`:2007.02.23/tableA/;`b;:;count[tableA]#exec b from select b from tableB where date=2007.02.23] 
+0

谢谢你,朋友。尽管我仍然必须解决具有不同行数的表格的问题,但您确实已经沿着正确的路线发送了我。非常感谢你的帮助! – Hopper06 2014-10-03 19:09:32

相关问题