全部产品
Search
文档中心

云原生大数据计算服务 MaxCompute:通过跨项目数据访问实现不同地域MaxCompute项目数据迁移

更新时间:Oct 13, 2023

本文为您介绍如何通过跨项目数据访问实现不同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操作权限及目标项目的CreateInstanceCreateTable权限。数据源项目源表的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阿里云账号从数据源项目中移除,以保证数据安全。移除操作详情请参见删除阿里云账号用户(项目级别)