使用CLONE TABLE实现同地域MaxCompute跨项目数据迁移

本文为您介绍如何通过CLONE TABLE功能实现同Region的MaxCompute项目数据迁移,包含两种使用场景:同Region同云账号内不同项目的数据迁移和同Region不同云账号间的项目数据迁移。

CLONE TABLE功能介绍

CLONE TABLE功能可以高效地将源表中的数据复制到目标表中。将数据复制到目标表之后,建议您执行数据验证以确保复制后数据的准确性,例如执行select命令查看表的数据、执行desc命令查看表的大小。

使用限制

  • 目标表与源表的Schema需要兼容。

  • 支持分区表和非分区表,支持对聚簇表使用clone table命令复制表数据。

  • 目标表已存在时,一次性复制分区的数量上限为10000个。

  • 目标表不存在时,无分区数量限制,满足原子性。

  • 对同一个非分区表或分区表的同一个分区,执行clone table命令的次数不能超过6次。

  • 不支持在跨区域的MaxCompute项目之间使用clone table命令复制表数据。

  • 不支持对外部表使用clone table命令复制表数据。

命令格式

clone table <[<src_project_name>.]<src_table_name>> [partition(<pt_spec>), ...]  to <[<dest_project_name>.]<dest_table_name>> [if exists [overwrite | ignore]] ;

参数详细介绍与使用示例请参见CLONE TABLE

同Region同云账号内不同项目的数据迁移

  • 若阿里云账号操作,则直接在源项目执行克隆命令即可。

    set odps.namespace.schema=false;
    
    --将proejctA中的表克隆至projectB;
    clone TABLE projectA.<tablename> to projectB.<tablename> IF EXISTS OVERWRITE;
  • 若RAM用户操作,需要确认操作者是否拥有数据源项目内源表的SELECT权限及目标项目的CreateTableCreateInstacne权限,拥有权限后执行克隆命令即可。授权详情请参见项目级对象操作权限授权

同Region不同云账号间的数据迁移

跨账号进行同步数据,需要所将目标项目Owner阿里云账户添加至数据源项目空间,并且赋予源项目的CreateTableCreateInstacne权限,最后通过Clone Table功能实现同Region跨账号数据迁移。

  1. 在迁移数据表源项目添加目标项目Owner的阿里云账号并赋予权限:

    --进入数据源项目projectA;
    use projectA;
    --将目标项目(projectB)Owner的阿里云账号(projectB_owner@aliyunid.com)添加至源项目空间(projectA);
    add user ALIYUN$projectB_owner@aliyunid.com;
    --赋予源项目的CreateTable、CreateInstacne权限
    grant CreateTable,CreateInstance on project projectA to user ALIYUN$projectB_owner@aliyunid.com;
    --赋予源表的Select权限
    grant Select on table <tablename> to user ALIYUN$projectB_owner@aliyunid.com;

    添加阿里云账号详情请参见添加阿里云账号用户(项目级别),授权详情请参见直接为用户授权

  2. 在目标项目执行克隆命令。

    由于跨云账号操作一定是由阿里云账号进行操作,因此默认拥有目标项目内所有数据权限,无需单独授权。

    use projectB;
    --将proejctA中的表克隆至projectB;
    clone TABLE projectA.<tablename> to projectB.<tablename> IF EXISTS OVERWRITE;
  3. 在目标项目确认表数据是否迁移成功。

    select * from <tablename> limit 2;
    重要

    建议完成数据迁移后,及时将目标项目Owner阿里云账号从数据源项目中移除,以保证数据安全。移除操作详情请参见删除阿里云账号用户(项目级别)