insert overwrite 支持动态分区

目前

create table test_overwrite(a int not null , b int, c int)
duplicate key (a)
partition by (a)

insert into test_overwrite values(1,2,1),(2,2,2),(3,3,3);
select * from test_overwrite;

insert overwrite test_overwrite partition (p1,p2,p3) select * from test_overwrite union all select 4,4,4;

报错: Error: The row is out of partition ranges. Please add a new partition… Row: [4, 4, 4]
动态分区为什么不能动态的新增分区呢

看建表语句中没有指定动态分区dynamic partition相关配置,相关配置可参考 https://docs.starrocks.io/zh/docs/table_design/dynamic_partitioning/

这种写法是 列表达式分区的写法,当前列表达式分区不支持数据导入时自动创建分区,可以考虑在建表时手动创建分区,或者使用 range分区方式+dynamic partition 动态创建分区

这种分区 在insert into时可以自动创建分区, 但是overwrite 分区时不行. 可不可以支持 overwrite分区时 写入数据时 没有分区自动创建分区
并且 insert overwrite select 的时候 自动根据查询中包含的分区 指定覆盖要写入的分区.
这个功能在业务层面实现很复杂, 数据开发人员无法指定分区名
下面这个是maxCompute的sql 分区覆盖功能比较好用

insert overwrite table sale_detail_dypart partition (sale_date='2013', region)

不支持类似hive的自动分区,我觉得这个功能挺实用的。
特别是在做增量导数数据的时候。希望社区后面版本能考虑下如何优化这块的特性。

1赞

是的, hive 和 maxCompute在这方面支持的比较好, 希望starrocks也能提供