我有两个分区表。表A是我的主表,表B充满了列,这些列是表A中某些列的精确副本。但是,表B中有一列具有我需要的数据-因为表A中的匹配列已满空值。
我想完全摆脱表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;
但我收到一个“长度错误”。
赞赏有关如何以任何方式解决此问题的建议。
要替换内存中的列,请执行以下操作。
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
现在,对于分区,您将使用amend函数在日期为2007.02.23(或分区的任何日期)处更改分区表的表A的b列。这会将tableB的b列加载到内存中以执行修改。您必须对每个分区执行修改。
@[`:2007.02.23/tableA/;`b;:;count[tableA]#exec b from select b from tableB where date=2007.02.23]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句