2014-10-03 2 views
1

У меня есть две секционированные таблицы. Таблица A является моей основной таблицей, а таблица B заполнена столбцами, которые являются точными копиями некоторых столбцов в таблице A. Однако в таблице B есть один столбец, в котором есть данные, потому что столбец соответствия в таблице A заполнен нулей.kdb Обновить весь столбец с данными из другой таблицы

Я хотел бы избавиться от таблицы B полностью, так как большинство из них является излишним, и обновлять колонку соответствия в таблице А с данными из одной колонки в таблице В.

Визуально,

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 в таблице A значениями из столбца b в таблице 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 

Теперь для разделов, вы будете использовать функцию вносить изменения, чтобы изменить столбец Б из секционированной таблицы, таблица А, на дату 2007.02.23 (или любой другой даты ваш раздел). Это загружает столбец b таблицыB в память, чтобы преформировать изменение. Вы должны выполнить изменение для каждого раздела.

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

Спасибо, друг. Хотя мне все же приходится решать вопрос о таблицах с разным количеством строк, вы, безусловно, отправили меня по правильному пути. Я очень ценю вашу помощь! – Hopper06