Создание вложенных столбцов в таблице kdb - PullRequest
1 голос
/ 06 июня 2019

Я хотел бы создать вложенный список для одного из столбцов моей таблицы, но я не уверен, какой синтаксис использовать.Если, например, у меня была следующая таблица ...

q)t:([]submitter:`A`B`C; code:3?100; status:110b)
q)t
submitter code status
---------------------
A         2    1
B         39   1
C         64   0

Я хочу сделать что-то похожее на ниже.Однако это добавит дополнительный столбец x в таблицу и поместит туда значение вместо создания составного списка для столбца code ....

q)update code,:77 from t where status<>1b
submitter code status x
------------------------
A         2    1
B         39   1
C         64   0      77

Если бы это был словарь содиночное значение Я бы сделал следующее ...

q)d:`sumbitter`code`status!(`A;1?100;1)
q)d
sumbitter| `A
code     | ,88
status   | 1

q)d[`code],:99
q)d
sumbitter| `A
code     | 88 99
status   | 1

Как выполнить ту же операцию для таблицы с несколькими строками?

Мой желаемый результат будет выглядеть так ...

q)t
submitter code  status
----------------------
A         2     1
B         39    1
C         64 77 0

Ответы [ 2 ]

2 голосов
/ 06 июня 2019

Это также сделает это для вас, не требует, чтобы вы изменили тип заранее

q)update code:(code,'(77;())status) from t
submitter code status
---------------------
A         ,12  1
B         ,10  1
C         1 77 0
1 голос
/ 06 июня 2019

Вы не можете изменить тип столбца code на лету, как вы собираетесь.

Вместо этого сначала необходимо обновить тип столбца code насписок long вместо long:

q)meta t
c        | t f a
---------| -----
submitter| s    
code     | j    
status   | b    

Обновление типа:

t: update enlist each code from t

Теперь тип code равен "J", что действительносписок long:

q)meta t
c        | t f a
---------| -----
submitter| s    
code     | J    
status   | b    

И затем вы можете добавить элемент к code следующим образом:

t:update code:{x,77} each code from t where status<>1b

q)t
submitter code  status
----------------------
A         ,2    1     
B         ,39   1     
C         64 77 0     
...