本文为您介绍如何通过跨项目数据访问实现不同Region的MaxCompute项目数据迁移,包括两种使用场景:同云账号内不同Region的项目数据迁移;不同云账号间不同Region的项目数据迁移。
使用限制
此方案只支持在中国内地地域间实现不同地域间的MaxCompute项目数据迁移,不支持在除中国内地地域以外的地域间使用。
同云账号内不同Region的项目数据迁移
将源项目(projectA)的表数据迁移至目标项目(projectB),且云账号内的项目Owner为同一个阿里云账号。
阿里云账号操作,可直接进入目标项目,创建目标表:
创建新表的同时复制数据
--进入目标项目projectB; use projectB; set odps.namespace.schema=false; --基于projectA内的数据源表创建新表并复制数据。 create table [if not exists] <table_name> [lifecycle <days>] as select * from projectA.<table_name>;
创建新表后再复制数据
--进入目标项目projectB; use projectB; set odps.namespace.schema=false; --基于数据源表创建具备相同结构的新表但不复制数据。 create table [if not exists] <table_name> like projectA.<table_name> [lifecycle <days>]; --将数据源表的数据写入目标项目中的新表: insert {into|overwrite} table <table_name> [partition (<pt_spec>)] [(<col_name> [,<col_name> ...)]] select * from projectA.<table_name> [zorder by <zcol_name> [, <zcol_name> ...]];
更多创建表操作请参见表操作。
非阿里云账号(RAM用户或RAM角色)操作,需要确保数据源项目状态为正常,且操作人拥有数据源项目源表的
Select
操作权限及目标项目的CreateInstance
、CreateTable
权限。数据源项目源表的Select操作权限可以通过两种方式获取:方式一:将RAM账号添加至数据源项目A(操作见用户规划与管理),并授予需要访问的资源的权限(授权办法见通过命令管理用户权限),即可实现RAM账号对数据源表的访问。
方式二:基于Package授权机制实现跨Region访问项目。阿里云账号将数据源项目A内的资源打包为PackageA,并设置允许目标项目projectB安装,项目projectB安装此PackageA后,对项目projectB内的操作人账号授予PackageA的读取权限。具体操作办法见基于Package跨项目访问资源。
不同云账号间不同Region的项目数据迁移
步骤一:授予目标项目Owner云账号对源项目数据的读取权限
MaxCompute支持通过以下两种方式实现跨阿里云账号访问项目:
方式一:将目标项目projectB对应的Owner阿里云账号B(projectB_owner@aliyunid.com)添加至数据源项目projectA(操作见用户规划与管理),并授予需要访问的资源的权限(操作见通过命令管理用户权限),即可实现阿里云账号B对项目A的访问:
--进入数据源项目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;
方式二:基于Package授权机制实现跨阿里云账号访问项目。数据源项目Owner阿里云账号A将数据源项目A内的资源打包为PackageA,并设置允许阿里云账号B下的项目B安装,项目B安装此PackageA后,阿里云账号B即可访问PackageA内的资源。具体操作见基于Package跨项目访问资源。
步骤二:实现数据迁移
阿里云账号操作,可直接进入目标项目,创建目标表:
创建新表的同时复制数据
--进入目标项目projectB;
use projectB;
set odps.namespace.schema=false;
--基于projectA内的数据源表创建新表并复制数据。
create table [if not exists] <table_name> [lifecycle <days>] as select * from projectA.<table_name>;
创建新表后再复制数据
--进入目标项目projectB;
use projectB;
set odps.namespace.schema=false;
--基于数据源表创建具备相同结构的新表但不复制数据。
create table [if not exists] <table_name> like projectA.<table_name> [lifecycle <days>];
--将数据源表的数据写入目标项目中的新表:
insert {into|overwrite} table <table_name> [partition (<pt_spec>)] [(<col_name> [,<col_name> ...)]]
select * from projectA.<table_name> [zorder by <zcol_name> [, <zcol_name> ...]];
更多创建表操作请参见表操作。
建议完成数据迁移后,及时将目标项目Owner阿里云账号从数据源项目中移除,以保证数据安全。移除操作详情请参见删除阿里云账号用户(项目级别)。