このトピックでは、CLONE TABLEステートメントを使用して、同じリージョンのMaxComputeプロジェクト間でデータを移行する方法について説明します。 CLONE TABLEステートメントを実行して、同じリージョンの同じAlibaba Cloudアカウントまたは同じリージョンの異なるAlibaba Cloudアカウント内のMaxComputeプロジェクト間でデータを移行できます。
CLONE TABLEステートメント
CLONE TABLEステートメントを使用すると、ソーステーブルから宛先テーブルにデータを効率的にコピーできます。 データがコピー先テーブルにコピーされた後、データの正確性を確保するためにデータを検証することを推奨します。 たとえば、SELECTステートメントを実行してテーブルのデータを表示したり、DESCステートメントを実行してテーブルのサイズを表示したりできます。
制限事項
ターゲットテーブルのスキーマは、ソーステーブルのスキーマと互換性がある必要があります。
CLONE TABLE文は、パーティションテーブル、非パーティションテーブル、およびクラスタ化テーブルに対して実行できます。CLONE table文が実行される前にターゲットテーブルを作成している場合は、CLONE TABLE文を実行して、同時に最大10,000個のパーティションからデータを複製できます。
CLONE tableステートメントが実行される前にターゲットテーブルを作成していない場合、同時にデータをクローンできるパーティションの数は無制限です。 このようにして、クローニング操作の原子性が保証される。
複数のリージョンにまたがるプロジェクトに対して
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」をご参照ください。
同じリージョンの同じAlibaba Cloudアカウント内のMaxComputeプロジェクト間でデータを移行する
Alibaba Cloudアカウントを使用してデータを移行する場合、ソースプロジェクトでCLONE TABLEステートメントを直接実行できます。
set odps.namespace.schema=false; -- Clone the table from projectA to projectB. clone TABLE projectA.<tablename> to projectB.<tablename> IF EXISTS OVERWRITE;RAMユーザーとしてデータを移行する場合は、RAMユーザーがソースプロジェクトのソーステーブルに対する
SELECT権限と、ターゲットプロジェクトに対するCreateTable権限とCreateInstance権限を持っているかどうかを確認します。 必要な権限を持つRAMユーザーは、CLONE TABLEステートメントを実行できます。
同じリージョンの異なるAlibaba Cloudアカウント内のMaxComputeプロジェクト間でデータを移行する
異なるAlibaba Cloudアカウント内のMaxComputeプロジェクト間でデータを同期するには、ターゲットプロジェクトの所有者であるAlibaba Cloudアカウントをソースプロジェクトに追加し、ソースプロジェクトに対するCreateTable権限とCreateInstance権限をアカウントに付与する必要があります。 次に、Alibaba Cloudアカウントを使用してCLONE TABLEステートメントを実行し、プロジェクト間でデータを移行できます。
ターゲットプロジェクトの所有者であるAlibaba Cloudアカウントをソースプロジェクトに追加し、アカウントに権限を付与します。
-- Go to the source project named projectA. use projectA; -- Add the Alibaba Cloud account projectB_owner@aliyunid.com, which is the owner of the destination project named projectB, to projectA. add user ALIYUN$projectB_owner@aliyunid.com; -- Grant the CreateTable and CreateInstance permissions on the source project to the Alibaba Cloud account. grant CreateTable,CreateInstance on project projectA to user ALIYUN$projectB_owner@aliyunid.com; -- Grant the SELECT permission on the source table to the Alibaba Cloud account. grant Select on table <tablename> to user ALIYUN$projectB_owner@aliyunid.com;Alibaba Cloudアカウントをプロジェクトに追加する方法の詳細については、「Alibaba Cloudアカウントの追加 (プロジェクトレベル) 」をご参照ください。 アカウントに権限を付与する方法の詳細については、「指定したプロジェクトの権限をユーザーに付与する」をご参照ください。
ターゲットプロジェクトでCLONE TABLEステートメントを実行します。
Alibaba Cloudアカウントのみがクロスアカウント操作を実行できます。 移行先プロジェクトの所有者であるAlibaba Cloudアカウントには、移行先プロジェクトのデータに対するすべての権限があります。 Alibaba Cloudアカウントに権限を付与する必要はありません。
use projectB; -- Clone the table from projectA to projectB. clone TABLE projectA.<tablename> to projectB.<tablename> IF EXISTS OVERWRITE;テーブルデータがターゲットプロジェクトに移行されているかどうかを確認します。
select * from <tablename> limit 2;重要データのセキュリティを確保するため、データ移行が完了した後、移行先プロジェクトの所有者であるAlibaba Cloudアカウントを移行元プロジェクトから削除することを推奨します。 詳細については、「Alibaba Cloudアカウントの削除 (プロジェクトレベル) 」をご参照ください。