如何在KDB(KX数据库)中插入记录

时间:2018-08-21 06:14:47

标签: insert kdb

我已使用以下语句在KDB中创建了一个名为test的表

test:([doc_id:`int$()];doc_displayid:`symbol$();doc_created_date:`date$();doc_aacess_date:`timestamp$();is_native_exist:`boolean$();file_size:`real$())

现在我要在其中插入一条记录

我尝试了很多类似

的方法
  
      
  1. 插入['test; (1;`D_30; .z.d; .z.P; T; 8.5)]
  2.   
  3. 插入['test([];`D_30; 2018.8.8; 2018.8.9T12:00:00.123; T; 8.5)]
  4.   
  5. 插入['test(1;`D_30; .z.d; 2018.8.9T12:00:00.123; T; 8.5)]
  6.   
  7. 插入['test(1;`D_30; .z.d; 2018.8.9T12:00:00.123; T; 8.5)]
  8.   
  9. '测试插入(1;`D_30; 2018.8.8; 2018.7.8T12:00:00.123; T; 8.5)
  10.   

但这不起作用。

所以请帮助我解决这个问题。

谢谢。

2 个答案:

答案 0 :(得分:5)

在测试表中的type之前检查输入变量insert。 基本上:

  • 您的1的类型为long,而不是int;
  • 2018.07.08T12:00:00.123的类型为datetime,而不是时间戳;
  • T不存在,对于布尔值,您应该写1b为true;
  • 8.5的类型为float,不是实数。

将以上内容转换为适当的格式时,insert可以使用,只要您使用反引号`test而不是'test

`test insert (1i;`D_30;2018.08.08;"p"$2018.07.08T12:00:00.123;1b;8.5e)


doc_id| doc_displayid doc_created_date doc_aacess_date               is_native_exist file_size
------| --------------------------------------------------------------------------------------
1     | D_30          2018.08.08       2018.07.08D12:00:00.123000000 1               8.5      

答案 1 :(得分:2)

您的insert语句存在多个问题,请查看KDB datatypes wiki以获取示例

  1. 符号应使用`(向上标记)定义,即`test,而不应该是'test

  2. doc_id被定义为int,因此您需要传递一个明确的i,例如1i2i

  3. 没有定义T布尔变量。

  4. Real应该在末尾用显式e定义。 (8.5e)

  5. 时间戳记定义为dateDtimespanD

  6. 您可以使用insertupsertupsert允许您覆盖已插入记录的记录,但是insert将确保您始终输入唯一键,否则将引发错误。


upsert[`test; (1i;`D_30;.z.d;.z.P;0b;8.5e)] 
insert[`test ;(2i;`D_30;2018.08.08;2018.08.09D12:00:00.123123123;0b;8.5e)]

doc_id| doc_displayid doc_created_date doc_aacess_date               is_native_exist file_size
------| --------------------------------------------------------------------------------------
1     | D_30          2018.08.21       2018.08.21D07:33:40.630975000 0                8.5
2     | D_30          2018.08.08       2018.08.09D12:00:00.123123123 0               8.5