全部产品
Search
文档中心

MaxCompute:Ikhtisar tabel partisi

更新时间:Sep 16, 2025

Tabel partisi adalah tabel yang membagi dan menyimpan data di lokasi fisik berbeda berdasarkan satu atau lebih kolom. Partisi yang efektif mempercepat kueri, menyederhanakan manajemen data, serta mendukung operasi data yang lebih fleksibel.

Opsi partisi

MaxCompute menawarkan dua pendekatan untuk mengelola partisi:

  • Tabel partisi standar: Anda dapat mendefinisikan satu atau lebih kolom sebagai kunci partisi untuk membagi data tabel.

  • Tabel partisi otomatis: Kolom partisi dihasilkan secara otomatis melalui dua metode berikut.

    Metode partisi otomatis

    Deskripsi

    Tabel partisi otomatis berdasarkan fungsi perhitungan waktu

    MaxCompute secara otomatis mempartisi tabel dengan menerapkan fungsi TRUNC_TIME pada kolom berbasis waktu (misalnya, DATE, DATETIME, TIMESTAMP) dan menggunakan hasil perhitungan sebagai nilai partisi.

    Tabel partisi otomatis berdasarkan waktu penulisan data

    MaxCompute secara otomatis mempartisi tabel dengan menerapkan fungsi TRUNC_TIME pada waktu ingest data (waktu ditulis ke sistem). Metode ini dikenal sebagai Partisi Waktu Ingest.

Kapan harus menggunakan tabel partisi

Pertimbangkan untuk mempartisi tabel dalam skenario berikut:

  • Percepat kueri: Dengan tabel partisi, kueri hanya memindai partisi yang relevan alih-alih seluruh tabel, sehingga mengurangi volume data yang diproses.

  • Mengurangi biaya: Menentukan filter partisi dalam kueri Anda menghindari pemindaian tabel penuh, secara efektif menurunkan biaya komputasi.

  • Kelola data pada tingkat partisi: Anda dapat menulis atau menghapus data dari partisi tertentu tanpa pemindaian tabel penuh. Ini memungkinkan manajemen data yang efisien serta mendukung pembersihan data otomatis pada tingkat partisi menggunakan kebijakan siklus hidup.

Catatan

Untuk performa optimal, pastikan setiap partisi berisi setidaknya 10.000 baris. Jumlah partisi kecil yang berlebihan dapat menurunkan performa kueri.

Batasan

  • Sebuah tabel dapat memiliki maksimal 6 level partisi.

  • Sebuah tabel dapat memiliki maksimal 60.000 partisi.

  • Sebuah kueri tunggal dapat meminta maksimal 10.000 partisi.

  • Nilai dalam kolom kunci partisi tipe STRING tidak boleh mengandung karakter Cina.

Tipe data kolom partisi

  • Dalam MaxCompute V2.0, kolom partisi mendukung tipe STRING, TINYINT, SMALLINT, INT, BIGINT, dan VARCHAR.

    MaxCompute menyimpan nilai partisi sebagai STRING, secara otomatis mengonversi tipe lainnya. Untuk menghindari potensi kesalahan, definisikan kolom partisi sebagai STRING.

  • Dalam versi tipe data MaxCompute 1.0, kolom partisi hanya mendukung tipe STRING.

    Meskipun Anda dapat mendefinisikan tipe kolom partisi sebagai BIGINT, ini hanya memengaruhi cara tipe ditampilkan dalam skema tabel. Dalam semua operasi komputasi, seperti perhitungan dan perbandingan, MaxCompute memperlakukan kolom tersebut sebagai STRING. Dalam contoh berikut, hasil yang dikembalikan kosong.

    ---Buat tabel bernama parttest.
    CREATE TABLE parttest (a BIGINT) PARTITIONED BY (pt BIGINT);
    
    ---Masukkan data ke dalam tabel.
    INSERT INTO parttest PARTITION(pt)(a,pt) VALUES (1, 1);
    INSERT INTO parttest PARTITION(pt)(a,pt) VALUES (1, 10);
    
    ---Kueri baris di mana nilai pt lebih besar dari atau sama dengan 2.
    SELECT * FROM parttest WHERE pt >= '2';
  • MaxCompute tidak mendukung penggunaan data tipe waktu/tanggal sebagai kolom partisi, tetapi Anda dapat menggunakan fitur partisi otomatis untuk menghasilkan partisi berdasarkan perhitungan fungsi pada data tipe waktu/tanggal dalam tabel. Untuk informasi lebih lanjut, lihat Contoh tabel partisi otomatis.

Contoh tabel partisi reguler

  1. Buat tabel partisi.

    -- Buat tabel partisi dua level reguler, dengan tanggal sebagai partisi tingkat pertama dan wilayah sebagai partisi tingkat kedua
    CREATE TABLE src (shop_name STRING, customer_id BIGINT) PARTITIONED BY (pt STRING,region STRING);
  2. Tambahkan partisi dan jalankan perintah INSERT INTO untuk menambahkan data ke tabel partisi src.

    ALTER TABLE src ADD PARTITION (pt='20170506',region='hangzhou') PARTITION (pt='20180101',region='shanghai');
    INSERT INTO src PARTITION (pt='20170506',region='hangzhou') VALUES ('s1',1),('s2',2),('s3',3);
    INSERT INTO src PARTITION (pt='20180101',region='shanghai') VALUES ('c1',4),('c2',5),('c3',6);
  3. Gunakan partisi sebagai kondisi filter untuk menanyakan tabel.

    • Contoh benar: Ketika kueri menentukan pt='20170506' dan region='hangzhou', MaxCompute akan secara tepat menemukan partisi tingkat pertama dan kedua yang sesuai, memproses hanya data yang cocok dan menghindari pemindaian tabel penuh.

      SELECT * FROM src WHERE pt='20170506' AND region='hangzhou'; 

      Output:

      +------------+-------------+------------+------------+
      | shop_name  | customer_id | pt         | region     |
      +------------+-------------+------------+------------+
      | s1         | 1           | 20170506   | hangzhou   |
      | s2         | 2           | 20170506   | hangzhou   |
      | s3         | 3           | 20170506   | hangzhou   |
      +------------+-------------+------------+------------+
    • Contoh salah: Dengan pendekatan ini, pemangkasan partisi tidak dijamin bekerja dengan benar. Bidang pt bertipe STRING, tetapi ketika dibandingkan dengan nilai BIGINT (misalnya, 20170506), MaxCompute secara implisit mengubah kedua operand menjadi DOUBLE, yang dapat menyebabkan hilangnya presisi dan merusak optimasi pemangkasan partisi.

      SELECT * FROM src WHERE pt = 20170506 AND region = hangzhou; 

Contoh tabel partisi otomatis