MOVE_PARTITIONS_TO_TABLE

将分区从一个表移至另一个表。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

MOVE_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‑valuemax‑range‑value 必须相等。
目标表
分区移动的目标表。 如果该表不存在,Vertica 将根据源表的定义,通过调用 CREATE TABLE 包含 LIKEINCLUDING PROJECTIONS 子句来创建一个表。该新表会从源表中继承所有权。有关详细信息,请参阅复制表
force‑split

可选的布尔实参,指定如果分区键的范围跨越多个容器或单个容器的某些部分,是否拆分 ROS 容器:

  • true:根据需要拆分 ROS 容器。

  • false (默认值):如果必须拆分 ROS 容器以实施此操作,则返回错误。

特权

非超级用户,为以下之一:

  • 源表和目标表的所有者

  • 对源表的 SELECT 和 TRUNCATE 权限,对目标表的 INSERT 权限

如果目标表不存在,则必须在目标架构上具有 CREATE 权限以启用表创建。

表属性要求

两个表的以下属性必须完全相同:

  • 列定义,其中包括 NULL/NOT NULL 约束

  • 分段

  • 分区子句

  • 投影数量

  • 投影排序顺序

  • 主键和唯一键约束。但是,不必以完全相同的方式启用键约束。有关约束的详细信息,请参阅约束

  • 检查约束。对于 MOVE_PARTITIONS_TO_TABLECOPY_PARTITIONS_TO_TABLE,Vertica 仅在目标表上强制执行已启用的检查约束。对于 SWAP_PARTITIONS_BETWEEN_TABLES,Vertica 会在两个表上强制执行已启用的检查约束。如果违反了已启用的检查约束,Vertica 将回退此操作。

  • 文本索引的数量和定义。

此外,如果源表上存在访问策略,则必须满足以下条件:

  • 两个表上的访问策略必须相同。

  • 以下其中一项必须为真:

    • 执行用户拥有源表。

    • AccessPolicyManagementSuperuserOnly 设置为 true。有关详细信息,请参阅管理访问策略

表限制

以下限制适用于源表和目标表:

  • 如果源分区和目标分区位于不同的存储层中,Vertica 将返回一个警告,但操作继续进行。分区仍然位于它们的现有存储层中。

  • 目标表不能是不可变的

  • 不能将以下表用作源表或目标表:

    • 临时表

    • 虚拟表

    • 系统表

    • 外部表

示例

请参阅存档分区

另请参阅