使用STREAM LOAD默认值没有生效

【详述】建表DDL:
CREATE TABLE IF NOT EXISTS customer (
insert_time datetime DEFAULT current_timestamp,
client_id bigint ,
client_customer STRING
)
DUPLICATE KEY(insert_time,client_id)
PROPERTIES(
“replication_num” = “1”
);
1.通过stream load 导入json时,没有insert_time,查询发现insert_time没有默认值。通过insert into的方式有。
stream load curl导入:
curl -v --location-trusted -H “Expect:100-continue” -H “format:json” -d “{“client_customer”:“customers/8075171247”}” -XPUT http://xxx.8030/api/test/customer/_stream_load

是不是stream load需要配置什么参数才有默认值?

我也遇到这个问题了,经过测试,default的三种指定方式:
1、 DEFAULT current_timestamp:本质是函数,如default (now())
2、 DEFAULT <默认值>:默认值为固定常数,如"100"
3、 DEFAULT <表达式>:如default (uuid()),本质也是函数
以上三种方式,只有2是正确的,其他两种都不是期望的默认值,而是数据类型的默认值(如string类型则为空字符串)。看起来stream load导入的时候,如果默认值是个常数,那么可以导入正确的默认值,如果默认值是个函数,那么无法导入正确的默认值,只会导入该字段数据类型的默认值,比如,如果是字符串,则导入为空字符串,如果是datetime类型,则导入为0001-01-01 00:00:00.0
这个不符合预期,看起来是bug,希望官方能修复。

写入的时候在header中指定下设置了default的列名,例如建表中update_time default current_timestamp,写入的时候-H “columns:current_timestamp,col0,col1……colx”

这里我没有描述清楚,漏了一些条件,我再详细描述一遍:
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');

目前如果想要实现不存在的主键写入的时候create time取current_timestamp,不能使用部分列更新。部分列更新的时候如果要更新例如update_time的字段,就需要按照如下方式使用

-H "columns:id,value,update_time=current_timestamp" \
-H "partial_update:true"

好的,谢谢

导入的时候需要指定列
-H “columns: client_id, client_customer”
不需要指定default列

请问一下,使用insert插入数据的情况下怎么实现此功能呢