MaxCompute, veri her değiştirildiğinde otomatik olarak yedekleme oluşturur ve bu yedeği yapılandırılabilir bir süre boyunca saklar. Veriler yanlışlıkla silinirse veya üzerine yazılırsa, saklama süresi içindeki herhangi bir önceki sürüme geri yükleyebilirsiniz.

Çalışma şekli
Her zaman açık -- Varsayılan olarak etkindir ve 24 saatlik bir saklama süresine sahiptir. Harici depolama alanı gerekmez ve ek maliyet oluşturmaz.
Sürekli -- Her değişiklik bir yedeklemeyi tetikler; böylece planlanmış aralıklar arasındaki veri değişikliklerinin hiçbiri atlanmaz.
Hızlı geri yükleme -- Geri yükleme işlemleri ek hesaplama kaynağı tüketmez. Tek bir komutla bir tablo, bölüm veya belirli bir sürüm geri yüklenebilir.
Sınırlamalar
Materialize görünümler, nesne tabloları ve harici tablolar desteklenmez.
Kümelendirilmiş tablolar geri yüklenemez.
Bir tabloda
PURGE TABLEçalıştırıldıktan sonra, temizlenen veriler geri yüklenemez.Silinen bir tablo veya bölüm (Delta tablolar dahil) doğrudan belirli bir Günlük Sıra Numarasına (LSN) geri yüklenemez. Önce tabloyu geri yükleyin, ardından hedef LSN'ye geri yükleyin.
Delta tablo sınırlamaları
Silinen bir Delta tablosu veya bölümü tamamen geri yüklenebilir ancak belirli bir küçük sürüme geri yüklenemez. Belirli bir küçük sürümü sorgulamak için zaman yolculuğu özelliğini kullanın.
-
Silinen bir tablo geri yüklendikten sonra:
Tabloyu silme işleminden önceki bir zamanda sorgulamak, silme işlemi hiç gerçekleşmemiş gibi veri döndürür.
Silme ve geri yükleme arasındaki bir zamanda sorgulamak veri döndürmez (sistem veriyi silinmiş olarak kabul eder).
Geri yüklemeden sonraki bir zamanda sorgulamak, ne silme ne de geri yükleme işlemi gerçekleşmemiş gibi veri döndürür. Geri yüklenen veriler artımlı veri olarak değerlendirilmez.
Geri yüklenmeden önce silinen bir bölümü sorgulamak hata yerine sonuç döndürmez (var olmayan bir bölümde normal sorgu yapılmasıyla aynıdır).
Her silme ve geri yükleme döngüsü yeni commit zaman damgaları ve sürüm numaraları oluşturur. Bölümlenmiş bir tablo geri yüklendiğinde, her bölüm için ayrı bir sürüm oluşturulur.
Saklama süresini yapılandırma
MaxCompute'ün yedek verileri kaç gün saklayacağını ayarlayın. Geçerli aralık 0--30'dur. Varsayılan değer 1'dir (24 saat). 0 olarak ayarlamak yedeklemeyi devre dışı bırakır.
-- Set the retention period to 7 days
setproject odps.timemachine.retention.days=7;
Saklama süresini yalnızca Alibaba Cloud hesapları veya proje yöneticileri değiştirebilir.
Saklama süresi değiştirildikten sonraki davranış:
|
|
|
|
|
|
|
|
|
Mevcut ayarı görüntülemek için MaxCompute istemcisinde (odpscmd) setproject; komutunu çalıştırın ve odps.timemachine.retention.days değerini kontrol edin.
Yedekleme geçmişini görüntüleme
Silinen tablolar dahil tüm tabloları listeleme
SHOW HISTORY FOR tables;
İsme göre filtreleme:
SHOW HISTORY FOR tables LIKE test_restore_1;
Örnek çıktı:
Name Id Type IsPartitioned CreateTime DropTime
test_restore_1 a0b06367bd054d17a55505aa31601b89 MANAGED_TABLE FALSE 2025-07-18 16:32:13
Proje üzerinde List izni gerektirir. Bkz. MaxCompute izinleri .
Bir tablonun sürüm geçmişini görüntüleme
SHOW HISTORY FOR TABLE <table_name> [LIMIT <n>] [LSN '<lsn>' | OFFSET <offset>];
Örnek:
SHOW HISTORY FOR TABLE test_restore_1;
Örnek çıktı:
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
Tablo üzerinde ShowHistory izni gerektirir. Tablo silinmişse bu komut hata döndürür. Bunun yerine SHOW HISTORY FOR tables LIKE <table_name>; komutunu kullanın.
Silinen bir tablonun sürüm geçmişini görüntüleme
SHOW HISTORY FOR tables komutundan elde edilen tablo ID'sini kullanın:
SHOW HISTORY FOR TABLE test_restore_2 ('id'='437b29466ba948b392b2090ec0a60fc2');
Proje üzerinde List izni gerektirir.
Bir bölümün sürüm geçmişini görüntüleme
-- By partition spec
SHOW HISTORY FOR TABLE test_restore_part_1 PARTITION(ds='20250701');
-- By partition ID (for dropped partitions)
SHOW HISTORY FOR TABLE test_restore_part_1 PARTITION('id'='271aebf3e17a4a8e9f6b35733bf63db4');
Tablo üzerinde ShowHistory izni gerektirir.
Birden çok bölümü aynı anda görüntülemek için:
SHOW HISTORY FOR TABLE test_restore_part_1 ('id'='fbee66b56cf544d2a9999d5d0ce5d352')
PARTITION(ds='20250701') PARTITION(ds='20250702');
Bölümlenmemiş bir tabloyu geri yükleme
Silinen bir tabloyu geri yükleme
RESTORE TABLE <table_name> ('id'='<table_id>');
Tablo adı mevcut bir tablo ile çakışmamalıdır. Gerekirse önce mevcut tabloyu yeniden adlandırın.
Örnek:
-- Rename the conflicting table
ALTER TABLE test_restore_2 RENAME TO test_restore_2_rename;
-- Restore the dropped table
RESTORE TABLE test_restore_2 ('id'='437b29466ba948b392b2090ec0a60fc2');
İzinler:
Mevcut tablo: Tablo üzerinde Update izni.
Mevcut olmayan tablo: Proje üzerinde CreateTable izni.
Bir tabloyu belirli bir sürüme geri yükleme
RESTORE TABLE <table_name> TO LSN '<lsn>';
Örnek:
RESTORE TABLE test_restore_1 TO LSN '0000000000000004';
SELECT * FROM test_restore_1;
-- Returns:
-- +------------+
-- | colname |
-- +------------+
-- | 2 |
-- +------------+
Bir tabloyu belirli bir sürümden yeni bir tablo olarak geri yükleme
RESTORE TABLE <table_name> TO LSN '<lsn>' AS <new_table_name>;
Bu komut, hedef tabloya bağlı olarak üç farklı davranış sergiler:
|
|
|
|
|
|
|
|
|
|
|
|
Örnek -- geri yükleme ve yeniden adlandırma:
RESTORE TABLE test_restore_2 TO LSN '0000000000000003' AS test_restore_new;
SELECT * FROM test_restore_new;
-- Returns:
-- +------------+
-- | colname |
-- +------------+
-- | 1 |
-- +------------+
Bölümlenmiş bir tabloyu geri yükleme
Silinen bölümlenmiş bir tabloyu geri yükleme
RESTORE TABLE <table_name> ('id'='<table_id>');
Silme anında mevcut olan tüm bölümler geri yüklenir.
Silinen bölümleri geri yükleme
Bir veya daha fazla silinen bölümü mevcut bir tabloya geri yükleyin:
RESTORE TABLE <table_name> PARTITION('id'='<partition_id>') [PARTITION('id'='<partition_id>')];
Tablo mevcut olmalıdır. Tablo da silindiyse önce tabloyu geri yükleyin.
Örnek:
-- View partition IDs
SHOW HISTORY FOR TABLE test_restore_part_y;
-- Restore two dropped partitions
RESTORE TABLE test_restore_part_y
PARTITION('id'='a14d6cb4ab0c46378a6e284b257bbfaa')
PARTITION('id'='8c85184ec0b44fba8198274401df2519');
Bölümleri belirli bir sürüme geri yükleme
RESTORE TABLE <table_name>
PARTITION(<partition_spec>) [PARTITION(<partition_spec>)]
TO LSN '<lsn>';
Birden çok bölümü tek bir LSN'ye geri yüklerken, bölüm için tam olarak o LSN mevcutsa bölüm belirtilen LSN'ye geri yüklenir. Aksi takdirde, en yakın önceki LSN'ye geri yüklenir.
Örnek: pt1 bölümünün LSN'leri 100, 102, 104, 106'dır. pt2 bölümünün LSN'leri 101, 103, 104, 105'tir. İkisini de LSN 102'ye geri yüklemek, pt1 bölümünü 102'ye ve pt2 bölümünü 101'e geri yükler.
RESTORE TABLE test_restore_part_y
PARTITION(ds='20250701') PARTITION(ds='20250702')
TO LSN '0000000000000010';
Bölümleri belirli bir sürümden yeni bir tablo olarak geri yükleme
RESTORE TABLE <table_name>
PARTITION(<partition_spec>) [PARTITION(<partition_spec>)]
TO LSN '<lsn>' AS <new_table_name>;
Delta tablo örnekleri
Delta tablo oluşturma, veri ekleme, silme ve geri yükleme
-- Create a Delta table
CREATE TABLE mf_dt (pk BIGINT NOT NULL PRIMARY KEY,
val BIGINT NOT NULL)
PARTITIONED BY (dd STRING, hh STRING)
TBLPROPERTIES ("transactional"="true");
-- Insert 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';
-- Returns:
-- +----+-----+----+----+
-- | pk | val | dd | hh |
-- +----+-----+----+----+
-- | 1 | 1 | 01 | 01 |
-- | 4 | 4 | 01 | 01 |
-- | 5 | 5 | 01 | 01 |
-- | 2 | 2 | 01 | 01 |
-- | 3 | 30 | 01 | 01 |
-- +----+-----+----+----+
Geri yükleme için tablo ID'sini alma
DESC EXTENDED mf_dt; komutunu çalıştırın ve Extended Info bölümündeki TableID alanını bulun:
TableID: cd607cd938dc4ca6886dd12212995604
Tabloyu silme ve geri yükleme
DROP TABLE mf_dt;
RESTORE TABLE mf_dt ('id' = 'cd607cd938dc4ca6886dd12212995604');
-- Verify the data
SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- Returns the same data as before the drop.
Bir bölümü silme ve geri yükleme
-- Get partition IDs
SHOW HISTORY FOR TABLE mf_dt;
-- Drop the partition
ALTER TABLE mf_dt DROP PARTITION (dd = '01', hh = '01');
-- Restore the partition
RESTORE TABLE mf_dt PARTITION('id' = '51d38cc9ded344cf99188cd1a806e5d2');
-- Verify the data
SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- Returns the same data as before the drop.
Geri yüklenen tabloda zaman yolculuğu
Bir Delta tablosunu geri yükledikten sonra zaman yolculuğu sorguları çalışmaya devam eder:
-- Query a specific version
SELECT * FROM mf_dt version AS OF 2 WHERE dd = '01' AND hh = '01';
-- Returns:
-- +----+-----+----+----+
-- | pk | val | dd | hh |
-- +----+-----+----+----+
-- | 1 | 1 | 01 | 01 |
-- | 3 | 3 | 01 | 01 |
-- | 2 | 2 | 01 | 01 |
-- +----+-----+----+----+
-- Query the latest version
SELECT * FROM mf_dt version AS OF get_latest_version('mf_dt')
WHERE dd = '01' AND hh = '01';
-- Returns the current data.
Veri dosyası temizliği (Delta tablolar)
Delta tablolar, zaman yolculuğu süresi içindeki geçmiş verileri saklar ve bu durum ek depolama maliyetlerine neden olur. Sistem, aşağıdaki koşulların tümü karşılandığında gereksiz geçmiş verileri bir gün içinde otomatik olarak siler:
Veriler zaman yolculuğu süresinden daha eskidir. (Tablo için zaman yolculuğu devre dışı bırakıldıysa tüm geçmiş veriler bu koşulu karşılar.)
Veriler yaşam döngüsünü aşmış veya silinmiştir ve ayrıca yedekleme koruma süresini de aşmıştır.
"Geçmiş veri", geri dönüşüm kutusu dizinine taşınan veri dosyalarını ifade eder. Yaşam döngüsünü aşma, silme işlemi yürütme, sıkıştırma çalıştırma veya INSERT OVERWRITE gibi işlemlerin tümü veri dosyalarını geri dönüşüm kutusuna taşır.
PURGE ile zorla temizleme
Normal işlemlerde temizliğin sistem tarafından otomatik olarak yapılmasına izin verin. PURGE TABLE komutunu yalnızca acil durumlarda kullanın; örneğin, aşırı dosya sayısı disk kararlılığını bozduğunda veya geçmiş veriler beklenmedik maliyet artışlarına neden olduğunda.
PURGE TABLE <table_name>;
Bu komutu çalıştırdıktan sonra zaman yolculuğu sorguları geçmiş verileri döndürmeyebilir.
Örnek:
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 returns version 2 data
SELECT * FROM mf_ttt version AS OF 2;
-- +----+-----+
-- | pk | val |
-- +----+-----+
-- | 1 | 1 |
-- | 2 | 2 |
-- +----+-----+
-- Run compaction, then time travel still works
ALTER TABLE mf_ttt compact major;
SELECT * FROM mf_ttt version AS OF 2;
-- Same result as above
-- After purge, time travel returns different data
PURGE TABLE mf_ttt;
SELECT * FROM mf_ttt version AS OF 2;
-- +----+-----+
-- | pk | val |
-- +----+-----+
-- | 1 | 1 |
-- | 3 | 3 |
-- | 2 | 20 |
-- +----+-----+
Komut referansı
Senaryo | Komut | Açıklama |
Saklamayı yapılandırma |
| Saklama süresini ayarlayın (0--30 gün). Varsayılan: 1. |
| Saklama süresi dahil mevcut proje ayarlarını görüntüleyin. | |
Yedekleme geçmişini görüntüleme |
| Silinen tablolar dahil tüm tabloları listeler. List izni gerektirir. |
| Bir tablonun sürüm geçmişini görüntüler. ShowHistory izni gerektirir. | |
| ID'sine göre silinen bir tablonun sürüm geçmişini görüntüler. List izni gerektirir. | |
| Bir bölümün sürüm geçmişini görüntüler. ShowHistory izni gerektirir. | |
| ID'sine göre silinen bir bölümün sürüm geçmişini görüntüler. | |
Verileri geri yükleme |
| Silinen bir tabloyu veya bölümü geri yükler. |
| Bir tabloyu belirli bir sürüme geri yükler. | |
| Bir tabloyu bir sürüme geri yükler ve yeni (veya mevcut) bir tablo olarak kaydeder. | |
| Bir veya daha fazla silinen bölümü geri yükler. | |
| Bölümleri belirli bir sürüme geri yükler. | |
| Bölümleri bir sürüme geri yükler ve yeni bir tablo olarak kaydeder. | |
Temizleme |
| Geri dönüşüm kutusundaki geçmiş verileri zorla siler. |
Kullanım notları
Tüm yedekleme ve geri yükleme komutlarına erişmek için MaxCompute istemcisinin en son sürümünü kullanın.
Yedekleme tabloları yalnızca veriler değiştirildiğinde oluşturulur. Değişiklik yoksa yedekleme girişi oluşmaz.
Saklama süresini aşan yedek veriler otomatik olarak silinir ve geri yüklenemez veya sorgulanamaz.
Gerekli izinler hakkında bilgi için bkz. MaxCompute izinleri.