SWAP_PARTITIONS_BETWEEN_TABLES

在两个表之间切换分区。

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

行为类型

易变

语法

SWAP_PARTITIONS_BETWEEN_TABLES (
    '[[database.]schema.]staging‑table',
    'min‑range‑value',
    'max‑range‑value',
    '[[database.]schema.]target‑table'
     [, force‑split]
)

参数

[database.]schema

数据库和架构。默认架构为 public。如果指定一个数据库,它必须是当前数据库。

临时表
用于切换分区的临时表。
min‑range‑value max‑range‑value
要交换的分区键的最小值和最大值,其中 min‑range‑value 必须 ≤ max‑range‑value。要交换某个分区,min‑range‑valuemax‑range‑value 必须相等。
目标表
待切换分区的表。目标表不能与临时表相同。
force‑split

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

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

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

特权

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

  • 源表和目标表的所有者

  • 目标表和源表:TRUNCATE、INSERT、SELECT

要求

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

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

  • 分段

  • 分区子句

  • 投影数量

  • 投影排序顺序

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

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

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

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

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

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

    • 执行用户拥有目标表。

    • AccessPolicyManagementSuperuserOnly 设置为 true。

限制

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

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

  • 目标表不能是不可变的

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

    • 临时表

    • 虚拟表

    • 系统表

    • 外部表

示例

请参阅交换分区