All Products
Search
Document Center

MaxCompute:CLONE TABLE

Last Updated:Jun 11, 2026

CLONE TABLE menyalin data dari tabel sumber ke tabel tujuan. Gunakan perintah ini untuk melakukan migrasi data antar tabel dalam Proyek MaxCompute yang sama atau berbeda, selama berada dalam Wilayah dan kelas penyimpanan yang sama.

Batasan

  • Kompatibilitas skema: Skema tabel tujuan harus kompatibel dengan skema tabel sumber.

  • Batas penyalinan partisi:

    • Saat menyalin ke tabel tujuan yang sudah ada, maksimal 10.000 partisi dapat disalin sekaligus.

    • Jika tabel tujuan belum ada, tidak ada batas jumlah partisi, dan operasi tersebut bersifat atomik.

  • Jenis tabel yang didukung:

    • Tabel Delta PK/Append:

      Tabel Delta yang sudah ada tidak dapat ditimpa. Anda hanya dapat menggunakan CLONE TABLE untuk membuat Tabel Delta baru.

    • Tabel biasa (tabel partisi, tabel non-partisi, dan Tabel terkluster).

    • Tabel transaksional:

      Tabel transaksional yang sudah ada tidak dapat ditimpa. Anda hanya dapat menggunakan CLONE TABLE untuk membuat tabel transaksional baru.

  • Tabel eksternal: CLONE TABLE tidak dapat menyalin data dari tabel eksternal.

  • Kontrol akses tingkat baris atau penyamaran data:

    CLONE TABLE tidak dapat digunakan pada tabel yang memiliki Row Access Policy atau Data Masking Policy yang diterapkan.

  • Cross-region:

    CLONE TABLE tidak dapat menyalin data antar Proyek MaxCompute di Wilayah atau Kluster yang berbeda (termasuk selama migrasi O&M proyek).

  • Cross-storage class:

    CLONE TABLE tidak dapat menyalin data antar proyek yang menggunakan kelas penyimpanan berbeda (misalnya, dari proyek penyimpanan multi-AZ ke proyek penyimpanan single-AZ, atau sebaliknya).

    Untuk melakukan migrasi data antar proyek dengan kelas penyimpanan berbeda, gunakan alternatif berikut:

    • Tabel non-partisi: Gunakan CREATE TABLE AS untuk melakukan migrasi data.

    • Tabel partisi: Gunakan CREATE TABLE LIKE untuk membuat tabel, lalu gunakan INSERT OVERWRITE untuk melakukan migrasi data.

  • Evolusi skema:

    CLONE TABLE tidak dapat digunakan pada tabel yang telah mengalami Schema Evolution (seperti penambahan atau penghapusan kolom).

Penagihan

Operasi CLONE TABLE bersifat berbasis metadata dan tidak dikenai biaya komputasi. Tabel hasil kloning akan ditagih berdasarkan Penggunaan penyimpanan aktualnya.

Sintaks

CLONE TABLE [<src_project_name>.]<src_table_name> [PARTITION (<pt_spec>), ...]
TO [<dest_project_name>.]<dest_table_name> [IF EXISTS [OVERWRITE | IGNORE]];

Parameter:

Parameter

Wajib

Deskripsi

src_project_name

Tidak

Proyek MaxCompute yang berisi tabel sumber. Nilai default adalah proyek saat ini. Wajib ditentukan jika tabel sumber dan tujuan berada di proyek berbeda.

src_table_name

Ya

Nama tabel sumber.

pt_spec

Tidak

Partisi yang akan disalin. Format: partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...

dest_project_name

Tidak

Proyek MaxCompute yang berisi tabel tujuan. Nilai default adalah proyek saat ini. Wajib ditentukan jika tabel sumber dan tujuan berada di proyek berbeda.

dest_table_name

Ya

Nama tabel tujuan. Lihat tabel perilaku di bawah ini.

Perilaku tabel tujuan:

Kondisi

Perilaku

Tabel tujuan tidak ada

Membuat tabel menggunakan semantik CREATE TABLE LIKE, lalu menyalin datanya. Untuk detailnya, lihat Create a table.

Tabel tujuan ada + IF EXISTS OVERWRITE

Menimpa data di tabel tujuan atau partisi yang ditentukan.

Tabel tujuan ada + IF EXISTS IGNORE

Melewati partisi yang sudah ada tanpa menimpa datanya.

Data contoh

Contoh berikut menggunakan dua tabel sampel. Jalankan perintah di bawah ini untuk membuat dan mengisi datanya.

Tabel partisi: `sale_detail`

  1. Buat tabel partisi.

    -- Buat tabel partisi
    CREATE TABLE IF NOT EXISTS sale_detail
    (
      shop_name     STRING,
      customer_id   STRING,
      total_price   DOUBLE
    )
    PARTITIONED BY (sale_date STRING, region STRING);
    
    -- Tambahkan partisi
    ALTER TABLE sale_detail ADD PARTITION (sale_date='2013', region='china') PARTITION (sale_date='2014', region='shanghai');
    
    -- Masukkan data
    INSERT INTO sale_detail PARTITION (sale_date='2013', region='china') VALUES ('s1','c1',100.1),('s2','c2',100.2),('s3','c3',100.3);
    INSERT INTO sale_detail PARTITION (sale_date='2014', region='shanghai') VALUES ('null','c5',null),('s6','c6',100.4),('s7','c7',100.5);
  2. Kueri tabel untuk verifikasi:

    SET odps.sql.allow.fullscan=true;
    SELECT * FROM sale_detail;

    Lihat hasil

    Output yang diharapkan:

    +------------+-------------+-------------+------------+------------+
    | shop_name  | customer_id | total_price | sale_date  | region     |
    +------------+-------------+-------------+------------+------------+
    | s1         | c1          | 100.1       | 2013       | china      |
    | s2         | c2          | 100.2       | 2013       | china      |
    | s3         | c3          | 100.3       | 2013       | china      |
    | null       | c5          | NULL        | 2014       | shanghai   |
    | s6         | c6          | 100.4       | 2014       | shanghai   |
    | s7         | c7          | 100.5       | 2014       | shanghai   |
    +------------+-------------+-------------+------------+------------+

Tabel non-partisi: `sale_detail_np`

  1. Buat tabel non-partisi.

    -- Buat tabel non-partisi
    CREATE TABLE IF NOT EXISTS sale_detail_np
    (
      shop_name     STRING,
      customer_id   STRING,
      total_price   DOUBLE
    );
    
    -- Masukkan data
    INSERT INTO sale_detail_np VALUES ('s4','c4',100.4);
  2. Kueri tabel untuk verifikasi:

    SELECT * FROM sale_detail_np;

    Lihat hasil

    Output yang diharapkan:

    +------------+-------------+-------------+
    | shop_name  | customer_id | total_price |
    +------------+-------------+-------------+
    | s4         | c4          | 100.4       |
    +------------+-------------+-------------+

Contoh

Contoh 1:Menyalin tabel non-partisi ke tabel baru

CLONE TABLE sale_detail_np TO sale_detail_np_clone; -- Membuat sale_detail_np_clone dan menyalin semua data

SELECT * FROM sale_detail_np_clone;

Output yang diharapkan:

+------------+-------------+-------------+
| shop_name  | customer_id | total_price |
+------------+-------------+-------------+
| s4         | c4          | 100.4       |
+------------+-------------+-------------+

Contoh 2:Menyalin partisi tertentu ke tabel yang sudah ada

CLONE TABLE sale_detail PARTITION (sale_date='2013', region='china')
TO sale_detail_clone IF EXISTS OVERWRITE; -- Hanya menyalin partisi 2013/china; menimpa jika partisi tersebut sudah ada

SELECT * FROM sale_detail_clone;

Output yang diharapkan:

+------------+-------------+-------------+------------+------------+
| shop_name  | customer_id | total_price | sale_date  | region     |
+------------+-------------+-------------+------------+------------+
| s1         | c1          | 100.1       | 2013       | china      |
| s2         | c2          | 100.2       | 2013       | china      |
| s3         | c3          | 100.3       | 2013       | china      |
+------------+-------------+-------------+------------+------------+

Contoh 3:Menyalin semua partisi sambil melewati partisi yang sudah ada

Contoh ini melanjutkan dari contoh sebelumnya. sale_detail_clone sudah berisi partisi 2013/china. Opsi IF EXISTS IGNORE menyalin partisi lainnya tanpa menyentuh partisi yang sudah ada.

CLONE TABLE sale_detail TO sale_detail_clone IF EXISTS IGNORE; -- Menambahkan partisi baru; melewati partisi yang sudah ada

SELECT * FROM sale_detail_clone;

Output yang diharapkan:

+------------+-------------+-------------+------------+------------+
| shop_name  | customer_id | total_price | sale_date  | region     |
+------------+-------------+-------------+------------+------------+
| s1         | c1          | 100.1       | 2013       | china      |
| s2         | c2          | 100.2       | 2013       | china      |
| s3         | c3          | 100.3       | 2013       | china      |
| null       | c5          | NULL        | 2014       | shanghai   |
| s6         | c6          | 100.4       | 2014       | shanghai   |
| s7         | c7          | 100.5       | 2014       | shanghai   |
+------------+-------------+-------------+------------+------------+

Contoh 4:Menyalin semua partisi ke tabel baru

CLONE TABLE sale_detail TO sale_detail_clone1; -- Membuat sale_detail_clone1 dan menyalin semua partisi secara atomik

SELECT * FROM sale_detail_clone1;

Output yang diharapkan:

+------------+-------------+-------------+------------+------------+
| shop_name  | customer_id | total_price | sale_date  | region     |
+------------+-------------+-------------+------------+------------+
| s1         | c1          | 100.1       | 2013       | china      |
| s2         | c2          | 100.2       | 2013       | china      |
| s3         | c3          | 100.3       | 2013       | china      |
| null       | c5          | NULL        | 2014       | shanghai   |
| s6         | c6          | 100.4       | 2014       | shanghai   |
| s7         | c7          | 100.5       | 2014       | shanghai   |
+------------+-------------+-------------+------------+------------+

Contoh 5:Mengkloning Tabel Delta

  • Mengkloning Tabel Delta non-partisi

    -- Buat Tabel Delta non-partisi
    CREATE TABLE IF NOT EXISTS sale_detail_delta
    (
      shop_name     STRING,
      customer_id   STRING,
      total_price   DOUBLE
    )
    TBLPROPERTIES ("table.format.version"="2");
    
    INSERT INTO sale_detail_delta VALUES ('s1','c1',100.1),('s2','c2',100.2);
    
    -- Contoh kloning
    CLONE TABLE sale_detail_delta TO sale_detail_delta_clone;
  • Mengkloning Tabel Delta partisi

    -- Buat Tabel Delta partisi
    CREATE TABLE IF NOT EXISTS sale_detail_delta_pt
    (
      shop_name     STRING,
      customer_id   STRING,
      total_price   DOUBLE
    )
    PARTITIONED BY (dd STRING, hh STRING)
    TBLPROPERTIES ("table.format.version"="2");
    
    INSERT INTO sale_detail_delta_pt PARTITION (dd='01', hh='01') VALUES ('s3','c3',100.3);
    
    -- Contoh kloning
    CLONE TABLE sale_detail_delta_pt PARTITION (dd='01', hh='01') TO sale_detail_delta_pt_clone;

Praktik terbaik

Untuk informasi mengenai migrasi data antar proyek MaxCompute dalam wilayah yang sama, lihat 使用CLONE TABLE实现同地域MaxCompute跨项目数据迁移.