COPY_PARTITIONS_TO_TABLE
将分区从一个表复制到另一个表中。这种轻型分区复制可通过在两个表之间初始共享同一个存储来提高性能。完成复制操作后,各表彼此独立。用户对每个表执行操作时不会影响另一个表。这些操作可增加两个表所需的存储总量。
注意
虽然它们共享存储空间,但 Vertica 将这些分区视为独立对象来许可容量。例如,复制 1 TB 分区可能仅占用 1 TB 空间。但您的 Vertica 许可证会将它们视为占用 2 TB 空间的不同对象。这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
COPY_PARTITIONS_TO_TABLE (
'[[database.]schema.]source‑table',
'min‑range‑value',
'max‑range‑value',
'[[database.]schema.]target‑table'
[, 'force‑split']
)
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
source‑table
- 要复制的分区的源表。
-
min‑range‑value max‑range‑value
- 要复制的分区键的最小值和最大值,其中 min‑range‑value 必须 ≤ max‑range‑value。要复制某个分区,min‑range‑value 和 max‑range‑value 必须相等。
-
目标表
- 要复制的分区的目标表。 如果该表不存在,Vertica 将根据源表的定义,通过调用
CREATE TABLE
包含LIKE
和INCLUDING PROJECTIONS
子句来创建一个表。该新表会从源表中继承所有权。有关详细信息,请参阅复制表。 -
force‑split
可选的布尔实参,指定如果分区键的范围跨越多个容器或单个容器的某些部分,是否拆分 ROS 容器:
-
true
:根据需要拆分 ROS 容器。 -
false
(默认值):如果必须拆分 ROS 容器以实施此操作,则返回错误。
-
特权
非超级用户,为以下之一:
-
源表和目标表的所有者
-
对源表的 TRUNCATE 权限(如果 force-split 为 true)和 SELECT 权限,对目标表的 INSERT 权限
如果目标表不存在,则必须在目标架构上具有 CREATE 权限以启用表创建。
表属性要求
两个表的以下属性必须完全相同:
-
列定义,其中包括 NULL/NOT NULL 约束
-
分段
-
投影数量
-
投影排序顺序
-
主键和唯一键约束。但是,不必以完全相同的方式启用键约束。有关约束的详细信息,请参阅约束。
注意
如果目标表已启用主键或唯一键约束,并且复制或移动分区会将重复的键值插入到目标表中,那么 Vertica 将回退此操作。 -
检查约束。对于 MOVE_PARTITIONS_TO_TABLE 和 COPY_PARTITIONS_TO_TABLE,Vertica 仅在目标表上强制执行已启用的检查约束。对于 SWAP_PARTITIONS_BETWEEN_TABLES,Vertica 会在两个表上强制执行已启用的检查约束。如果违反了已启用的检查约束,Vertica 将回退此操作。
-
文本索引的数量和定义。
此外,如果源表上存在访问策略,则必须满足以下条件:
-
两个表上的访问策略必须相同。
-
以下其中一项必须为真:
-
执行用户拥有源表。
-
AccessPolicyManagementSuperuserOnly
设置为 true。有关详细信息,请参阅管理访问策略。
-
表限制
以下限制适用于源表和目标表:
-
如果源分区和目标分区位于不同的存储层中,Vertica 将返回一个警告,但操作继续进行。分区仍然位于它们的现有存储层中。
-
目标表不能是不可变的。
-
不能将以下表用作源表或目标表:
-
临时表
-
虚拟表
-
系统表
-
外部表
-
示例
如果调用 COPY_PARTITIONS_TO_TABLE
且目标表不存在,该函数将自动创建此表。在以下示例中,目标表 partn_backup.tradfes_200801
不存在。 COPY_PARTITIONS_TO_TABLE
创建该表并复制分区。Vertica 还会复制与源表关联的所有约束,外键约束除外。
=> SELECT COPY_PARTITIONS_TO_TABLE (
'prod_trades',
'200801',
'200801',
'partn_backup.trades_200801');
COPY_PARTITIONS_TO_TABLE
-------------------------------------------------
1 distinct partition values copied at epoch 15.
(1 row)