Topik ini menjelaskan fitur backup dan pemulihan MaxCompute serta menyediakan perintah dan contoh terkait.
Ikhtisar
MaxCompute menyediakan fitur backup dan pemulihan yang secara otomatis mencadangkan dan menyimpan data asli selama periode tertentu. Data asli mengacu pada data yang belum mengalami operasi apa pun, seperti penghapusan atau modifikasi. Anda dapat memulihkan data dalam periode retensi untuk mencegah kehilangan data.
Fitur backup dan pemulihan memberikan manfaat berikut:
Pengaktifan otomatis
Fitur ini tidak bergantung pada penyimpanan eksternal. Secara default, periode retensi data di semua Proyek MaxCompute adalah 24 jam. Backup dan penyimpanan data tidak dikenai biaya.
Backup otomatis dan berkelanjutan
MaxCompute secara otomatis mencadangkan data setiap kali dimodifikasi. Jika data dimodifikasi beberapa kali, MaxCompute akan mencadangkan data setelah setiap modifikasi. Fitur ini lebih efisien dalam mencegah kehilangan data dibandingkan dengan kebijakan backup periodik.
Pemulihan data yang cepat dan mudah digunakan
MaxCompute menyediakan kemampuan lanjutan untuk mengelola berbagai versi data dan metadata. Operasi backup dan pemulihan tidak mengonsumsi sumber daya komputasi tambahan. Anda dapat menjalankan perintah terkait untuk memulihkan volume data yang berbeda.
Perhatian
Saat menggunakan fitur backup dan pemulihan, perhatikan poin-poin berikut:
Jika ingin melihat informasi backup tabel menggunakan Klien MaxCompute, disarankan untuk mengunduh versi terbaru klien tersebut. Versi sebelumnya mungkin tidak menampilkan parameter backup dan pemulihan atau informasi backup tabel.
Tabel cadangan dihasilkan setiap kali tabel dimodifikasi. Tidak ada tabel cadangan yang dihasilkan jika tabel tidak dimodifikasi.
Jika durasi penyimpanan tabel cadangan melebihi periode retensi data cadangan yang dikonfigurasi untuk proyek, MaxCompute akan menghapus tabel cadangan tersebut. Tabel cadangan yang dihapus tidak dapat dipulihkan atau diquery.
Setelah perintah purge dijalankan pada tabel, data dalam tabel tersebut tidak dapat dipulihkan.
Partisi atau tabel yang di-drop, termasuk tabel Delta yang di-drop, tidak dapat langsung dipulihkan ke nomor urutan log (LSN) tertentu. Anda harus terlebih dahulu memulihkan partisi atau tabel tersebut, lalu memulihkannya ke LSN tertentu.
Batasan Tabel Delta:
Anda dapat memulihkan sepenuhnya partisi atau tabel yang di-drop. Namun, Anda tidak dapat memulihkan partisi atau tabel tersebut ke versi minor tertentu. Untuk mengquery data versi minor, gunakan fitur perjalanan waktu.
Setelah tabel atau partisi yang di-drop dipulihkan, perilaku Perjalanan Waktu dan query inkremental hampir sama seperti sebelum operasi drop. Namun, perhatikan detail berikut:
Jika melakukan query, seperti query perjalanan waktu, pada tabel yang di-drop sebelum tabel tersebut dipulihkan, sistem akan melaporkan error. Jika melakukan query pada partisi yang di-drop sebelum partisi tersebut dipulihkan, tidak ada hasil query yang dikembalikan, sama seperti query biasa.
Jika waktu query yang ditentukan untuk query perjalanan waktu atau query inkremental pada tabel yang di-drop dan telah dipulihkan lebih awal dari waktu pemulihan tetapi lebih akhir dari atau sama dengan waktu drop, sistem menganggap data yang diquery sebagai data yang dihapus, sehingga tidak ada hasil query yang dikembalikan.
Jika waktu query yang ditentukan untuk query perjalanan waktu atau query inkremental pada tabel yang di-drop dan telah dipulihkan lebih awal dari waktu drop, hasil query sama seperti jika operasi drop tidak pernah dilakukan.
Jika waktu query yang ditentukan untuk query perjalanan waktu atau query inkremental pada tabel yang di-drop dan telah dipulihkan lebih akhir dari atau sama dengan waktu pemulihan, hasil query sama seperti jika operasi drop dan pemulihan tidak pernah dilakukan. Data yang dipulihkan tidak dianggap sebagai Data inkremental.
Setelah melakukan operasi drop dan pemulihan, sistem menghasilkan waktu commit dan versi. Jika memulihkan tabel partisi, semua partisi dalam tabel tersebut dipulihkan secara terpisah. Sistem menghasilkan satu versi untuk setiap partisi.
Backup dan pemulihan otomatis untuk Tampilan yang di-materialisasi, tabel objek, dan tabel eksternal tidak didukung.
Perintah
Tabel berikut menjelaskan perintah yang digunakan dalam fitur backup dan pemulihan.
Skenario | Perintah | Fitur | Izin |
Konfigurasikan periode retensi untuk data cadangan |
| Perintah ini digunakan untuk mengonfigurasi periode retensi data cadangan. Selama periode retensi, Anda dapat memulihkan data versi yang sedang digunakan ke data cadangan versi apa pun. Nilai Setelah siklus backup disesuaikan, kebijakan yang berlaku adalah sebagai berikut:
| Hanya Akun Alibaba Cloud atau administrator proyek yang dapat melakukan operasi ini. |
| Perintah ini dijalankan pada Klien MaxCompute untuk mendapatkan informasi tentang parameter tingkat proyek. Untuk informasi lebih lanjut tentang cara menggunakan Klien MaxCompute, lihat Klien MaxCompute (odpscmd). Anda dapat melihat nilai parameter odps.timemachine.retention.days. Jika | ||
Lihat data cadangan |
| Lihat informasi tentang tabel di proyek saat ini dan tabel dalam status cadangan, termasuk tabel yang dihapus. Anda dapat memfilter tabel berdasarkan nama tabel. Perintah ini berbeda dari perintah | Anda harus memiliki izin List pada proyek. Untuk informasi lebih lanjut, lihat Izin MaxCompute. |
| Lihat data cadangan tabel tertentu. Anda dapat menggunakan LIMIT untuk menentukan panjang catatan, serta OFFSET atau versi (LSN) untuk menentukan posisi awal. Untuk informasi lebih lanjut tentang parameter, lihat Deskripsi parameter. |
Untuk informasi lebih lanjut, lihat Izin MaxCompute. | |
| Perintah ini digunakan untuk melihat data cadangan tabel yang di-drop dan mendapatkan informasi tentang versi data dalam periode retensi. Anda dapat menjalankan perintah | Anda harus memiliki izin List pada proyek. Untuk informasi lebih lanjut, lihat Izin MaxCompute. | |
| Perintah ini digunakan untuk melihat data cadangan partisi tertentu dan mendapatkan informasi tentang versi data dalam periode retensi. | Tidak ada. | |
| Perintah ini digunakan untuk melihat data cadangan partisi yang di-drop dan mendapatkan informasi tentang versi data dalam periode retensi. Anda dapat memperoleh nilai id dari bidang ObjectId dalam output perintah | ||
Pulihkan data |
| Memulihkan tabel yang dihapus. Anda dapat menggunakan perintah |
|
| Memulihkan tabel ke versi tertentu. Anda dapat memperoleh informasi versi tabel menggunakan perintah | ||
| Memulihkan tabel ke versi tertentu, mengganti namanya menjadi tabel baru, atau memperbarui data ke tabel dengan nama berbeda. | ||
| Perintah ini digunakan untuk memulihkan partisi yang di-drop. Anda dapat memulihkan beberapa partisi yang di-drop sekaligus. Dalam kondisi normal, perintah ini digunakan untuk memulihkan partisi yang di-drop menggunakan pernyataan | ||
| Perintah ini digunakan untuk memulihkan partisi tertentu ke versi tertentu. Anda dapat memulihkan beberapa partisi sekaligus. Dalam kondisi normal, perintah ini digunakan untuk memulihkan partisi yang perlu dipulihkan setelah operasi | ||
| Memulihkan partisi tertentu ke versi tertentu dan mengganti namanya menjadi tabel baru. |
Operasi pembersihan file data
Dibandingkan dengan tabel standar, tabel Delta menyimpan data historis dalam periode perjalanan waktu, yang menimbulkan biaya penyimpanan tambahan. Dalam skenario lain, sistem secara otomatis menghapus file data historis yang tidak diperlukan pada waktu yang tepat (paling lama dalam satu hari). Pengguna tidak perlu melakukan operasi tambahan, yang juga menghemat biaya penyimpanan terkait. Data historis yang dapat dihapus meliputi:
Data historis yang lebih lama dari periode perjalanan waktu. Jika tabel dikonfigurasi agar tidak mendukung query perjalanan waktu, semua data historis dapat dihapus secara otomatis.
Data historis yang telah melebihi siklus hidup atau telah di-drop, dan juga telah melebihi waktu perlindungan backup.
Data historis harus memenuhi semua kondisi di atas agar dapat dihapus secara otomatis.
Data historis secara khusus mengacu pada file data yang telah dipindahkan ke direktori Keranjang daur ulang. Umumnya, selain melebihi siklus hidup atau menjalankan operasi drop, melakukan compaction atau insert overwrite juga akan menyebabkan file data yang ada di direktori penulisan data saat ini dipindahkan ke direktori Keranjang daur ulang, menunggu penghapusan otomatis oleh sistem.
Sintaks pembersihan paksa file
-- Hapus paksa secara manual file data historis di Keranjang daur ulang. PURGE TABLE <table_name>;Catatan penggunaan dan batasan
Setelah menjalankan perintah ini, sistem akan segera menghapus semua data historis di Keranjang daur ulang, yang dapat menyebabkan operasi perjalanan waktu tidak dapat mengquery data historis.
Perintah ini umumnya hanya dijalankan dalam skenario khusus untuk keperluan darurat, seperti ketika terlalu banyak file menyebabkan ketidakstabilan baca/tulis disk, atau ketika terlalu banyak data historis menyebabkan lonjakan biaya. Dalam kondisi normal, data historis di Keranjang daur ulang dapat menunggu penghapusan otomatis oleh sistem.
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); SELECT * FROM mf_ttt version AS OF 2; -- Hasil berikut dikembalikan: +------------+------------+ | pk | val | +------------+------------+ | 1 | 1 | | 2 | 2 | +------------+------------+ -- Lakukan compaction, jalankan purge, lalu eksekusi query perjalanan waktu. ALTER TABLE mf_ttt compact major; SELECT * FROM mf_ttt version AS OF 2; -- Hasil berikut dikembalikan: +------------+------------+ | pk | val | +------------+------------+ | 1 | 1 | | 2 | 2 | +------------+------------+ PURGE TABLE mf_ttt; SELECT * FROM mf_ttt version AS OF 2; --Hasil berikut dikembalikan: +------------+------------+ | pk | val | +------------+------------+ | 1 | 1 | | 3 | 3 | | 2 | 20 | +------------+------------+
Contoh melihat data cadangan
Bagian ini menjelaskan cara melihat data cadangan tabel di proyek test_restore.
Lihat data cadangan semua tabel.
Jalankan perintah
SHOW HISTORY FOR tables;. Contoh pernyataan:-- Buat tabel test_restore_x. CREATE TABLE test_restore_1(colname STRING); CREATE TABLE test_restore_2(colname INT); -- Lihat data cadangan semua tabel. SHOW HISTORY FOR tables;Hasil berikut dikembalikan:
ID = 20250718083243873gj6aesnzawr3 Name Id Type IsPartitioned CreateTime DropTime test_restore_1 a0b06367bd054d17a55505aa31601b89 MANAGED_TABLE FALSE 2025-07-18 16:32:13 test_restore_2 437b29466ba948b392b2090ec0a60fc2 MANAGED_TABLE FALSE 2025-07-18 16:32:14 OKLihat data cadangan tabel tertentu.
Jalankan perintah
SHOW HISTORY FOR tables [LIKE <table_name>];. Contoh pernyataan:-- Lihat data cadangan tabel test_restore1. SHOW HISTORY FOR tables LIKE test_restore_1;Hasil berikut dikembalikan:
ID = 20250718083704294gcw24sgigrl Name Id Type IsPartitioned CreateTime DropTime test_restore_1 a0b06367bd054d17a55505aa31601b89 MANAGED_TABLE FALSE 2025-07-18 16:32:13 OKLihat data cadangan tabel yang di-drop.
Jalankan perintah
SHOW HISTORY FOR table <table_name>;. Contoh pernyataan:-- Perbarui data tabel test_restore_1. INSERT OVERWRITE TABLE test_restore_1 values("0"); INSERT OVERWRITE TABLE test_restore_1 values("1"); INSERT OVERWRITE TABLE test_restore_1 values("2"); INSERT OVERWRITE TABLE test_restore_1 values("3"); -- Lihat data cadangan tabel test_restore_1. SHOW HISTORY FOR TABLE test_restore_1;Hasil berikut dikembalikan:
ID = 2025071808522592gbougy83ad1 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 OKLihat data cadangan tabel partisi atau partisi.
Jalankan perintah
SHOW HISTORY FOR table <table_name> [LIMIT <limit_value>] (LSN <lsn_value> | OFFSET <offset_value>);. Contoh pernyataan:SHOW HISTORY FOR TABLE test_restore_1 LIMIT 1 LSN '00000000000000000002';Hasilnya sebagai berikut.
ID = 20250718090511323gzfl5f9glr2 ObjectType ObjectId ObjectName VERSION(LSN) Time Operation TABLE a0b06367bd054d17a55505aa31601b89 test_restore_1 0000000000000002 2025-07-18 16:52:08 OVERWRITE OKLihat data cadangan tabel yang di-drop.
Jalankan perintah
SHOW HISTORY FOR TABLE table_name ('id'='xxxx');. Contoh:-- Perbarui data tabel test_restore_2. INSERT OVERWRITE TABLE test_restore_2 values(0); INSERT OVERWRITE TABLE test_restore_2 values(1); INSERT OVERWRITE TABLE test_restore_2 values(2); INSERT OVERWRITE TABLE test_restore_2 values(3); -- Hapus tabel test_restore_2. DROP TABLE test_restore_2; -- Konfirmasi penghapusan tabel test_restore_2. Confirm to "drop table test_restore_2;" (yes/no)? yes -- Lihat data cadangan tabel test_restore_2 yang di-drop. SHOW HISTORY FOR TABLE test_restore_2('id'='437b29466ba948b392b2090ec0a60fc2');Hasil berikut dikembalikan:
ID = 20250718091226165g1vtbsnyu4h ObjectType ObjectId ObjectName VERSION(LSN) Time Operation TABLE 437b29466ba948b392b2090ec0a60fc2 test_restore_2 0000000000000001 2025-07-18 16:32:14 CREATE TABLE 437b29466ba948b392b2090ec0a60fc2 test_restore_2 0000000000000002 2025-07-18 17:12:20 DROP OKLihat data cadangan tabel partisi.
Jalankan perintah
SHOW HISTORY FOR TABLE table_name ('id'='xxxx');untuk melihat data cadangan tabel partisi. Contoh:-- Buat tabel bernama test_restore_part_1. CREATE TABLE test_restore_part_1(colname string) PARTITIONED BY(ds string); -- Perbarui tabel test_restore_part_1. INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250701") values ("1"); INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250702") values ("2"); INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250703") values ("3"); INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250704") values ("4"); INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250705") values ("5"); INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250706") values ("6"); INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250101") values ("20250101"); INSERT OVERWRITE TABLE test_restore_part_1 partition(ds="20250102") values ("20250102"); -- Lihat data cadangan tabel test_restore_part_1. SHOW HISTORY FOR TABLE test_restore_part_1('id'='fbee66b56cf544d2a9999d5d0ce5d352');Hasil berikut dikembalikan:
ID = 20250718092558737ge7pyaa803e ObjectType ObjectId ObjectName VERSION(LSN) Time Operation TABLE fbee66b56cf544d2a9999d5d0ce5d352 test_restore_part_1 0000000000000001 2025-07-18 17:23:11 CREATE PARTITION 271aebf3e17a4a8e9f6b35733bf63db4 ds=20250701 0000000000000002 2025-07-18 17:25:23 CREATE PARTITION df9e7f502d464763a243fefe1da4f911 ds=20250702 0000000000000003 2025-07-18 17:25:27 CREATE PARTITION 24cf9953e8c5445bb2f1ead87ea09bae ds=20250703 0000000000000004 2025-07-18 17:25:28 CREATE PARTITION 1c4a9a608d3d4d22bc194ab402da4b8f ds=20250704 0000000000000005 2025-07-18 17:25:32 CREATE PARTITION be0d4c9ff5034c4f932d1a2245c2e65a ds=20250705 0000000000000006 2025-07-18 17:25:35 CREATE PARTITION 45957304be5f4d09a5a3ba66808604be ds=20250706 0000000000000007 2025-07-18 17:25:37 CREATE PARTITION c36933ddefb6415bacabd5f453ee3ce7 ds=20250101 0000000000000008 2025-07-18 17:25:42 CREATE PARTITION 0b01e0d234fc4bf6a3529752e3045037 ds=20250102 0000000000000009 2025-07-18 17:25:44 CREATE OKLihat data cadangan partisi.
Jalankan perintah
SHOW HISTORY FOR TABLE table_name partition_spec;atauSHOW HISTORY FOR TABLE table_name PARTITION('id'='xxxx');untuk melihat data cadangan partisi. Contoh berikut menunjukkan rinciannya.
-- Lihat data cadangan partisi tertentu di tabel test_restore_part_1.
SHOW HISTORY FOR TABLE test_restore_part_1('id'='fbee66b56cf544d2a9999d5d0ce5d352')
PARTITION(ds='20250701') PARTITION(ds='20250702');Hasil berikut dikembalikan:
ID = 2025071809280096g7ou2qft0o2
ObjectType ObjectId ObjectName VERSION(LSN) Time Operation
PARTITION 271aebf3e17a4a8e9f6b35733bf63db4 ds=20250701 0000000000000002 2025-07-18 17:25:23 CREATE
PARTITION df9e7f502d464763a243fefe1da4f911 ds=20250702 0000000000000003 2025-07-18 17:25:27 CREATE
OKMemulihkan tabel non-partisi
Bagian ini menjelaskan cara memulihkan tabel non-partisi di proyek test_restore.
Memulihkan tabel yang di-drop.
Jalankan perintah
RESTORE TABLE table_name ('id'='xxxxx');. Pastikan nama tabel yang ingin Anda pulihkan bersifat unik. Jika tabel lain memiliki nama yang sama, ubah terlebih dahulu namanya. Contoh pernyataan:-- Query data cadangan tabel test_restore_2 yang di-drop. SHOW HISTORY FOR TABLE test_restore_2('id'='437b29466ba948b392b2090ec0a60fc2'); -- Buat tabel bernama test_restore_2. CREATE TABLE test_restore_2(colname string); -- Pulihkan tabel test_restore_2 yang di-drop. Namun, error dikembalikan karena sudah ada tabel dengan nama yang sama. RESTORE TABLE test_restore_2('id'='437b29466ba948b392b2090ec0a60fc2'); -- Ganti nama tabel test_restore_2 yang ada. ALTER TABLE test_restore_2 rename TO test_restore_2_rename; -- Pulihkan tabel test_restore_2 yang di-drop. RESTORE TABLE test_restore_2('id'='437b29466ba948b392b2090ec0a60fc2');OK dikembalikan.
Memulihkan tabel ke versi tertentu. Untuk tabel yang dihapus, Anda perlu memulihkan tabel terlebih dahulu sebelum melakukan operasi ini.
Jalankan perintah
RESTORE TABLE table_name TO LSN 'xxxx';. Contoh pernyataan:-- Pulihkan tabel test_restore_1 ke LSN tertentu. RESTORE TABLE test_restore_1 TO LSN '0000000000000004'; -- Query data tabel test_restore_1. SELECT * FROM test_restore_1;Hasil berikut dikembalikan:
+------------+ | colname | +------------+ | 2 | +------------+Memulihkan tabel ke versi tertentu dan mengganti nama tabel, atau memperbarui data ke tabel dengan nama berbeda.
Jalankan perintah
RESTORE TABLE table_name TO LSN 'xxxx' AS new_table_name;.Ini mencakup tiga skenario berikut:
Memulihkan tabel ke versi tertentu dan mengganti nama tabel.
-- Pulihkan tabel test_restore_2 yang di-drop ke LSN tertentu dan ganti nama tabel menjadi test_restore_new. RESTORE TABLE test_restore_2 TO LSN '0000000000000003' AS test_restore_new; -- Query data tabel test_restore_new. SELECT * FROM test_restore_new;Hasil berikut dikembalikan:
+------------+ | colname | +------------+ | 1 | +------------+Memulihkan tabel ke versi tertentu dan memperbarui data ke tabel yang sudah ada dengan nama berbeda.
-- Pulihkan tabel test_restore_2 ke versi tertentu dan simpan data ke tabel test_restore_new yang sudah ada. RESTORE TABLE test_restore_2 TO LSN '0000000000000005' AS test_restore_new; -- Query data cadangan tabel test_restore_new. SHOW HISTORY FOR TABLE test_restore_new;Hasil berikut dikembalikan:
ID = 20250722082102262gsizjcbzawr3 ObjectType ObjectId ObjectName VERSION(LSN) Time Operation TABLE 565b5e29eecf4fbd88965b24822ded6a test_restore_new 0000000000000001 2025-07-22 16:17:1CREATE TABLE 565b5e29eecf4fbd88965b24822ded6a test_restore_new 0000000000000002 2025-07-22 16:20:5OVERWRITE OKMemulihkan tabel ke versi tertentu dan memperbarui data ke tabel dengan nama dan skema berbeda. Operasi ini gagal karena kedua tabel harus memiliki skema yang sama. Contoh:
-- Buat tabel dengan skema berbeda. CREATE TABLE test_restore_2cols(col1 string, col2 string); -- Pulihkan tabel test_restore_1 ke versi tertentu dan tulis data ke tabel test_restore_2cols. RESTORE TABLE test_restore_1 TO LSN '0000000000000005' AS test_restore_2cols;Hasil berikut dikembalikan:
FAILED: Catalog Service Failed, ErrorCode: 105, Error Message: ODPS-0110061: Failed to run ddltask - Restore table failed because: field schema not same, [{"comment":"","id":"","name":"colname","type":"string"}] vs [{"comment":"","id":"","name":"col1","type":"string"}, {"comment":"","id":"","name":"col2","type":"string"}]
Memulihkan tabel partisi dan partisi
Bagian ini menjelaskan cara memulihkan tabel partisi atau partisi di proyek test_restore.
Memulihkan tabel partisi.
Jalankan perintah
RESTORE TABLE table_name ('id'='xxxxx');. Contoh pernyataan:-- Buat tabel bernama test_restore_part_x. CREATE TABLE test_restore_part_x(a string) PARTITIONED BY(ds string); -- Perbarui tabel test_restore_part_x. INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20191201") values ("1"); INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20191202") values ("2"); INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20191203") values ("3"); INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20191204") values ("4"); INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20191205") values ("5"); INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20191205") values ("6"); INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20200101") values ("20200101"); INSERT OVERWRITE TABLE test_restore_part_x partition(ds="20200102") values ("20200102"); -- Lihat partisi tabel test_restore_part_x. LIST PARTITIONS test_restore_part_x; -- Lihat data tabel test_restore_part_x. SELECT * FROM test_restore_part_x; -- Drop tabel test_restore_part_x. DROP TABLE test_restore_part_x; -- Konfirmasi operasi drop tabel. Confirm to "drop table test_restore_part_x;" (yes/no)? yes -- Pulihkan tabel test_restore_part_x. RESTORE TABLE test_restore_part_x('id'='94d436523fe14ba39f33d2dee738c018'); -- Lihat data cadangan tabel test_restore_part_x. SHOW HISTORY FOR TABLE test_restore_part_x('id'='94d436523fe14ba39f33d2dee738c018'); -- Lihat partisi tabel test_restore_part_x. LIST PARTITIONS test_restore_part_x;Hasil berikut dikembalikan:
ds=20191201 ds=20191202 ds=20191203 ds=20191204 ds=20191205 ds=20200101 ds=20200102Memulihkan partisi. Untuk tabel yang dihapus, Anda perlu memulihkan tabel terlebih dahulu sebelum melakukan operasi ini.
Jalankan perintah
RESTORE TABLE table_name PARTITION('id'='xxxx')[PARTITION('id'='xxxx')];. Contoh pernyataan:-- Buat tabel bernama test_restore_part_y. CREATE TABLE test_restore_part_y(a string) PARTITIONED BY(ds string); -- Perbarui tabel test_restore_part_y. INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250701") values ("1"); INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250702") values ("2"); INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250703") values ("3"); INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250704") values ("4"); INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250705") values ("5"); INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250706") values ("6"); INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250101") values ("20250101"); INSERT OVERWRITE TABLE test_restore_part_y partition(ds="20250102") values ("20250102"); -- Lihat partisi tabel test_restore_part_y. LIST PARTITIONS test_restore_part_y; -- Drop partisi dari tabel test_restore_part_y. ALTER TABLE test_restore_part_y DROP PARTITION(ds='20250701'),PARTITION(ds='20250702'); -- Konfirmasi operasi drop partisi. Confirm to "alter table test_restore_part_y drop partition(ds='20250701'),partition(ds='20250702');" (yes/no)? yes -- Lihat partisi tabel test_restore_part_y. LIST PARTITIONS test_restore_part_y; -- Lihat ID partisi tabel test_restore_part_y. SHOW HISTORY FOR TABLE test_restore_part_y; -- Pulihkan partisi tabel test_restore_part_y. RESTORE TABLE test_restore_part_y PARTITION('id'='a14d6cb4ab0c46378a6e284b257bbfaa') PARTITION('id'='8c85184ec0b44fba8198274401df2519'); -- Lihat partisi tabel test_restore_part_y. LIST PARTITIONS test_restore_part_y;Hasil berikut dikembalikan:
ds=20250101 ds=20250102 ds=20250701 ds=20250702 ds=20250703 ds=20250704 ds=20250705 ds=20250706Memulihkan partisi ke versi tertentu. Untuk tabel yang dihapus, Anda perlu memulihkan tabel terlebih dahulu sebelum melakukan operasi ini.
Jalankan perintah
RESTORE TABLE table_name partition_spec1[partition_spec2] to LSN 'xxxx';. Contoh pernyataan:-- Perbarui data tabel test_restore_part_y. INSERT OVERWRITE TABLE test_restore_part_y PARTITION(ds="20250701") VALUES ("20250701_v1"); INSERT OVERWRITE TABLE test_restore_part_y PARTITION(ds="20250702") VALUES ("20250702_v1"); INSERT OVERWRITE TABLE test_restore_part_y PARTITION(ds="20250701") VALUES ("20250701_v2"); INSERT OVERWRITE TABLE test_restore_part_y PARTITION(ds="20250702") VALUES ("20250702_v2"); -- Lihat data partisi tertentu di tabel test_restore_part_y. SELECT * FROM test_restore_part_y WHERE ds='20250701' or ds='20250702'; -- Pulihkan partisi tertentu di tabel test_restore_part_y ke LSN tertentu. RESTORE TABLE test_restore_part_y PARTITION(ds='20250701') PARTITION(ds='20250702') to LSN '0000000000000010'; -- Lihat data partisi tertentu di tabel test_restore_part_y. SELECT * FROM test_restore_part_y WHERE ds='20250701' or ds='20250702';Hasil berikut dikembalikan:
-- Query pertama mengembalikan hasil berikut. +------------+------------+ | a | ds | +------------+------------+ | 20250701_v2 | 20250701 | | 20250702_v2 | 20250702 | +------------+------------+ -- Query kedua mengembalikan hasil berikut. +------------+------------+ | a | ds | +------------+------------+ | 2 | 20250702 | | 1 | 20250701 | +------------+------------+Memulihkan partisi ke versi tertentu dan mengganti nama tabel. Untuk tabel yang dihapus, Anda perlu memulihkan tabel terlebih dahulu sebelum melakukan operasi ini.
Jalankan perintah
RESTORE TABLE table_name partition_spec1[partition_spec2] to LSN 'xxxx' as new_table_name;. Contoh pernyataan:-- Pulihkan partisi ke LSN tertentu dan beri nama tabel baru test_restore_part_y_v10. RESTORE TABLE test_restore_part_y PARTITION(ds='20250701') PARTITION(ds='20250702') TO LSN '0000000000000010' AS test_restore_part_y_v10; -- Lihat data tabel test_restore_part_y_v10. SELECT * FROM test_restore_part_y_v10 WHERE ds='20250701' or ds='20250702';Hasil berikut dikembalikan:
+------------+------------+ | a | ds | +------------+------------+ | 1 | 20250701 | | 2 | 20250702 | +------------+------------+
Contoh Tabel Delta
-- Buat tabel.
CREATE TABLE mf_dt (pk BIGINT NOT NULL PRIMARY KEY,
val BIGINT NOT NULL)
PARTITIONED BY (dd STRING, hh STRING)
TBLPROPERTIES ("transactional"="true");
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';
-- Hasil berikut dikembalikan.
+------------+------------+------------+------------+
| pk | val | dd | hh |
+------------+------------+------------+------------+
| 1 | 1 | 01 | 01 |
| 4 | 4 | 01 | 01 |
| 5 | 5 | 01 | 01 |
| 2 | 2 | 01 | 01 |
| 3 | 30 | 01 | 01 |
+------------+------------+------------+------------+
-- Pulihkan tabel. Anda dapat memperoleh 'table_id' dengan menjalankan perintah DESC EXTENDED table.
DESC EXTENDED mf_dt;
-- Hasil berikut dikembalikan.
+------------------------------------------------------------------------------------+
| Owner: ALIYUN$*****cloud_com |
| Project: mc_oss_external_tables |
| TableComment: |
+------------------------------------------------------------------------------------+
| CreateTime: 2025-07-21 15:31:42 |
| LastDDLTime: 2025-07-21 15:31:42 |
| LastModifiedTime: 2025-07-21 17:14:58 |
+------------------------------------------------------------------------------------+
| InternalTable: YES | Size: 8976 |
+------------------------------------------------------------------------------------+
| Native Columns: |
+------------------------------------------------------------------------------------+
| Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment |
+------------------------------------------------------------------------------------+
| pk | bigint | | | false | NULL | |
| val | bigint | | | false | NULL | |
+------------------------------------------------------------------------------------+
| Partition Columns: |
+------------------------------------------------------------------------------------+
| dd | string | |
| hh | string | |
+------------------------------------------------------------------------------------+
| Extended Info: |
+------------------------------------------------------------------------------------+
| TableID: cd607cd938dc4ca6886dd12212995604 |
| IsArchived: false |
| PhysicalSize: 26928 |
| FileNum: 10 |
| StoredAs: AliOrc |
| CompressionStrategy: normal |
| Transactional: true |
| IsolationMin: NONSTRICT_SNAPSHOT_ISOLATION |
| odps.timemachine.retention.days: 1 |
| encryption_enable: false |
| Primarykey: [pk] |
| acid.data.retain.hours: 24 |
| write.bucket.num: 16 |
+------------------------------------------------------------------------------------+
DROP TABLE mf_dt;
Confirm to "DROP TABLE mf_dt" (yes/no)? yes
RESTORE TABLE mf_dt ('id' = 'cd607cd938dc4ca6886dd12212995604');
SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- Hasil berikut dikembalikan.
+------------+------------+------------+------------+
| pk | val | dd | hh |
+------------+------------+------------+------------+
| 1 | 1 | 01 | 01 |
| 4 | 4 | 01 | 01 |
| 5 | 5 | 01 | 01 |
| 2 | 2 | 01 | 01 |
| 3 | 30 | 01 | 01 |
+------------+------------+------------+------------+
-- Pulihkan partisi. Anda dapat memperoleh 'partition_id' dengan menjalankan perintah SHOW HISTORY FOR TABLE.
SHOW HISTORY FOR TABLE mf_dt;
-- Hasil berikut dikembalikan.
ObjectType ObjectId ObjectName VERSION(LSN) Time Operation
TABLE cd607cd938dc4ca6886dd12212995604 mf_dt 0000000000000001 2025-07-21 15:31:4CREATE
PARTITION 51d38cc9ded344cf99188cd1a806e5d2 dd=01/hh=01 0000000000000002 2025-07-21 17:14:4CREATE
PARTITION 51d38cc9ded344cf99188cd1a806e5d2 dd=01/hh=01 0000000000000003 2025-07-21 17:14:5APPEND
TABLE cd607cd938dc4ca6886dd12212995604 mf_dt 0000000000000004 2025-07-21 17:18:4DROP
TABLE cd607cd938dc4ca6886dd12212995604 mf_dt 0000000000000005 2025-07-21 17:18:5RESTORE
PARTITION 51d38cc9ded344cf99188cd1a806e5d2 dd=01/hh=01 0000000000000006 2025-07-21 17:18:5RESTORE
ALTER TABLE mf_dt DROP PARTITION (dd = '01', hh = '01');
Confirm to "ALTER TABLE mf_dt DROP PARTITION (dd = '01', hh = '01')" (yes/no)? yes
RESTORE TABLE mf_dt PARTITION('id' = '51d38cc9ded344cf99188cd1a806e5d2');
SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- Hasil berikut dikembalikan.
+------------+------------+------------+------------+
| pk | val | dd | hh |
+------------+------------+------------+------------+
| 1 | 1 | 01 | 01 |
| 4 | 4 | 01 | 01 |
| 5 | 5 | 01 | 01 |
| 2 | 2 | 01 | 01 |
| 3 | 30 | 01 | 01 |
+------------+------------+------------+------------+
-- Lakukan query perjalanan waktu pada tabel yang dipulihkan.
SELECT * FROM mf_dt version AS OF 2 WHERE dd = '01' AND hh = '01';
-- Hasil berikut dikembalikan.
+------------+------------+------------+------------+
| pk | val | dd | hh |
+------------+------------+------------+------------+
| 1 | 1 | 01 | 01 |
| 3 | 3 | 01 | 01 |
| 2 | 2 | 01 | 01 |
+------------+------------+------------+------------+
SELECT * FROM mf_dt version AS OF get_latest_version('mf_dt')
WHERE dd = '01' AND hh = '01';
-- Hasil berikut dikembalikan.
+------------+------------+------------+------------+
| pk | val | dd | hh |
+------------+------------+------------+------------+
| 1 | 1 | 01 | 01 |
| 4 | 4 | 01 | 01 |
| 5 | 5 | 01 | 01 |
| 2 | 2 | 01 | 01 |
| 3 | 30 | 01 | 01 |
+------------+------------+------------+------------+