【详述】
通过stream load 删除数据时,当非主键字段中存在not null类型字段且在执行删除数据是仅指定主键字段值时候,会报错,导致删除失败
下面是问题复现的示例
创建测试表,为主键表模型,其中c_bh 是主键,c_col1 为not null
create table star.test_3 (
c_bh varchar(100) NOT NULL COMMENT "主键",
c_col1 varchar(100) NOT NULL ,
c_col2 varchar(100) NULL,
c_col3 varchar(300) NULL
) PRIMARY KEY (c_bh)
DISTRIBUTED BY HASH(c_bh) BUCKETS 3
PROPERTIES("replication_num" = "1",
"in_memory" = "false",
"storage_format" = "DEFAULT",
"enable_persistent_index" = "true");
插入测试数据
insert into star.test_3 values ('1','qwe','asd','zxc');
insert into star.test_3 values ('2','rty','fgh','cvb');
insert into star.test_3 values ('3','kiu','wsx','mjk');
查看表数据
mysql> select * from star.test_3;
+------+--------+--------+--------+
| c_bh | c_col1 | c_col2 | c_ajlx |
+------+--------+--------+--------+
| 1 | qwe | asd | zxc |
| 2 | rty | fgh | cvb |
| 3 | kiu | wsx | mjk |
+------+--------+--------+--------+
3 rows in set (0.03 sec)
用json文件类型格式通过stream load 删除数据
创建json文件,指定删除的数据主键值为1的数据
[root@node1 ~ ]# vi t_test3_del1.json
添加如下内容
{"c_bh":"1","dml_type":1}
执行http命令如下
curl -v --location-trusted -u root:root -H "strict_mode: true" -H "ignore_json_size:true" \
-H "format: json" -H "jsonpaths: [\"$.c_bh\",\"$.dml_type\"]" \
-H "columns: c_bh,dml_type, __op = dml_type " \
-T t_test3_del1.json -XPUT \
http://10.0.0.1:8330/api/star/test_3/_stream_load
执行报错,信息如下
{
"TxnId": 39556,
"Label": "b9de9d34-1ed6-40ad-92f1-81a491b9dbf1",
"Status": "Fail",
"Message": "Column has no default value. column: c_col1",
"NumberTotalRows": 0,
"NumberLoadedRows": 0,
"NumberFilteredRows": 0,
"NumberUnselectedRows": 0,
"LoadBytes": 0,
"LoadTimeMs": 0,
"BeginTxnTimeMs": 0,
"StreamLoadPlanTimeMs": 2,
"ReadDataTimeMs": 0,
"WriteDataTimeMs": 0,
"CommitAndPublishTimeMs": 0
* Connection #1 to host 10.0.0.2 left intact
}
从报错信息来看是由于c_col1字段没有默认值导致,请问这是如果只想通过主键字段值进行数据删除有什么方式可以实现?
【StarRocks版本】例如:2.4.1
【集群规模】例如:2fe(1 follower+1observer)+3be(fe与be混部)
【机器信息】CPU虚拟核/内存/网卡,48C/48G/千兆
【表模型】主键模型
【导入或者导出方式】stream load
【附件】