CLONE TABLE可以复制表数据到另一个表中,极大的提高了数据迁移的效率。本文为您介绍CLONE TABLE的使用。

使用限制

  • 要求目标表与源表的Schema兼容。
  • 支持分区表和非分区表。
  • 目标表已存在时一次性复制分区的数量上限为10000个。
  • 目标表不存在时无分区数量限制,满足原子性。
  • 对同一个非分区表或者分区表的同一个分区,执行ClONE操作的次数不能超过7次。

命令格式

CLONE TABLE <[src_project_name.]src_table_name> [PARTITION(spec), ...]
 TO <[dest_project_name.]desc_table_name> [IF EXISTS (OVERWRITE | IGNORE)] ;

命令说明

将源表src_table_name中的数据复制到目标表desc_table_name中。
说明 将数据复制到目标表之后,建议您执行数据验证(例如,执行select count命令查看表的行数、执行desc命令查看表大小等方法)以确保复制后数据的准确性。

参数说明

  • src_table_name:源表名称。
  • src_project_name:源表所在项目空间名称。不指定时,默认为当前项目空间。
  • desc_table_name:目标表名称。
    • 当目标表不存在时,CLONE TABLE会创建目标表(目标表的创建使用的是CREATE TABLE LIKE语义)。
    • 当目标表已存在并指定IF EXISTS OVERWRITE,则覆盖目标表对应分区的数据。
    • 当目标表已存在并指定IF EXISTS IGNORE,则跳过已存在分区,不覆盖目标表已有分区的数据。
  • dest_project_name:目标表所在项目空间名称。不指定时,默认为当前项目空间。

示例

假设源表为分区表srcpart_copy和非分区表src_copy,表的元数据信息如下。
odps@ multi>read srcpart_copy;
+------------+------------+------------+------------+
| key        | value      | ds         | hr         |
+------------+------------+------------+------------+
| 1          | ok49       | 2008-04-09 | 11         |
| 1          | ok48       | 2008-04-08 | 12         |
+------------+------------+------------+------------+
odps@ multi>read src_copy;
+------------+------------+
| key        | value      |
+------------+------------+
| 1          | ok         |
+------------+------------+
  • 全量复制非分区表src_copy的数据至目标表src_clone。
    odps@ multi>clone table src_copy to src_clone;
    ID = 2019102303024544g2540cdv2
    OK
    --查看复制后目标表src_clone信息,验证数据准确性。
    odps@ multi>select * from src_clone;
  • 复制分区表srcpart_copy指定分区的数据至目标表srcpart_clone。
    odps@ multi>clone table srcpart_copy partition(ds="2008-04-09", hr='11') to srcpart_clone IF EXISTS OVERWRITE;
    ID = 20191023030534986g4540cdv2
    OK
    --查看复制后目标表srcpart_clone信息,验证数据准确性。
    odps@ multi>select * from srcpart_clone;
  • 全量复制分区表srcpart_copy的数据至目标表srcpart_clone并跳过目标表中已存在的分区。
    odps@ multi>clone table srcpart_copy to srcpart_clone IF EXISTS IGNORE;
    ID = 20191023030619196g5540cdv2
    OK
    --查看复制后目标表srcpart_clone信息,验证数据准确性。
    odps@ multi>select * from srcpart_clone;
  • 全量复制分区表srcpart_copy的数据至目标表srcpart_clone2。
    odps@ multi>clone table srcpart_copy to srcpart_clone2;
    ID = 20191023030825186g6540cdv2
    OK
    --查看复制后目标表srcpart_clone2信息,验证数据准确性。
    odps@ multi>select * from srcpart_clone2;