九零不老心
发布于 2023-12-12 / 24 阅读 / 0 评论 / 0 点赞

doris增加unique key字段列

doris为unique key表新增复合主键列实现过程

  • 原表结构

CREATE TABLE `test01` (
  `live_id` varchar(200) NOT NULL COMMENT '直播ID',
  `actiondate` varchar(200) NOT NULL COMMENT '开始日期',
  `live_name` text NULL COMMENT '直播名称',
  `live_cover_image` text NULL COMMENT '直播图片'
) ENGINE=OLAP
UNIQUE KEY(`live_id`, `actiondate`)
COMMENT 'OLAP'
DISTRIBUTED BY HASH(`live_id`, `actiondate`) BUCKETS 16;
  • 修改原表名称

alter table test01 rename test01_bak;
  • 创建新结构的表,新增day_delta复合主键列

CREATE TABLE `test01` (
  `live_id` varchar(200) NOT NULL COMMENT '直播ID',
  `actiondate` varchar(200) NOT NULL COMMENT '开始日期',
  `day_delta` int(11) NOT NULL COMMENT '时间差',
  `live_name` text NULL COMMENT '直播名称',
  `live_cover_image` text NULL COMMENT '直播图片'
) ENGINE=OLAP
UNIQUE KEY(`live_id`, `actiondate`, `day_delta`)
COMMENT 'OLAP'
DISTRIBUTED BY HASH(`live_id`, `actiondate`, `day_delta`) BUCKETS 16;
  • 将旧表数据插入新的表(请写明所有的列)

insert into test01 (live_id,actiondate,live_name,live_cover_image,day_delta)
select ive_id,actiondate,live_name,live_cover_image,90 as day_delta from test01_bak;

如果使用下面的插入sql会报错

insert into test01
select *,90 as day_delta from test01_bak;
-- 报错
-- Reason: column_name[day_delta], null value for not null column, type=INT. src line [];