这里我没有描述清楚,漏了一些条件,我再详细描述一遍:
starrocks的建表语句:
CREATE TABLE `test_create_time4` (
`id` varchar(65533) NOT NULL COMMENT "主键",
`value` varchar(65533) NOT NULL COMMENT "值",
`id2` int(11) NOT NULL DEFAULT "12" COMMENT "测试default",
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT "创建时间"
) ENGINE=OLAP
PRIMARY KEY(`id`)
DISTRIBUTED BY HASH(`id`)
PROPERTIES (
"replication_num" = "1",
"in_memory" = "false",
"storage_format" = "DEFAULT",
"enable_persistent_index" = "false",
"compression" = "LZ4"
);
数据文件example1.csv内容:
1,aa
2,bb
3,ACC
4,ABB
5,CCC
我期望是数据文件的第一列对应id列,也就是主键列,第二列对应value列。表的第三列是测试default用的,第四列是创建时间列,第三列和第四列就用default值来填充。导入我用partial update,就是我期望第四列如果表里面没有已存在的主键数据,则用CURRENT_TIMESTAMP 填充时间,如果后续表里面有主键数据,则只更新第二列value列的数据,第四列时间字段的数据不更新。
导入语句:
curl --location-trusted -u test:pwd \
-H "label:test111" \
-H "Expect:100-continue" \
-H "column_separator:," \
-H "columns:id,value" \
-H "partial_update:true" \
-T example1.csv \
-XPUT http://be01:8040/api/test/test_create_time4/_stream_load
后续example1.csv里面value数据变更的话,再次导入已有主键的话则只更新value列数据,没有已有主键则用current_timestamp当前时间自动填充create_time字段。
但是我发现不对,create_time自动填充的是0001-01-01 00:00:00.0,不符合预期的
我换下面这种方式(columns里面加上create_time=current_timestamp)
curl --location-trusted -u test:pwd \
-H "label:test111" \
-H "Expect:100-continue" \
-H "column_separator:," \
-H "columns:id,value,create_time=current_timestamp" \
-H "partial_update:true" \
-T example1.csv \
-XPUT http://be01:8040/api/test/test_create_time4/_stream_load
结果就是每次导入,都会用当前时间更新create_time字段,也不符合预期。
通过mysql协议连接执行insert语句,是符合预期的,如下:
insert into test_create_time4 (id,value) values (1, 'AAA');