全部产品
Search
文档中心

MaxCompute:CLONE TABLE

更新时间:Jul 06, 2025

Pernyataan CLONE TABLE mendukung penyalinan data dari tabel sumber ke tabel target secara efisien, cocok untuk skenario migrasi data. Topik ini memberikan contoh penggunaan pernyataan CLONE TABLE.

Batasan

  • Skema tabel tujuan harus kompatibel dengan skema tabel sumber.

  • Pernyataan CLONE TABLE dapat dieksekusi pada tabel terpartisi, tabel non-partisi, dan tabel terkluster.

  • Jika tabel tujuan telah dibuat sebelumnya, Anda dapat mengkloning data dari maksimal 10.000 partisi secara bersamaan.

  • Jika tabel tujuan belum dibuat, jumlah partisi yang dapat dikloning tidak terbatas, sehingga menjamin atomicitas operasi pengkloningan.

  • Pernyataan CLONE TABLE tidak dapat digunakan untuk mereplikasi data antar Proyek MaxCompute di wilayah atau kluster berbeda (selama migrasi O&M proyek).

  • Pernyataan CLONE TABLE tidak mendukung replikasi data untuk tabel eksternal.

  • Operasi CLONE tidak didukung untuk tabel yang telah mengalami evolusi skema seperti penambahan atau penghapusan kolom.

Sintaksis

CLONE TABLE <[<src_project_name>.]<src_table_name>> [PARTITION(<pt_spec>), ...]
 TO <[<dest_project_name>.]<dest_table_name>> [IF EXISTS [OVERWRITE | IGNORE]] ;
  • src_project_name: opsional. Nama Proyek MaxCompute tempat tabel sumber berada. Jika parameter ini tidak dikonfigurasi, nama proyek saat ini akan digunakan. Parameter ini diperlukan jika tabel sumber dan tujuan tidak termasuk dalam Proyek MaxCompute yang sama.

  • src_table_name: wajib. Nama tabel sumber.

  • pt_spec: opsional. Informasi partisi tabel sumber dalam format (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col menentukan nama kolom, dan partition_col_value menentukan nilai kolom.

  • dest_project_name: opsional. Nama Proyek MaxCompute tempat tabel tujuan berada. Jika parameter ini tidak dikonfigurasi, nama proyek saat ini akan digunakan. Parameter ini diperlukan jika tabel sumber dan tujuan tidak termasuk dalam Proyek MaxCompute yang sama.

  • dest_table_name: wajib. Nama tabel tujuan.

    • Jika tabel tujuan belum dibuat, pernyataan CLONE TABLE akan membuat tabel tujuan menggunakan sintaksis pernyataan CREATE TABLE LIKE. Untuk informasi lebih lanjut tentang pernyataan CREATE TABLE LIKE, lihat Buat tabel.

    • Jika tabel tujuan telah dibuat dan Anda menentukan IF EXISTS OVERWRITE, pernyataan CLONE TABLE akan menimpa data di tabel tujuan atau data di partisi tertentu.

    • Jika tabel tujuan telah dibuat dan Anda menentukan IF EXISTS IGNORE, pernyataan CLONE TABLE akan melewati partisi yang ada tanpa menimpa data di partisi tersebut.

Data sampel

Data sampel sumber disediakan untuk membantu memahami contoh-contoh dalam topik ini. Pernyataan berikut menunjukkan cara membuat tabel terpartisi bernama sale_detail dan tabel non-partisi bernama sale_detail_np serta menyisipkan data ke dalam tabel-tabel tersebut.

  • tabel sale_detail

    -- Buat tabel terpartisi bernama sale_detail. 
    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 ke tabel sale_detail.
    ALTER TABLE sale_detail ADD PARTITION (sale_date='2013', region='china') PARTITION (sale_date='2014', region='shanghai');
    
    -- Masukkan data ke dalam tabel sale_detail.
    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);

    Kueri data dalam tabel sale_detail. Contoh pernyataan:

    -- Aktifkan pemindaian tabel penuh hanya untuk sesi saat ini. Eksekusi pernyataan SELECT untuk melihat data dalam tabel sale_detail.
    SET odps.sql.allow.fullscan=true; 
    SELECT * FROM sale_detail;

    Hasil berikut dikembalikan:

    -- Hasil berikut dikembalikan: 
    +------------+-------------+-------------+------------+------------+
    | 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 sale_detail_np

    -- Buat tabel non-partisi bernama sale_detail_np. 
    CREATE TABLE IF NOT EXISTS sale_detail_np
    (
    shop_name     string,
    customer_id   string,
    total_price   double
    );
    
    -- Masukkan data ke dalam tabel sale_detail_np. 
    INSERT INTO sale_detail_np VALUES ('s4','c4',100.4);

    Kueri data dalam tabel sale_detail_np. Contoh pernyataan:

    SELECT * FROM sale_detail_np;

    Hasil berikut dikembalikan:

    -- Hasil berikut dikembalikan: 
    +------------+-------------+-------------+
    | shop_name  | customer_id | total_price |
    +------------+-------------+-------------+
    | s4         | c4          | 100.4       |
    +------------+-------------+-------------+

Contoh

Bagian ini memberikan contoh penggunaan pernyataan CLONE TABLE berdasarkan data sampel.

  • Contoh 1: Kloning data lengkap dari tabel sale_detail_np ke tabel sale_detail_np_clone. Contoh pernyataan:

    -- Kloning data lengkap dari tabel sale_detail_np ke tabel sale_detail_np_clone. 
    CLONE TABLE sale_detail_np TO sale_detail_np_clone;
    -- Kueri data dalam tabel sale_detail_np_clone untuk memverifikasi akurasi data. 
    SELECT * FROM sale_detail_np_clone;

    Hasil berikut dikembalikan:

    -- Hasil berikut dikembalikan: 
    +------------+-------------+-------------+
    | shop_name  | customer_id | total_price |
    +------------+-------------+-------------+
    | s4         | c4          | 100.4       |
    +------------+-------------+-------------+
  • Contoh 2: Kloning data dari partisi tertentu tabel sale_detail ke tabel sale_detail_clone. Contoh pernyataan:

    -- Kloning data dari partisi tertentu tabel sale_detail ke tabel sale_detail_clone. 
    CLONE TABLE sale_detail PARTITION (sale_date='2013', region='china') TO sale_detail_clone IF EXISTS OVERWRITE;
    -- Kueri data dalam tabel sale_detail_clone untuk memverifikasi akurasi data. 
    SET odps.sql.allow.fullscan=true;
    SELECT * FROM sale_detail_clone;

    Hasil berikut dikembalikan:

    -- Hasil berikut dikembalikan: 
    +------------+-------------+-------------+------------+------------+
    | 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: Kloning data lengkap dari tabel sale_detail ke tabel sale_detail_clone yang dibuat di Contoh 2 dan lewati partisi yang ada di tabel sale_detail_clone. Contoh pernyataan:

    -- Kloning data lengkap dari tabel sale_detail ke tabel sale_detail_clone. 
    CLONE TABLE sale_detail TO sale_detail_clone IF EXISTS IGNORE;
    -- Kueri data dalam tabel sale_detail_clone untuk memverifikasi akurasi data. 
    -- Aktifkan pemindaian tabel penuh hanya untuk sesi saat ini. Eksekusi pernyataan SELECT untuk melihat data dalam tabel sale_detail. 
    SET odps.sql.allow.fullscan=true; 
    SELECT * FROM sale_detail_clone;

    Hasil berikut dikembalikan:

    -- Hasil berikut dikembalikan: 
    +------------+-------------+-------------+------------+------------+
    | 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: Kloning data lengkap dari tabel sale_detail ke tabel sale_detail_clone1. Contoh pernyataan:

    -- Kloning data lengkap dari tabel sale_detail ke tabel sale_detail_clone1. 
    CLONE TABLE sale_detail TO sale_detail_clone1;
    -- Kueri data dalam tabel sale_detail_clone1 untuk memverifikasi akurasi data. 
    SET odps.sql.allow.fullscan=true; 
    SELECT * FROM sale_detail_clone1;

    Hasil berikut dikembalikan:

    -- Hasil berikut dikembalikan: 
    +------------+-------------+-------------+------------+------------+
    | 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: Kloning data dari tabel Delta.

    • Kloning data dari tabel Delta non-partisi

      CLONE TABLE mf_dt TO new_table;
    • Kloning data dari tabel Delta terpartisi

      CLONE TABLE mf_dt2 PARTITION (dd='01', hh='01') TO new_table;

Praktik terbaik

Untuk informasi lebih lanjut tentang cara memigrasikan data di seluruh Proyek MaxCompute di wilayah yang sama, lihat Migrasikan data di seluruh Proyek MaxCompute di wilayah yang sama menggunakan CLONE TABLE.