由于检查约束,Alter table switch 语句失败
Alter table switch statement failed due to check constraints
我有一个场景,我将平面文件加载到 3 个暂存 tables 并切换到分区 table。
当我尝试从分段切换到分区 table 时,出现以下错误。你能帮忙吗?
这是文件组名称
PRIMARY
FG1
FG2
FG3
FG4
这是分区架构,
CREATE PARTITION FUNCTION PAR_FN (bigint) AS RANGE LEFT FOR VALUES (1,2,3,4)
CREATE PARTITION SCHEME PAR_SCHEMA AS PARTITION PAR_FN TO (
FG1, FG2, FG3, FG4, PRIMARY
)
CREATE TABLE TEMP1
(O_ORDERKEY bigint NOT NULL,
O_CUSTKEY int NOT NULL)
ON PAR_SCHEMA (O_ORDERKEY)
CREATE TABLE TEMP2
(O_ORDERKEY bigint NOT NULL,
O_CUSTKEY int NOT NULL)
ON PAR_SCHEMA (O_ORDERKEY)
CREATE TABLE TEMP3
(O_ORDERKEY bigint not null,
O_CUSTKEY int not null)
ON PAR_SCHEMA (O_ORDERKEY)
create table TEMP4
(O_ORDERKEY bigint NOT NULL,
O_CUSTKEY int NOT NULL)
ON PAR_SCHEMA (O_ORDERKEY)
ALTER TABLE TEMP1 WITH CHECK ADD CONSTRAINT check_TEMP1
CHECK (O_ORDERKEY <=N'1')
ALTER TABLE TEMP2 WITH CHECK ADD CONSTRAINT check_TEMP2
CHECK (O_ORDERKEY >N'1' AND O_ORDERKEY <=N'2')
ALTER TABLE TEMP3 WITH CHECK ADD CONSTRAINT check_TEMP3
CHECK (O_ORDERKEY >N'2' AND O_ORDERKEY <=N'3')
ALTER TABLE TEMP4 WITH CHECK ADD CONSTRAINT check_TEMP4
CHECK (O_ORDERKEY >N'3' AND O_ORDERKEY <=N'4')
最后是切换分区,
ALTER TABLE TEMP1 SWITCH TO MAIN PARTITION 1;
ALTER TABLE TEMP2 SWITCH TO MAIN PARTITION 2;
ALTER TABLE TEMP3 SWITCH TO MAIN PARTITION 3;
ALTER TABLE TEMP4 SWITCH TO MAIN PARTITION 4;
主要 tables 和暂存 tables 之间的唯一区别是暂存 [=27=]s 在 O_ORDERKEY
上具有默认值。 (即 1 表示温度 1,2 表示温度 2 等)
用于切换数据的 table 的定义必须完全相同 (requirements)。与 table 定义的任何偏差都将阻止切换数据。
切换时不会触发任何处理(这就是切换如此有用的原因),并且数据仍必须符合所有约束。
满足分区切换条件的唯一方法是使用完全相同的 DDL 脚本生成两个 table。只有 table 的名称及其约束和索引的名称必须不同。
我有一个场景,我将平面文件加载到 3 个暂存 tables 并切换到分区 table。
当我尝试从分段切换到分区 table 时,出现以下错误。你能帮忙吗?
这是文件组名称
PRIMARY
FG1
FG2
FG3
FG4
这是分区架构,
CREATE PARTITION FUNCTION PAR_FN (bigint) AS RANGE LEFT FOR VALUES (1,2,3,4)
CREATE PARTITION SCHEME PAR_SCHEMA AS PARTITION PAR_FN TO (
FG1, FG2, FG3, FG4, PRIMARY
)
CREATE TABLE TEMP1
(O_ORDERKEY bigint NOT NULL,
O_CUSTKEY int NOT NULL)
ON PAR_SCHEMA (O_ORDERKEY)
CREATE TABLE TEMP2
(O_ORDERKEY bigint NOT NULL,
O_CUSTKEY int NOT NULL)
ON PAR_SCHEMA (O_ORDERKEY)
CREATE TABLE TEMP3
(O_ORDERKEY bigint not null,
O_CUSTKEY int not null)
ON PAR_SCHEMA (O_ORDERKEY)
create table TEMP4
(O_ORDERKEY bigint NOT NULL,
O_CUSTKEY int NOT NULL)
ON PAR_SCHEMA (O_ORDERKEY)
ALTER TABLE TEMP1 WITH CHECK ADD CONSTRAINT check_TEMP1
CHECK (O_ORDERKEY <=N'1')
ALTER TABLE TEMP2 WITH CHECK ADD CONSTRAINT check_TEMP2
CHECK (O_ORDERKEY >N'1' AND O_ORDERKEY <=N'2')
ALTER TABLE TEMP3 WITH CHECK ADD CONSTRAINT check_TEMP3
CHECK (O_ORDERKEY >N'2' AND O_ORDERKEY <=N'3')
ALTER TABLE TEMP4 WITH CHECK ADD CONSTRAINT check_TEMP4
CHECK (O_ORDERKEY >N'3' AND O_ORDERKEY <=N'4')
最后是切换分区,
ALTER TABLE TEMP1 SWITCH TO MAIN PARTITION 1;
ALTER TABLE TEMP2 SWITCH TO MAIN PARTITION 2;
ALTER TABLE TEMP3 SWITCH TO MAIN PARTITION 3;
ALTER TABLE TEMP4 SWITCH TO MAIN PARTITION 4;
主要 tables 和暂存 tables 之间的唯一区别是暂存 [=27=]s 在 O_ORDERKEY
上具有默认值。 (即 1 表示温度 1,2 表示温度 2 等)
用于切换数据的 table 的定义必须完全相同 (requirements)。与 table 定义的任何偏差都将阻止切换数据。
切换时不会触发任何处理(这就是切换如此有用的原因),并且数据仍必须符合所有约束。
满足分区切换条件的唯一方法是使用完全相同的 DDL 脚本生成两个 table。只有 table 的名称及其约束和索引的名称必须不同。