我已使用以下语句在KDB中创建了一个名为test
的表
test:([doc_id:`int$()];doc_displayid:`symbol$();doc_created_date:`date$();doc_aacess_date:`timestamp$();is_native_exist:`boolean$();file_size:`real$())
现在我要在其中插入一条记录
我尝试了很多类似
的方法
- 插入['test; (1;`D_30; .z.d; .z.P; T; 8.5)]
- 插入['test([];`D_30; 2018.8.8; 2018.8.9T12:00:00.123; T; 8.5)]
- 插入['test(1;`D_30; .z.d; 2018.8.9T12:00:00.123; T; 8.5)]
- 插入['test(1;`D_30; .z.d; 2018.8.9T12:00:00.123; T; 8.5)]
- '测试插入(1;`D_30; 2018.8.8; 2018.7.8T12:00:00.123; T; 8.5)
但这不起作用。
所以请帮助我解决这个问题。
谢谢。
答案 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以获取示例
符号应使用`
(向上标记)定义,即`test
,而不应该是'test
doc_id被定义为int
,因此您需要传递一个明确的i
,例如1i
,2i
没有定义T
布尔变量。
Real应该在末尾用显式e
定义。 (8.5e)
时间戳记定义为dateDtimespan
(D
)
您可以使用insert
或upsert
。 upsert
允许您覆盖已插入记录的记录,但是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