在kdb中插入具有许多空值的记录

时间:2017-06-27 15:54:01

标签: kdb

假设我只想将第一列和其他列插入为null。什么是最快的方式?并且可能有不同的类型。

假设有10列。这是我能想到的:

`tab insert (`abcd;`;"";`;"";"";`;`;`;`;`;`)???

有更快的方法吗?

3 个答案:

答案 0 :(得分:1)

尝试指定要以字典格式插入的值(第二参数):

q)tab:([]a:1 2 3;b:3 4 5;c:4 5 6;d:5 6 7;e:6 7 8)
q)`tab insert `a`b!1 2
q)tab
a b c d e
---------
1 3 4 5 6
2 4 5 6 7
3 5 6 7 8
1 2

编辑:

/1 record/1 column
q)dict:enlist[`column1]!enlist[`abcd]
q)`tab insert dict

/N records/1 column
q)dict:enlist[`column1]!enlist(`abcd`efgh`ijkl)
q)`tab insert flip dict

答案 1 :(得分:1)

你正在寻找的技巧是"首先0#" - 在任何数据类型上使用这将为该数据类型创建null,允许您在实际数据插入旁边动态插入空值

//create typed tab(schema) with all possible datatypes except c
tab:flip (`$'c)!(c:.Q.t except " ")$\:()

//(first 0#) each datatype to gather nulls for every column
//modify first column as you want to insert real data there
//insert results to tab
`tab insert @[(first 0#) each flip tab;first cols tab;:;1b]

//if you want to insert two actual events, say for col m and col t
`tab insert @[(first 0#) each flip tab;`m`t;:;(2017.01m;10:00t)]
如果您需要其他列

http://code.kx.com/q/ref/dotq/#qff-append-columns也可能会更有用

HTH,
肖恩

答案 2 :(得分:0)

如果您正确定义了初始表的架构,我相信您不需要为您不想更新的列提供null / default值。

例如,

    t:flip `date`sym`ts`qty!(`d1`d1`d1`d1`d1`d1`d2;`s1`s1`s2`s1`s1`s2`s1;`t1`t1`t2`t3`t4`t5`t1;-100 -100 200 200 500 -300 -400)
    `t insert (`date`qty)!(`d10; -88f)
上面的

只会添加date and qty值,当你通过

检查表的类型时
    meta t

你可以看到表的类型没有改变