2014-10-03 100 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

相關問題