首页 > 解决方案 > 如何在 kdb 中使用类型“c”和“C”

问题描述

当我用来meta tableName检查类型时,得到以下结果:

c                t        f      a
`description     "C"

现在我想知道 type"c""C". 以及如何将类型"c"转换为"C".

从下面的解释中我可以知道,当表中有“c”类型时,我可以将其转换为“C”类型。我的新问题如下:table1:

([ID:`1`2`3]Name:`A`B`C;Client:`P`Q`S;Species:`setosa`setosa`setosa   ;Length:2 34 6)

显示如下:

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

我想为table1写一个简单的api:

.get.table1:{[Params]
  if[Params~();Params:()!()];
   select ID:ID,NAME:Name,CLIENT:Client,SPECIES:Species,LENGTH:Length,DESCRIP:count[i]#enlist "" from table1
    }

结果:.get.table1[]

ID NAME  CLIENT    SPECIES  LENGTH  DESCRIP
 1    A     B        setosa    2       ""
 2    B     Q        setosa    34      ""
 3    C     S        setosa    6       ""

元表1:

c             t   f   a
ID            s
NAME          s
CLIENT        s
LENGTH        j
DESCRIP       C

现在,我想改变一个 api 的写作风格,以获得与上面的 api 相同的结果。我该怎么办?(如何描述 DESCRIP 行)

.get.table1:{[Params]
   if[Params~();Params:()!()];
   defaultCols:`ID`NAME`CLIENT`SPECIES`LENGTH`DESCRIP!(`ID;`Name;`Client;`Species`;`Length;**DESCRIP**)
   if[`extraCols in key Params;
   extraCols:$[-11h=type Params`extraCols;enlist[Params`extraCols]!enlist 
Params`extraCols;(Params`extraCols)!Params`extraCols];
defaultCols:defaultCols,extraCols];
?[select from table1;();0b;defaultCols]

}

标签: kdb

解决方案


类型“c”表示列中的每个元素都是原子的,而类型“C”表示列中的每个元素都是该类型的列表。要将“c”转换为“C”,您可以将每个字符加入到列表中。

q) meta ([] c:"123")
c| t f a
-| -----
c| c

q) meta ([] c:enlist each "123")
c| t f a
-| -----
c| C

查询字符串列将是低效的。如果您的列有一组经常重复的不同值,则将该列转换为符号列会更有效


推荐阅读