Получить значение по умолчанию вместо нуля при выполнении выбора KDB - PullRequest
0 голосов
/ 09 апреля 2020

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

e.g select customer,date,product,orderId,version,size from tableA where date=2020.04.08,product in (`Derivative)

возвращает:

+----------+----------+------------+---------+---------+------+
| customer |   date   |  product   | orderId | version | size |
+----------+----------+------------+---------+---------+------+
| XYZ fund | 4/8/2020 | Derivative |       1 |       6 |      |
| XYZ fund | 4/8/2020 | Derivative |       2 |       6 | 1000 |
| XYZ fund | 4/8/2020 | Derivative |       3 |       4 |      |
+----------+----------+------------+---------+---------+------+

Так что я хочу NA вместо пустых или нулевых следующих:

+----------+----------+------------+---------+---------+------+
| customer |   date   |  product   | orderId | version | size |
+----------+----------+------------+---------+---------+------+
| XYZ fund | 4/8/2020 | Derivative |       1 |       6 |  NA  |
| XYZ fund | 4/8/2020 | Derivative |       2 |       6 | 1000 |
| XYZ fund | 4/8/2020 | Derivative |       3 |       4 |  NA  |
+----------+----------+------------+---------+---------+------+

1 Ответ

3 голосов
/ 09 апреля 2020

Это трудно сделать со значением типа NA, потому что q предпочитает, чтобы векторы были одинакового типа. Предполагая, что ваш столбец size является типом цифр c, а не символом, с которым вы столкнетесь.

Я бы посоветовал заполнить какое-нибудь значение чисел c заполнением ^ оператор. Например, чтобы заполнить ноль в качестве значения по умолчанию:

q)res:select customer,date,product,orderId,version,size from tableA where date=2020.04.08,product in (`Derivative)
q)update 0^size from res
customer date     product    orderId version size
-------------------------------------------------
XYZ fund 4/8/2020 Derivative 1       6       0  
XYZ fund 4/8/2020 Derivative 2       6       1000
XYZ fund 4/8/2020 Derivative 3       4       0  

Если важно использовать значение NA, вы можете привести столбец к типу символа и заполнить `NA:

q)res:select customer,date,product,orderId,version,size from tableA where date=2020.04.08,product in (`Derivative)
q)update `NA^`$string size from res
customer date     product    orderId version size
-------------------------------------------------
XYZ fund 4/8/2020 Derivative 1       6       NA  
XYZ fund 4/8/2020 Derivative 2       6       1000
XYZ fund 4/8/2020 Derivative 3       4       NA  

Недостатком этого является то, что вы больше не сможете выполнять операции с цифрами c над столбцом без предварительного возврата к типу цифры c:

q)select sum size from res
'type
  [0]  select sum size from res
q)select sum "J"$string size from res
size
----
1000
...