All Products
Search
Document Center

MaxCompute:COMPACTION

Last Updated:Mar 27, 2026

Penulisan berulang pada tabel delta menghasilkan banyak file kecil yang menurunkan Throughput I/O dan meningkatkan tekanan penyimpanan. Compaction menggabungkan semua file data menjadi satu set file dasar yang terkonsolidasi, hanya menyimpan versi terbaru dari setiap baris sehingga kueri memindai lebih sedikit file dan berjalan lebih cepat.

Ikhtisar

Tabel delta mendukung dua metode penggabungan data:

Metode Apa yang dilakukan Pemicu
Clustering Hanya menggabungkan file delta menjadi file yang lebih besar tanpa mengubah konten data. File delta berisi data dari operasi yang telah dikomit. Otomatis — sistem menjalankan clustering secara berkala berdasarkan ukuran dan jumlah file. Tidak diperlukan tindakan manual.
Compaction Menggabungkan semua file data menjadi sejumlah file dasar. Untuk baris dengan primary key yang sama, hanya baris terbaru yang dipertahankan. Versi baris historis dan data kolom sistem tidak disimpan. Manual — jalankan ALTER TABLE ... COMPACT MAJOR.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Tabel delta (dibuat dengan tblproperties ("transactional"="true"))

  • Properti session odps.merge.task.mode=service yang telah diatur dalam session Anda

Sintaksis

ALTER TABLE <table_name>
  [PARTITION (<partition_key> = '<partition_value>' [, ...])]
  COMPACT MAJOR;

Parameter

Parameter Wajib Deskripsi
table_name Ya Nama tabel delta yang akan dikompaksi.
partition_key Tidak Nama kunci partisi. Tentukan untuk mengompaksi satu partisi saja.
partition_value Tidak Nilai kunci partisi.

Catatan penggunaan

  • Properti session wajib: Atur odps.merge.task.mode=service sebelum menjalankan compaction.

    SET odps.merge.task.mode=service;
  • Biaya penyimpanan: Compaction menghasilkan file dasar baru sebelum menghapus yang lama, sehingga penggunaan penyimpanan meningkat sementara. Anda dapat mengonfigurasi frekuensi pemicu berdasarkan kebutuhan bisnis Anda.

  • Amplifikasi tulis dan konflik: Kebijakan compaction dirancang untuk mencegah amplifikasi tulis yang serius dan kegagalan akibat konflik dalam skenario compaction yang sering dilakukan.

Penagihan

Metode penagihan Cara penagihan compaction
Pay-as-you-go Jumlah data yang dipindai × 1 × harga satuan
Subscription Dipotong dari kuota komputasi langganan

Contoh

Contoh berikut membuat tabel delta berpartisi, memasukkan data dalam tiga batch, menjalankan compaction, lalu melakukan kueri terhadap data historis menggunakan time travel.

-- Buat tabel delta dengan primary key dan dua kolom partisi.
CREATE TABLE mf_dt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT NOT NULL)
  PARTITIONED BY (dd STRING, hh STRING)
  TBLPROPERTIES ("transactional"="true");

-- Masukkan data dalam tiga batch untuk mensimulasikan tulisan inkremental.
INSERT INTO TABLE mf_dt PARTITION(dd='01', hh='01') VALUES (1, 1), (2, 2);
INSERT INTO TABLE mf_dt PARTITION(dd='01', hh='01') VALUES (2, 20), (3, 3);
INSERT INTO TABLE mf_dt PARTITION(dd='01', hh='01') VALUES (3, 30), (4, 4);

-- Jalankan compaction pada partisi tersebut.
SET odps.merge.task.mode=service;
ALTER TABLE mf_dt PARTITION(dd='01', hh='01') COMPACT MAJOR;

-- Lakukan kueri terhadap snapshot terbaru setelah compaction.
SELECT * FROM mf_dt TIMESTAMP AS OF get_latest_timestamp('mf_dt')
  WHERE dd='01' AND hh='01';

-- Lakukan kueri terhadap snapshot kedua terbaru (time travel tetap berfungsi setelah compaction).
SELECT * FROM mf_dt TIMESTAMP AS OF get_latest_timestamp('mf_dt', 2)
  WHERE dd='01' AND hh='01';