KDB + Functional Select Динамические столбцы - PullRequest
0 голосов
/ 03 июня 2018

Как я могу динамически переименовать более 1 столбца из таблицы?

Например: я хочу разобрать 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 голосов
/ 03 июня 2018

Похоже, вы создаете вложенный список значений при попытке создать словарь, длина которого не равна длине списка ключей.

Например, скажем, balanceCol определяется как `a`b`c затем:

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

Здесь есть 6 значений, но 8 ключей.Чтобы исправить это, вы можете объединить их элементы следующим образом:

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

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

f:{[d]
  k:`parentPort`portfolio`currency,(`$"balanceT",/:string 1+til count d),`minBalanceTransferUsd`odSubPort;
  v:`parentPort`portfolio`currency,d,enlist[(^;0f;`minBalanceTransferUsd)],`overdraftSubPortId;
  :k!v;
 };
...