All Products
Search
Document Center

MaxCompute:Perjalanan Waktu

Last Updated:Aug 22, 2026

Perjalanan Waktu memungkinkan Anda menjalankan kueri terhadap data historis dalam tabel transaksional (Delta) pada batas transaksi masa lalu apa pun dalam jendela retensi yang dikonfigurasi. Anda dapat membaca data sebagaimana kondisinya pada timestamp atau ID versi tertentu, serta memulihkan tabel ke kondisi sebelumnya.

Kasus Penggunaan

  • Pemulihan kesalahan: Jalankan kueri terhadap tabel pada titik sebelum terjadi penulisan yang salah, kegagalan pipeline, atau penghapusan tidak sengaja, lalu gunakan hasil tersebut untuk memperbaiki data di sistem downstream.

  • Audit historis: Periksa kondisi pasti suatu set data pada batas transaksi masa lalu apa pun untuk pemeriksaan kepatuhan dan investigasi alur data.

  • Perbandingan data: Bandingkan data pada dua versi historis berbeda untuk memahami bagaimana catatan berubah antar eksekusi pemrosesan.

  • Pemulihan titik-waktu: Kembalikan seluruh tabel ke versi historis tertentu untuk membatalkan serangkaian perubahan.

Prasyarat

Perjalanan Waktu hanya didukung pada tabel transaksional. Tabel non-transaksional dan tabel eksternal tidak mendukung fitur ini.

Data historis hanya tersedia dalam jendela retensi yang dikonfigurasi. Anda harus mengonfigurasi properti tabel acid.data.retain.hours untuk menyimpan data historis. Lihat Konfigurasi retensi data untuk detailnya.

Jalankan Kueri terhadap Data Historis

Kueri berdasarkan timestamp

Gunakan TIMESTAMP AS OF untuk membaca tabel sebagaimana kondisinya pada titik waktu tertentu.

-- Query menggunakan timestamp tertentu SELECT * FROM src TIMESTAMP AS OF '2024-01-15 10:00:00'; -- Query menggunakan timestamp dari versi terakhir yang dikomit SELECT * FROM src TIMESTAMP AS OF get_latest_timestamp(1);

Fungsi get_latest_timestamp menerima satu parameter: jumlah commit yang dilihat ke belakang. get_latest_timestamp(1) mengembalikan timestamp dari versi terbaru yang di-commit.

Kueri berdasarkan ID versi

Gunakan VERSION AS OF untuk membaca tabel pada ID versi transaksi tertentu.

-- Query menggunakan ID versi tertentu SELECT * FROM src VERSION AS OF 3; -- Query menggunakan ID versi dari versi terakhir yang dikomit SELECT * FROM src VERSION AS OF get_latest_version(2);

Fungsi get_latest_version menerima satu parameter: jumlah commit ke belakang. get_latest_version(2) mengembalikan ID versi dua commit sebelum yang terbaru.

Pulihkan Tabel ke Versi Historis

Gunakan restore untuk menimpa kondisi tabel saat ini dengan data dari versi historis. Operasi ini tidak dapat dibatalkan.

-- Pulihkan ke timestamp tertentu RESTORE TABLE src TO TIMESTAMP AS OF '2024-01-15 10:00:00'; -- Pulihkan ke ID versi tertentu RESTORE TABLE src TO VERSION AS OF 3;

Jenis Versi Transaksi

Time Travel mendukung dua jenis versi:

Jenis versi Deskripsi Klausa SQL
Versi waktu Mengidentifikasi transaksi berdasarkan timestamp TIMESTAMP AS OF
Versi ID Mengidentifikasi transaksi berdasarkan ID versi internalnya VERSION AS OF

Gunakan get_latest_timestamp dan get_latest_version saat Anda perlu merujuk ke versi relatif terhadap commit terbaru, bukan berdasarkan nilai absolut. Parameter kedua pada kedua fungsi tersebut menunjukkan jumlah kali data telah di-commit, yang digunakan MaxCompute untuk menentukan versi data internal yang sesuai.

Konfigurasi Retensi Data

Properti tabel acid.data.retain.hours mengontrol durasi penyimpanan data historis. Atur properti ini menggunakan ALTER TABLE:

-- Atur jendela retensi 48 jam ALTER TABLE src SET TBLPROPERTIES ('acid.data.retain.hours' = '48');

Periode retensi maksimum adalah tujuh hari. Pilih nilai yang sesuai dengan kebutuhan operasional Anda. Periode retensi yang lebih lama akan meningkatkan biaya penyimpanan karena MaxCompute harus menyimpan file-file Delta historis.

Untuk menonaktifkan Perjalanan Waktu dan mengurangi biaya penyimpanan, atur acid.data.retain.hours ke 0:

-- Nonaktifkan Perjalanan Waktu untuk sebuah tabel ALTER TABLE src SET TBLPROPERTIES ('acid.data.retain.hours' = '0');

Mengatur properti ke 0 akan menghentikan penyimpanan data historis dan mengurangi biaya penyimpanan secara signifikan.

Cara Kerja

Diagram berikut menunjukkan proses kueri internal untuk kueri Perjalanan Waktu pada tabel transaksional.

image.png

Saat Anda menjalankan kueri Perjalanan Waktu, MaxCompute:

  1. Mengurai pernyataan SQL dan mengidentifikasi versi target (timestamp atau ID versi).

  2. Menemukan file dasar terbaru yang berada dalam rentang waktu versi tersebut.

  3. Menemukan file delta yang ditulis setelah file dasar dihasilkan, hingga mencapai versi target.

  4. Menggabungkan file dasar dan file Delta yang relevan untuk menghasilkan output kueri.

Contoh: tabel transaksional src

Pertimbangkan tabel transaksional bernama src dengan kolom pk dan val. Lima transaksi tulis dieksekusi pada titik waktu t1 hingga t5, menghasilkan lima file Delta. Kompaksi dijalankan pada t2 dan t4, menghasilkan file dasar b1 dan b2 masing-masing.

Selama kompaksi pada t2, catatan keadaan antara historis (2,a) dihapus dari file dasar b1, dan hanya catatan keadaan terbaru (2,b) yang dipertahankan dalam b1.

Titik waktu kueri File yang dibaca Hasil
t1 Hanya file Delta d1 Output dari d1
t2 Hanya file dasar b1 Tiga catatan
t3 File dasar b1 + file Delta d3 Output gabungan
t4, t5 File dasar b2 + file Delta yang relevan Output gabungan

File dasar meningkatkan efisiensi kueri dan pembacaan dengan menyediakan Snapshot ringkas dari kondisi tabel pada titik waktu tertentu. Namun, kueri terhadap file dasar memicu operasi kompaksi yang mengonsumsi banyak sumber daya. Pilih kebijakan pemicu kompaksi yang sesuai dengan workload Anda.

Batasan

  • Perjalanan Waktu hanya didukung pada tabel transaksional (Delta). Tabel non-transaksional dan tabel eksternal tidak didukung.

  • Data historis yang lebih lama dari jendela retensi yang dikonfigurasi tidak lagi tersedia untuk kueri atau pemulihan.

  • Periode retensi maksimum adalah tujuh hari, terlepas dari nilai yang diatur pada acid.data.retain.hours.

  • Mengatur acid.data.retain.hours ke 0 menonaktifkan Perjalanan Waktu dan menghentikan penyimpanan data historis untuk tabel tersebut.

Topik Terkait