All Products
Search
Document Center

MaxCompute:Backup lokal

Last Updated:Mar 01, 2026

MaxCompute secara otomatis membuat backup data setiap kali data dimodifikasi dan menyimpan backup tersebut selama periode yang dapat dikonfigurasi. Jika data tidak sengaja dihapus atau ditimpa, Anda dapat memulihkannya ke versi sebelumnya apa pun dalam periode retensi.

Backup and restoration

Cara kerja

  • Selalu aktif — Diaktifkan secara default dengan periode retensi 24 jam. Tidak memerlukan penyimpanan eksternal dan tidak dikenai biaya tambahan.

  • Berkesinambungan — Setiap modifikasi memicu backup, sehingga tidak ada perubahan data yang terlewat di antara jendela backup terjadwal.

  • Pemulihan cepat — Operasi pemulihan tidak mengonsumsi sumber daya komputasi tambahan. Cukup satu perintah untuk memulihkan tabel, partisi, atau versi tertentu.

Batasan

  • Materialized views, object tables, dan external tables tidak didukung.

  • Tabel terklaster tidak dapat dipulihkan.

  • Setelah PURGE TABLE dijalankan pada suatu tabel, data yang telah dipurge tidak dapat dipulihkan.

  • Tabel atau partisi yang di-drop (termasuk tabel Delta) tidak dapat langsung dipulihkan ke Log Sequence Number (LSN) tertentu. Pulihkan terlebih dahulu tabelnya, lalu pulihkan ke LSN target.

Batasan tabel Delta

  • Tabel Delta atau partisi yang di-drop dapat dipulihkan sepenuhnya, tetapi tidak ke versi minor tertentu. Untuk mengkueri versi minor tertentu, gunakan time travel.

  • Setelah tabel yang di-drop dipulihkan:

    • Mengkueri tabel pada waktu sebelum drop mengembalikan data seolah-olah drop tidak pernah terjadi.

    • Mengkueri pada waktu antara drop dan pemulihan tidak mengembalikan data apa pun (sistem menganggapnya sebagai data yang dihapus).

    • Menjalankan kueri pada waktu after the restore mengembalikan data seolah-olah perintah DROP dan proses pemulihan tidak pernah terjadi. Data yang dipulihkan tidak dianggap sebagai Data inkremental.

    • Mengajukan kueri terhadap partition yang dihapus sebelum dipulihkan tidak mengembalikan hasil apa pun (sama seperti kueri biasa terhadap partisi yang tidak ada), bukan kesalahan.

  • Setiap siklus drop-dan-pulihkan menghasilkan timestamp commit dan nomor versi baru. Saat tabel berpartisi dipulihkan, versi terpisah dibuat untuk setiap partisi.

Konfigurasi periode retensi

Tetapkan jumlah hari MaxCompute menyimpan data backup. Rentang nilai yang valid adalah 0–30. Nilai default adalah 1 (24 jam). Mengatur ke 0 akan menonaktifkan backup.

-- Atur periode retensi menjadi 7 hari
setproject odps.timemachine.retention.days=7;
Hanya Akun Alibaba Cloud atau administrator proyek yang dapat mengubah periode retensi.

Perilaku setelah mengubah periode retensi:

PerubahanEfek
Memperpanjang periodeLangsung berlaku pada hari yang sama
Memperpendek periodeMaxCompute secara otomatis menghapus data backup yang melebihi periode baru

Untuk melihat pengaturan saat ini, jalankan setproject; pada MaxCompute client (odpscmd) dan periksa nilai odps.timemachine.retention.days.

Lihat riwayat backup

Daftar semua tabel termasuk tabel yang di-drop

SHOW HISTORY FOR tables;

Filter berdasarkan nama:

SHOW HISTORY FOR tables LIKE test_restore_1;

Contoh output:

Name                	Id                              	Type            	IsPartitioned 	CreateTime         	DropTime
test_restore_1      	a0b06367bd054d17a55505aa31601b89	MANAGED_TABLE   	FALSE         	2025-07-18 16:32:13
Memerlukan izin List pada proyek. Lihat Izin MaxCompute.

Lihat riwayat versi tabel

SHOW HISTORY FOR TABLE <table_name> [LIMIT <n>] [LSN '<lsn>' | OFFSET <offset>];

Contoh:

SHOW HISTORY FOR TABLE test_restore_1;

Contoh output:

ObjectType	ObjectId                        	ObjectName          	VERSION(LSN)    	Time               	Operation
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000001	2025-07-18 16:32:14	CREATE
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000002	2025-07-18 16:52:08	OVERWRITE
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000003	2025-07-18 16:52:12	OVERWRITE
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000004	2025-07-18 16:52:14	OVERWRITE
TABLE     	a0b06367bd054d17a55505aa31601b89	test_restore_1      	0000000000000005	2025-07-18 16:52:17	OVERWRITE

Memerlukan izin ShowHistory pada tabel. Jika tabel telah di-drop, perintah ini mengembalikan error. Gunakan SHOW HISTORY FOR tables LIKE <table_name>; sebagai gantinya.

Lihat riwayat versi tabel yang di-drop

Gunakan ID tabel yang diperoleh dari SHOW HISTORY FOR tables:

SHOW HISTORY FOR TABLE test_restore_2 ('id'='437b29466ba948b392b2090ec0a60fc2');

Memerlukan izin List pada proyek.

Lihat riwayat versi partisi

-- Berdasarkan spesifikasi partisi
SHOW HISTORY FOR TABLE test_restore_part_1 PARTITION(ds='20250701');

-- Berdasarkan ID partisi (untuk partisi yang di-drop)
SHOW HISTORY FOR TABLE test_restore_part_1 PARTITION('id'='271aebf3e17a4a8e9f6b35733bf63db4');

Memerlukan izin ShowHistory pada tabel.

Untuk melihat beberapa partisi sekaligus:

SHOW HISTORY FOR TABLE test_restore_part_1 ('id'='fbee66b56cf544d2a9999d5d0ce5d352')
  PARTITION(ds='20250701') PARTITION(ds='20250702');

Pulihkan tabel non-partisi

Pulihkan tabel yang di-drop

RESTORE TABLE <table_name> ('id'='<table_id>');
Nama tabel tidak boleh bentrok dengan tabel yang sudah ada. Ubah nama tabel yang ada terlebih dahulu jika diperlukan.

Contoh:

-- Ubah nama tabel yang bentrok
ALTER TABLE test_restore_2 RENAME TO test_restore_2_rename;

-- Pulihkan tabel yang di-drop
RESTORE TABLE test_restore_2 ('id'='437b29466ba948b392b2090ec0a60fc2');

Permissions:

  • Tabel yang ada: izin Update pada tabel.

  • Tabel yang tidak ada: izin CreateTable pada proyek.

Pulihkan tabel ke versi tertentu

RESTORE TABLE <table_name> TO LSN '<lsn>';

Contoh:

RESTORE TABLE test_restore_1 TO LSN '0000000000000004';

SELECT * FROM test_restore_1;
-- Mengembalikan:
-- +------------+
-- | colname    |
-- +------------+
-- | 2          |
-- +------------+

Pulihkan tabel ke versi tertentu sebagai tabel baru

RESTORE TABLE <table_name> TO LSN '<lsn>' AS <new_table_name>;

Perintah ini memiliki tiga perilaku tergantung pada tabel target:

SkenarioPerilaku
Tabel target tidak adaMembuat tabel baru dengan data yang dipulihkan
Tabel target ada dengan skema yang samaMenimpa data tabel target
Tabel target ada dengan skema berbedaGagal dengan error ODPS-0110061

Contoh — pulihkan dan ubah nama:

RESTORE TABLE test_restore_2 TO LSN '0000000000000003' AS test_restore_new;

SELECT * FROM test_restore_new;
-- Mengembalikan:
-- +------------+
-- | colname    |
-- +------------+
-- | 1          |
-- +------------+

Pulihkan tabel berpartisi

Pulihkan tabel berpartisi yang di-drop

RESTORE TABLE <table_name> ('id'='<table_id>');

Semua partisi yang ada pada saat drop dipulihkan.

Pulihkan partisi yang di-drop

Pulihkan satu atau beberapa partisi yang di-drop ke tabel yang sudah ada:

RESTORE TABLE <table_name> PARTITION('id'='<partition_id>') [PARTITION('id'='<partition_id>')];
Tabel harus ada. Jika tabel juga di-drop, pulihkan tabel terlebih dahulu.

Contoh:

-- Lihat ID partisi
SHOW HISTORY FOR TABLE test_restore_part_y;

-- Pulihkan dua partisi yang di-drop
RESTORE TABLE test_restore_part_y
  PARTITION('id'='a14d6cb4ab0c46378a6e284b257bbfaa')
  PARTITION('id'='8c85184ec0b44fba8198274401df2519');

Pulihkan partisi ke versi tertentu

RESTORE TABLE <table_name>
  PARTITION(<partition_spec>) [PARTITION(<partition_spec>)]
  TO LSN '<lsn>';

Saat memulihkan beberapa partisi ke satu LSN, setiap partisi dipulihkan ke LSN yang ditentukan jika LSN tersebut benar-benar ada untuk partisi tersebut. Jika tidak, partisi dipulihkan ke LSN terdekat sebelumnya.

Contoh: Partisi pt1 memiliki LSN 100, 102, 104, 106. Partisi pt2 memiliki LSN 101, 103, 104, 105. Memulihkan keduanya ke LSN 102 akan memulihkan pt1 ke 102 dan pt2 ke 101.

RESTORE TABLE test_restore_part_y
  PARTITION(ds='20250701') PARTITION(ds='20250702')
  TO LSN '0000000000000010';

Pulihkan partisi ke versi tertentu sebagai tabel baru

RESTORE TABLE <table_name>
  PARTITION(<partition_spec>) [PARTITION(<partition_spec>)]
  TO LSN '<lsn>' AS <new_table_name>;

Contoh tabel Delta

Buat tabel Delta, masukkan data, lalu drop dan pulihkan

-- Buat tabel Delta
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
INSERT OVERWRITE TABLE mf_dt PARTITION(dd='01', hh='01')
  VALUES (1, 1), (2, 2), (3, 3);

INSERT INTO TABLE mf_dt PARTITION(dd='01', hh='01')
  VALUES (3, 30), (4, 4), (5, 5);

SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- Mengembalikan:
-- +----+-----+----+----+
-- | pk | val | dd | hh |
-- +----+-----+----+----+
-- | 1  | 1   | 01 | 01 |
-- | 4  | 4   | 01 | 01 |
-- | 5  | 5   | 01 | 01 |
-- | 2  | 2   | 01 | 01 |
-- | 3  | 30  | 01 | 01 |
-- +----+-----+----+----+

Dapatkan ID tabel untuk pemulihan

Jalankan DESC EXTENDED mf_dt; dan temukan bidang TableID pada bagian Extended Info:

TableID:  cd607cd938dc4ca6886dd12212995604

Drop dan pulihkan tabel

DROP TABLE mf_dt;

RESTORE TABLE mf_dt ('id' = 'cd607cd938dc4ca6886dd12212995604');

-- Verifikasi data
SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- Mengembalikan data yang sama seperti sebelum drop.

Drop dan pulihkan partisi

-- Dapatkan ID partisi
SHOW HISTORY FOR TABLE mf_dt;

-- Drop partisi
ALTER TABLE mf_dt DROP PARTITION (dd = '01', hh = '01');

-- Pulihkan partisi
RESTORE TABLE mf_dt PARTITION('id' = '51d38cc9ded344cf99188cd1a806e5d2');

-- Verifikasi data
SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- Mengembalikan data yang sama seperti sebelum drop.

Time travel pada tabel yang dipulihkan

Setelah tabel Delta dipulihkan, kueri time travel tetap berfungsi:

-- Kueri versi tertentu
SELECT * FROM mf_dt version AS OF 2 WHERE dd = '01' AND hh = '01';
-- Mengembalikan:
-- +----+-----+----+----+
-- | pk | val | dd | hh |
-- +----+-----+----+----+
-- | 1  | 1   | 01 | 01 |
-- | 3  | 3   | 01 | 01 |
-- | 2  | 2   | 01 | 01 |
-- +----+-----+----+----+

-- Kueri versi terbaru
SELECT * FROM mf_dt version AS OF get_latest_version('mf_dt')
  WHERE dd = '01' AND hh = '01';
-- Mengembalikan data saat ini.

Pembersihan file data (tabel Delta)

Tabel Delta menyimpan data historis dalam periode time travel, yang menimbulkan biaya penyimpanan tambahan. Sistem secara otomatis menghapus data historis yang tidak diperlukan dalam waktu satu hari ketika semua kondisi berikut terpenuhi:

  • Data lebih lama dari periode time travel. (Jika time travel dinonaktifkan untuk tabel, semua data historis memenuhi syarat.)

  • Data telah melebihi lifecycle atau di-drop, dan juga telah melebihi waktu perlindungan backup.

"Data historis" mengacu pada file data yang dipindahkan ke direktori Keranjang daur ulang. Operasi seperti melebihi lifecycle, menjalankan drop, melakukan compaction, atau menjalankan INSERT OVERWRITE semuanya memindahkan file data ke Keranjang daur ulang.

Pembersihan paksa dengan PURGE

Dalam operasi normal, biarkan sistem menangani pembersihan secara otomatis. Gunakan PURGE TABLE hanya dalam keadaan darurat—misalnya, ketika jumlah file berlebihan menyebabkan ketidakstabilan disk atau data historis menyebabkan lonjakan biaya tak terduga.

PURGE TABLE <table_name>;
Peringatan

Setelah menjalankan perintah ini, kueri time travel mungkin tidak lagi mengembalikan data historis.

Contoh:

CREATE TABLE mf_ttt (pk BIGINT NOT NULL PRIMARY KEY,
                     val BIGINT NOT NULL)
                     TBLPROPERTIES ("transactional"="true");

INSERT INTO TABLE mf_ttt VALUES (1, 1), (2, 2);
INSERT INTO TABLE mf_ttt VALUES (2, 20), (3, 3);

-- Time travel mengembalikan data versi 2
SELECT * FROM mf_ttt version AS OF 2;
-- +----+-----+
-- | pk | val |
-- +----+-----+
-- | 1  | 1   |
-- | 2  | 2   |
-- +----+-----+

-- Setelah compaction, time travel tetap berfungsi
ALTER TABLE mf_ttt compact major;
SELECT * FROM mf_ttt version AS OF 2;
-- Hasil sama seperti di atas

-- Setelah purge, time travel mengembalikan data berbeda
PURGE TABLE mf_ttt;
SELECT * FROM mf_ttt version AS OF 2;
-- +----+-----+
-- | pk | val |
-- +----+-----+
-- | 1  | 1   |
-- | 3  | 3   |
-- | 2  | 20  |
-- +----+-----+

Referensi perintah

SkenarioPerintahDeskripsi
Configure retentionsetproject odps.timemachine.retention.days=<days>;Atur periode retensi (0–30 hari). Default: 1.
setproject;Lihat pengaturan proyek saat ini termasuk periode retensi.
View backup historySHOW HISTORY FOR tables [LIKE <name>];Daftar semua tabel termasuk tabel yang di-drop. Memerlukan izin List.
SHOW HISTORY FOR TABLE <name> [LIMIT <n>] [LSN '<lsn>' | OFFSET <n>];Lihat riwayat versi tabel. Memerlukan izin ShowHistory.
SHOW HISTORY FOR TABLE <name> ('id'='<id>');Lihat riwayat versi tabel yang di-drop berdasarkan ID-nya. Memerlukan izin List.
SHOW HISTORY FOR TABLE <name> <partition_spec>;Lihat riwayat versi partisi. Memerlukan izin ShowHistory.
SHOW HISTORY FOR TABLE <name> PARTITION('id'='<id>');Lihat riwayat versi partisi yang di-drop berdasarkan ID-nya.
Restore dataRESTORE TABLE <name> ('id'='<id>');Pulihkan tabel atau partisi yang di-drop.
RESTORE TABLE <name> TO LSN '<lsn>';Pulihkan tabel ke versi tertentu.
RESTORE TABLE <name> TO LSN '<lsn>' AS <new_name>;Pulihkan tabel ke versi tertentu dan simpan sebagai tabel baru (atau yang sudah ada).
RESTORE TABLE <name> PARTITION('id'='<id>') [...];Pulihkan satu atau beberapa partisi yang di-drop.
RESTORE TABLE <name> <partition_spec> [...] TO LSN '<lsn>';Pulihkan partisi ke versi tertentu.
RESTORE TABLE <name> <partition_spec> [...] TO LSN '<lsn>' AS <new_name>;Pulihkan partisi ke versi tertentu dan simpan sebagai tabel baru.
CleanupPURGE TABLE <name>;Hapus paksa data historis di Keranjang daur ulang.

Catatan penggunaan

  • Gunakan versi terbaru MaxCompute client untuk mengakses semua perintah backup dan pemulihan.

  • Tabel backup hanya dibuat saat data dimodifikasi. Tidak ada modifikasi berarti tidak ada entri backup.

  • Data backup yang melebihi periode retensi secara otomatis dihapus dan tidak dapat dipulihkan atau dikueri.

  • Untuk informasi tentang izin yang diperlukan, lihat Izin MaxCompute.