Как реализовать функцию запроса?



1.Таблица 1:



([ID:`1`2`3]Name:`A`B`C;Client:`P`Q`S;ClientType:`QW`DS`WW;NameType:`jj`ll`oo;Basket:`QD`IO`LK;Sepal:5.1 4.5 23.5;Length:2 34 6;Species:`setosa`setosa`setosa)


2.напишите простую функцию для выбора данных таблицы 1



api:{[Params]
if [Params~();Params:()!()];
defaultCols:`ID`Name`Client!(`ID`Name`Client);
if[`extraCols in key Params;
defaultCols:defaultCols,Params[`extraCols]!Params `extraCols];
: ?[ select from table1;();0b;defaultCols];
}


3.тест api[(enlist[`extraCols]!enlist(`Species`Length))]



 ID Name  Client    Species  Length
1 A B setosa 2
2 B Q setosa 34
3 C S setosa 6


Когда я использовал один Params для тестирования: api[(enlist[`extraCols]!enlist(`Species))]
Но тип результата error.In мой ограниченный опыт в этом вопросе . Не могли бы вы помочь мне понять это? спасибо.



И я хочу получить ниже результат и как изменить мой api



ID Name  Client    Species
1 A B setosa
2 B Q setosa
3 C S setosa
257   1  
kdb

1 ответ:

Я полагаю, что ошибка type исходит из утверждения в вашем if условии:

if[`extraCols in key Params;
 defaultCols:defaultCols,Params[`extraCols]!Params `extraCols]

Вы создаете словарь Params[`extraCols]!Params `extraCols

Если есть только один элемент в Params`extraCols , то вам нужно будет включить его при создании словаря, чтобы избежать такой ошибки типа, т. е.:

enlist[Params`extraCols]!enlist Params`extraCols

Также стоит поместить точку останова внутри функции, чтобы проверить тип аргументов и дать себе возможность выполнить отладку. Тогда вы сможете увидеть, что Params`extraCols является ли атом `Species (должен иметь тип -11h), а не список.

Comments

    Ничего не найдено.