すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:CLONE TABLEを使用して、同じリージョンのMaxComputeプロジェクト間でデータを移行する

最終更新日:Jan 17, 2025

このトピックでは、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ステートメントを実行し、プロジェクト間でデータを移行できます。

  1. ターゲットプロジェクトの所有者である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アカウントの追加 (プロジェクトレベル) 」をご参照ください。 アカウントに権限を付与する方法の詳細については、「指定したプロジェクトの権限をユーザーに付与する」をご参照ください。

  2. ターゲットプロジェクトで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;
  3. テーブルデータがターゲットプロジェクトに移行されているかどうかを確認します。

    select * from <tablename> limit 2;
    重要

    データのセキュリティを確保するため、データ移行が完了した後、移行先プロジェクトの所有者であるAlibaba Cloudアカウントを移行元プロジェクトから削除することを推奨します。 詳細については、「Alibaba Cloudアカウントの削除 (プロジェクトレベル) 」をご参照ください。