【问题标题】:kdb Update entire column with data from another tablekdb 用另一个表中的数据更新整个列
【发布时间】:2014-10-03 14:44:32
【问题描述】:

我有两个分区表。表 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; 

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

感谢您提出如何以任何方式解决此问题的建议。

【问题讨论】:

    标签: kdb q-lang


    【解决方案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
    

    现在对于分区,您将使用修改功能来更改 分区表的 b 列,表 A,日期为 2007.02.23(或您的分区的任何日期)。 这会将 tableB 的 b 列加载到内存中以进行修改。您必须对每个分区执行修改。

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

    【讨论】:

    • 谢谢你,朋友。虽然我仍然需要解决表格具有不同行数的问题,但您肯定让我走上了正确的道路。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多