【TiDB 版本】: v4.0.10
【问题描述】: 由於表格數據量大,欲遷移原本表最近14天數據到Partitioned Table, 創建分區表時出現
ERROR 8216 (HY000): Invalid auto random: column id is not the integer primary key, or table is created with alter-primary-key enabled
1. 是否分區表不能使用型態是BIGINT UNSIGNED AUTO_RANDOM欄位?
(我們有嘗試不使用AUTO_RANDOM 即可建立成功)
2. 如果是,我們如何從原始表搬移最近14天數據到Partitioned table ? 且仍需要此欄位有AUTO_RANDOM特性
原始表schema:
CREATE TABLE match_outcome_odds (
id bigint(20) unsigned NOT NULL /*T![auto_rand] AUTO_RANDOM(5) */ COMMENT ‘TIDB自動亂數產生不重複key’,
source varchar(20) NOT NULL ,
market_line_id varchar(200) NOT NULL ,
selection_id varchar(200) NOT NULL ,
match_id bigint(20) unsigned NOT NULL,
market_id smallint(5) unsigned NOT NULL’,
outcome_id mediumint(8) unsigned NOT NULL,
odds decimal(6,3) DEFAULT NULL ,
probability decimal(8,7) DEFAULT NULL ,
source_status tinyint(4) NOT NULL DEFAULT ‘-99’,
status tinyint(4) NOT NULL DEFAULT ‘-99’,
is_open tinyint(4) NOT NULL DEFAULT ‘0’,
source_created_at datetime DEFAULT CURRENT_TIMESTAMP COMMENT ‘source資料產生時間點’,
source_updated_at datetime DEFAULT CURRENT_TIMESTAMP COMMENT ‘source資料更新時間點’,
created_at datetime(6) DEFAULT CURRENT_TIMESTAMP(6) COMMENT ‘資料產生時間點’,
updated_at datetime(6) DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT ‘資料最後修改時點’,
PRIMARY KEY (id),
KEY idx_match_id (match_id),
KEY idx_market_line_id (market_line_id),
UNIQUE KEY uk_selection_id_source (selection_id,source),
KEY idx_updated_market_id (source_updated_at,match_id,market_id,market_line_id,source)
);
分區表schema:
CREATE TABLE match_outcome_odds_history2 (
id bigint(20) unsigned NOT NULL AUTO_RANDOM COMMENT ‘TIDB自動亂數產生不重複key’,
source varchar(20) NOT NULL ,
selection_id varchar(200) NOT NULL,
match_id bigint(20) unsigned NOT NULL,
market_id smallint(5) unsigned NOT NULL,
market_line_id varchar(200) NOT NULL,
outcome_id mediumint(8) unsigned NOT NULL ,
odds decimal(6,3) DEFAULT NULL,
source_status varchar(20) NOT NULL ,
source_created_at datetime DEFAULT CURRENT_TIMESTAMP COMMENT ‘來源資料產生時間點’,
created_at datetime(6) DEFAULT CURRENT_TIMESTAMP(6) COMMENT ‘資料產生時間點’,
PRIMARY KEY (id,created_at),
KEY idx_match_id (match_id),
KEY idx_created_at (created_at)
) PARTITION BY RANGE (to_days(created_at) ) (
PARTITION p0 VALUES LESS THAN (to_days(‘2021-02-03’)),
PARTITION p1 VALUES LESS THAN (to_days(‘2021-02-04’)),
PARTITION p2 VALUES LESS THAN (to_days(‘2021-02-05’)),
PARTITION p3 VALUES LESS THAN (to_days(‘2021-02-06’)),
PARTITION p4 VALUES LESS THAN (to_days(‘2021-02-07’)),
PARTITION p5 VALUES LESS THAN (to_days(‘2021-02-08’)),
PARTITION p6 VALUES LESS THAN (to_days(‘2021-02-09’)),
PARTITION p7 VALUES LESS THAN (to_days(‘2021-02-10’)),
PARTITION p8 VALUES LESS THAN (to_days(‘2021-02-11’)),
PARTITION p9 VALUES LESS THAN (to_days(‘2021-02-12’)),
PARTITION p10 VALUES LESS THAN (to_days(‘2021-02-13’)),
PARTITION p11 VALUES LESS THAN (to_days(‘2021-02-14’)),
PARTITION p12 VALUES LESS THAN (to_days(‘2021-02-15’)),
PARTITION p13 VALUES LESS THAN (to_days(‘2021-02-16’)),
PARTITION p14 VALUES LESS THAN (to_days(‘2021-02-17’)),
PARTITION p15 VALUES LESS THAN (to_days(‘2021-02-18’)),
PARTITION p16 VALUES LESS THAN (to_days(‘2021-02-19’)),
PARTITION p17 VALUES LESS THAN (to_days(‘2021-02-20’)),
PARTITION p18 VALUES LESS THAN (to_days(‘2021-02-21’)),
PARTITION p19 VALUES LESS THAN (to_days(‘2021-02-22’)),
PARTITION p20 VALUES LESS THAN (to_days(‘2021-02-23’)),
PARTITION p21 VALUES LESS THAN (to_days(‘2021-02-24’)),
PARTITION p22 VALUES LESS THAN (to_days(‘2021-02-25’)),
PARTITION p23 VALUES LESS THAN (to_days(‘2021-02-26’)),
PARTITION p24 VALUES LESS THAN (to_days(‘2021-02-27’)),
PARTITION p25 VALUES LESS THAN (to_days(‘2021-02-28’)),
PARTITION p26 VALUES LESS THAN (MAXVALUE)
) ;




