本文為您介紹如何通過跨專案資料訪問實現不同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阿里雲帳號從資料來源專案中移除,以保證資料安全。移除操作詳情請參見刪除阿里雲帳號使用者(專案層級)。