如何实现查询功能?

时间:2018-05-25 05:23:54

标签: kdb

1.table1:

([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.编写一个简单的函数来选择table1数据

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.test 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

当我使用一个参数进行测试时:api[(enlist[`extraCols]!enlist(`Species))] 但结果类型错误。在我的经​​验有限。你能帮我理解一下吗?感谢。

我希望得到以下结果以及如何更改我的api

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

1 个答案:

答案 0 :(得分: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 atom `Species(应该具有类型-11h)而不是列表。