使用事务暂存加载
默认情况下,COPY
会自动提交自身和其他当前事务,加载临时表或查询外部表时除外。您可以通过使用 NO COMMIT
选项限定 COPY
语句来覆盖此行为。当您指定 NO COMMIT
时,Vertica 不会提交事务,直到您明确发出 COMMIT
语句为止。
您可以通过两种方式使用 COPY...NO COMMIT
:
-
将多个
COPY
命令作为单个事务执行。 -
在提交加载之前检查数据是否违反约束。
在同一个事务中合并多个 COPY 语句
当您在同一个事务中合并多个 COPY...NO COMMIT
语句时,Vertica 可以将所有操作的数据合并到更少的
ROS 容器中,从而更高效地执行操作。
例如,以下一组 COPY...NO COMMIT
语句会按顺序执行若干复制语句,然后再全部提交这些数据。这样,所有复制数据都会作为单个事务提交或回退。
COPY... NO COMMIT;
COPY... NO COMMIT;
COPY... NO COMMIT;
COPY X FROM LOCAL NO COMMIT;
COMMIT;
提示
确保在使用COPY...NO COMMIT
之前提交或回退任何以前的 DML 操作。否则,COPY...NO COMMIT
可能会在其自己的事务中包含仍在进行中的早期操作,例如 INSERT
。在这种情况下,先前的操作和复制操作合并为一个事务并一起提交。
检查约束违规
如果在目标表中未强制执行约束,则 COPY
在加载数据时不会检查是否有约束违规。要对加载数据的约束违规进行故障排除,请使用 COPY...NO COMMIT
和
ANALYZE_CONSTRAINTS
。这样做可以让您在提交加载操作之前检测到约束违规,并在必要时回退操作。有关详细信息,请参阅检测约束违规。