首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >KDB:如何将字符串数据类型分配给所有列

KDB:如何将字符串数据类型分配给所有列
EN

Stack Overflow用户
提问于 2018-12-06 04:24:07
回答 2查看 1.2K关注 0票数 1

在创建表Tab时,我将列指定为string,

Tab: ([Key1:string()] Col1:string();Col2:string();Col3:string())

但是列数据类型(t)为空。我认为将列指定为字符串没有任何效果。

meta Tab

c     t     f     a
--------------------
Key1            
Col1            
Col2            
Col3            

在我用Java做了一次批量插入之后...

c.Dict dict = new c.Dict((Object[]) columns.toArray(new String[columns.size()]), data);
c.Flip flip = new c.Flip(dict);

conn.c.ks("upsert", table, flip);

数据类型都是符号:

meta Tab

c     t     f     a
--------------------
Key1  s         
Col1  s         
Col2  s         
Col3  s

如何将列的数据类型指定为字符串,并使其保持为字符串?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-06 04:44:35

不能使用as字符串定义空表中的列,因为它们仅仅是字符列表的列表

您可以将它们设置为空列表,这就是您的代码正在做的事情。

但是,该列将采用插入其中的任何数据的类型。

真正的问题是什么是您的java进程发送符号,而它应该发送字符串。在发布到KDB之前,您需要在那里进行更改

注意:如果你定义为字符,你仍然不能插入字符串

q)Tab: ([Key1:`char$()] Col1:`char$();Col2:`char$();Col3:`char$())
q)Tab upsert  ([Key1:enlist"test"] Col1:enlist"test";Col2:enlist"test";Col3:enlist "test")
'rank
  [0]  Tab upsert  ([Key1:enlist"test"] Col1:enlist"test";Col2:enlist"test";Col3:enlist "test")
           ^
q)Tab: ([Key1:()] Col1:();Col2:();Col3:())
q)Tab upsert  ([Key1:enlist"test"] Col1:enlist"test";Col2:enlist"test";Col3:enlist "test")
Key1  | Col1   Col2   Col3
------| --------------------
"test"| "test" "test" "test"
票数 2
EN

Stack Overflow用户

发布于 2018-12-06 18:31:59

KDB不允许在创建表时将列类型定义为list。因此,这意味着您不能将列类型定义为String,因为它也是一个列表。

为此,唯一的方法是将列定义为空列表,如下所示:

 q) t:([]id:`int$();val:())

然后,当您向该表中插入数据时,该列将自动采用该数据的类型。

 q)`t insert (4;"row1")
 q) meta t
 c  | t f a
 ---| -----
 id | i    
 val| C 

在您的示例中,一种选择是从用户'emc211‘提到的Java process发送字符串数据,另一种选择是在插入之前在KDB process中将数据转换为字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53640171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档