如何在kdb中使用"c"和"C"类型

Jam*_*mes 1 kdb

当我meta tableName以前检查类型.get结果如下:

c                t        f      a
`description     "C"
Run Code Online (Sandbox Code Playgroud)

现在我想知道类型"c"和之间的差异"C".以及如何将类型"c"转换为"C".

从下面的解释我可以得到,当表中有"c"类型时,我可以将其转换为"C"类型.我的新问题如下:表1:

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

显示如下:

ID Name  Client    Species  Length
 1    A     B        setosa    2
 2    B     Q        setosa    34
 3    C     S        setosa    6
Run Code Online (Sandbox Code Playgroud)

我想为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
    }
Run Code Online (Sandbox Code Playgroud)

结果:.get.table1[]

ID NAME  CLIENT    SPECIES  LENGTH  DESCRIP
 1    A     B        setosa    2       ""
 2    B     Q        setosa    34      ""
 3    C     S        setosa    6       ""
Run Code Online (Sandbox Code Playgroud)

元表1:

c             t   f   a
ID            s
NAME          s
CLIENT        s
LENGTH        j
DESCRIP       C
Run Code Online (Sandbox Code Playgroud)

现在,我想改变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]

}
Run Code Online (Sandbox Code Playgroud)

Mar*_*lly 6

类型"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
Run Code Online (Sandbox Code Playgroud)

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