当我使用meta tableName
检查类型.get以下结果时:
c t f a
`description "C"
现在我想知道类型"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 ""
meta table1:
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]
}
答案 0 :(得分: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
查询字符串列效率低下。如果您的列具有一组经常重复的不同值,则将列转换为符号列将更有效
答案 1 :(得分:2)
类型“c”是单个字符(原子)。类型“C”是字符列表。以下是一些可能有助于演示的示例:
q)tbl:([] col:"abc")
q)meta tbl
c | t f a
---| -----
col| c
q)tbl
col
---
a
b
c
q)update col:enlist each col from `tbl / "cast"
`tbl
q)meta tbl
c | t f a
---| -----
col| C
q)tbl
col
----
,"a"
,"b"
,"c"
所以“演员”只是一个征集者。如果列与原子和列表混合,请小心,因为“每个列出”不会给你你想要的东西。你必须有条件地只使用这样的东西来招募那些只是原子的值。
q)enl:{$[0h>type x;enlist x;x]}
q)update col:enl each col from `tbl
答案 2 :(得分:2)
还有一种方法:
q)t:([] x:"abc")
q)meta update ("",/:x) from t
c| t f a
-| -----
x| C
附加空字符串的好处是,如果元素已经是列表,它将不会产生任何影响
q)t:([] x:"",/:"abc") / each element is already a list
meta[t]~meta update ("",/:x) from t
但是,应用enlist
会将数据类型更改为异构列表(type 0h
):
q)t:([] x:"",/:"abc")
q)meta update enlist each x from t
c| t f a
-| -----
x|