本文为您介绍如何通过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
权限及目标项目的CreateTable
、CreateInstacne
权限,拥有权限后执行克隆命令即可。授权详情请参见项目级对象操作权限授权。
同Region不同云账号间的数据迁移
跨账号进行同步数据,需要所将目标项目Owner阿里云账户添加至数据源项目空间,并且赋予源项目的CreateTable
、CreateInstacne
权限,最后通过Clone Table功能实现同Region跨账号数据迁移。
在迁移数据表源项目添加目标项目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;
添加阿里云账号详情请参见添加阿里云账号用户(项目级别),授权详情请参见直接为用户授权。
在目标项目执行克隆命令。
由于跨云账号操作一定是由阿里云账号进行操作,因此默认拥有目标项目内所有数据权限,无需单独授权。
use projectB; --将proejctA中的表克隆至projectB; clone TABLE projectA.<tablename> to projectB.<tablename> IF EXISTS OVERWRITE;
在目标项目确认表数据是否迁移成功。
select * from <tablename> limit 2;
重要建议完成数据迁移后,及时将目标项目Owner阿里云账号从数据源项目中移除,以保证数据安全。移除操作详情请参见删除阿里云账号用户(项目级别)。