KDB +功能选择动态列

时间:2018-06-03 01:42:01

标签: select dynamic functional-programming kdb

如何从表中动态重命名多个列?

例如:我想解析3个日期列并将它们重命名为balanceT1,balanceT2和balanceT3

首先,我解析了日期列:

balanceCols:string (cols balanceData) where ((string cols balanceData) like "*_*")and not (string cols balanceData) like "*Post*"

然后执行功能选择以重命名它们,但不起作用。

 balanceData:?[balanceData;();0b;(`parentPort;`portfolio;`currency;`balanceT1;`balanceT2;`balanceT3;`minBalanceTransferUsd;`odSubPort)!(`parentPort;`portfolio;`currency;balanceCol;(^;0f;`minBalanceTransferUsd);`overdraftSubPortId)];

1 个答案:

答案 0 :(得分:2)

在尝试创建字典时,您似乎正在创建一个嵌套的值列表,该字典的长度与键列表的长度不同。

例如,假设[Start]定义为balanceCol,然后:

`a`b`c

这里有6个值,但有8个键。要解决此问题,您可以将它们加在一起,如下所示:

q)count(`parentPort;`portfolio;`currency;`balanceT1;`balanceT2;`balanceT3;`minBalanceTransferUsd;`odSubPort)
8
q)balanceCol:`a`b`c
q)count(`parentPort;`portfolio;`currency;balanceCol;(^;0f;`minBalanceTransferUsd);`overdraftSubPortId)
6

至于使查询动态化,以下函数将允许您根据任意数量的日期列构建功能选择的字典,同时仍保留上面使用的列顺序。

`parentPort`portfolio`currency,balanceCol,enlist[(^;0f;`minBalanceTransferUsd)],`overdraftSubPortId