Snowflake Time Travel Kullanımı: Kapsamlı Bir Rehber
Veritabanı kurtarma üzerine derinlemesine rehberimizle, geçmişi sorgulamak, tabloları klonlamak ve verileri geri yüklemek için Snowflake Time Travel'ı nasıl kullanacağınızı keşfedin.
Nasıl ki yazılım mühendisleri sürüm kontrol için Git kullanıyorsa, veri mühendislerinin de Snowflake veritabanlarında Time Travel’ı var. Time Travel özelliği, veritabanı yöneticilerinin geçmiş verileri sorgulamasına, eski tabloları klonlamasına ve geçmişte silinen nesneleri geri yüklemesine olanak tanır.
Ancak veritabanlarının çok büyük boyutlara ulaşabildiği göz önüne alındığında, Time Travel kod sürüm kontrolünün birebir karşılığı değildir. Bir tablo her değiştirildiğinde (silindiğinde veya güncellendiğinde) Snowflake, güncelleme öncesindeki veri durumunun bir anlık görüntüsünü alır. Bu anlık görüntü yalnızca belirli gün sayısı boyunca saklanır; buna veri saklama süresi denir.
Snowflake Standard hesapları için azami saklama süresi yalnızca bir gündür. Enterprise hesapları için saklama süresi 0 ile 90 gün arasında olabilir. Saklama süresinin 0 olması Time Travel’ı fiilen devre dışı bırakır; Time Travel tüm tablolar için varsayılan olarak etkindir.
Snowflake Time Travel ve Fail-Safe
Snowflake dokümantasyonunu okurken “Fail-safe” terimiyle de karşılaşabilirsiniz. İsimlerine bakınca Time Travel ve Fail-safe özellikleri aynı işi yapıyormuş gibi görünebilir, ancak öyle değildir.
Fail-safe verileri yapılandırılamayan 7 günlük bir süre boyunca saklar. Bu süre içinde veriler yalnızca Snowflake tarafından kurtarılabilir. Bu özellik bir veri kurtarma hizmeti olarak sunulur ve yalnızca tüm kurtarma yöntemleri başarısız olduğunda son çare olarak kullanılmak üzere tasarlanmıştır. Operasyonel hatalar nedeniyle veriler hasar görmüş veya silinmişse kullanılmalıdır.
Dolayısıyla, nesneleriniz belirlenen saklama süresini doğal olarak doldurduktan sonra Snowflake’ten geçmiş sürümleri kurtarmasını isteyemezsiniz. Bu öğreticiyi takip ederken bu kuralı aklınızda bulundurun.
Ortamı Hazırlama
Snowflake’in platformla etkileşim kurmak için iki arayüzü vardır: SnowSight (web arayüzü) ve Snowflake CLI (terminal istemcisi). Kurulumu daha kolay olduğu için SnowSight ile devam edeceğiz. Snowflake’e yeniyseniz, bu kapsamlı öğreticiyi okuyabilirsiniz. Snowflake CLI kullanımını da kapsar.
Önce, Snowflake ana sayfasından ücretsiz bir hesap açın. 30 günlük ücretsiz deneme süresince Enterprise özelliklerine erişebileceksiniz.
Hesabınız hazır olduğunda, panonuzdaki Worksheets sayfasına yönlendirileceksiniz. Her çalışma sayfasını SQL hatta Python çalıştırabileceğiniz ayrı bir ortam gibi düşünebilirsiniz.
Şimdi sağ üstteki “+” düğmesini kullanarak yeni bir çalışma sayfası oluşturun:
Şimdi bazı veritabanları ve tablolar oluşturalım ve veriyle dolduralım.
Veritabanı ve Tabloları Oluşturma
Önce, ecommerce_db adlı bir veritabanı oluşturacağız. Aşağıdaki kodu yapıştırın ve çalıştırmak için "Ctrl + Enter" (Cmd + Enter) tuşlarına basın ("Ctrl + Shift + Enter" tüm çalışma sayfasını çalıştırır).
Ayrıca siparişler için bir tablo da oluşturacağız:
CREATEORREPLACETABLE orders (
order_id INTPRIMARYKEY,
product_id INTREFERENCES inventory(product_id),
quantity INT,
order_date TIMESTAMP_TZ DEFAULTCURRENT_TIMESTAMP);-- Assume some time passes after this table was createdAltyapı:
Ürünlerimizi satmak için bir web sitesi açtıktan sonra bazı siparişler aldık. Sabah, her iki ürünümüz için de iki sipariş alıyoruz:
-- Simulate a system glitch causing an extra order for product 1INSERTINTO orders (order_id,(product_id, quantity)VALUES(3,1,100);-- This might cause negative stockAltyapı:
Ancak bir sistem hatası nedeniyle, sipariş elimizde olandan daha fazla stok için kaydediliyor. Bunu iki hafta boyunca fark etmediğimizi varsayalım.
Arka planda tablolarda birkaç başka güncelleme yaptığımı unutmayın.
Saklama Süresini Kontrol Etme
İlk görevimiz bir saklama süresi ayarlamak. Benim ücretsiz denemem bittiği için yalnızca bir gün olarak ayarlayabiliyorum:
ALTERTABLE inventory SET DATA_RETENTION_TIME_IN_DAYS=1;ALTERTABLE orders SET DATA_RETENTION_TIME_IN_DAYS=1;Altyapı:
Sizinki bitmediyse, dört hafta olarak ayarlamayı deneyin; denemeniz o süre sonunda sona erecektir.
AT ve BEFORE Koşullarını Kullanma
Snowflake, Time Travel’ı şu SQL uzantılarıyla uygular:
Hangi anı (veya dönemi) sorgulamak istediğinizi tam olarak belirtmek için SELECT ifadelerinde kullanılan AT ve BEFORE koşulları. Bu işi yapmak için şu parametreleri destekler:
TIMESTAMP
OFFSET - şimdiki zamandan saniye cinsinden fark
STATEMENT - benzersiz sorgu kimliği
Tabloları, şemaları ve veritabanlarını geri yüklemek için UNDROP komutu
Bu uzantıları örnek veritabanımızda nasıl kullanacağımıza bakalım.
Geçmiş verileri sorgulama
Önce, inventory tablosunda neler olduğuna bakalım:
-- Check current stock level (might show negative value)SELECT*FROM inventory;Altyapı:
Şimdi elimizdeki siparişler ve envanteri birleştirelim:
SELECT i.name, i.stock_level, o.quantity as"order_amount"FROM inventory as i
JOIN orders as o
ON i.product_id = o.product_id;Altyapı:
Eyvah! Bir hata var gibi görünüyor — Llama hoodie siparişlerinin miktarı elimizde olandan fazla. Bu hatalı ifadenin çalıştığı tam anı bulmak için 17,5 saat geriye gitmeyi deneyelim:
SELECT*FROM orders AT(OFFSET=>-60*60*17.5);-- Go back 17.5Altyapı:
Demek ki hatalı sipariş 6 Mart’ta saat 16:54’te verilmiş. Bu da o zamandan önceki tablo durumuna ihtiyacımız olduğu anlamına geliyor. Bunu BEFORE koşuluyla kolayca sorgulayabiliriz:
-- Change the timezoneALTERSESSIONSET TIMEZONE ='UTC';-- Select the table state before the errorSELECT*FROM orders BEFORE(TIMESTAMP=>'2024-03-06 04:54:00 -0800'::timestamp_tz);Altyapı:
Zaman damgası için veri türü olarak timestamp_tz eklemeyi unutmayın. tz saat dilimini ifade eder.
Bu örnekler, zaman damgaları ve ofsetlerle AT ve BEFORE koşullarının nasıl kullanılacağını gösterir. Sorguların zamanlamasını çıkarmakla uğraşmak istemiyorsanız, ifade kimliklerini kullanabilirsiniz.
Örneğin, aşağıdaki sorgu son örnekle aynı işi yapar — hatalı sipariş verilmeden önceki tablo durumunu sorgular:
Herhangi bir ifadenin sorgu kimliğini şu şekilde bulabilirsiniz:
Sorgu türünü filtreleyerek aradığınız ifadeyi SnowSight’ta çok daha hızlı bulabilirsiniz.
Geçmiş nesneleri klonlama
Tablomuzda hatalı bir sipariş var — peki bunu nasıl temizleyeceğiz?
Deneyebileceğimiz bir yöntem, hatalı satır olmadan tabloyu klonlamak:
CREATEORREPLACETABLE orders_clone ASSELECT*FROM orders WHERE quantity !=100;SELECT*FROM orders_clone;Altyapı:
İşe yaradı ve sorunu düzeltmek için Time Travel’a güvenmemiz gerekmedi. Ancak bir tablonun geçmiş durumlarını klonlamanız gerektiğinde, şu söz dizimini izleyebilirsiniz:
-- Clone an object as it existed 2 days agoCREATETABLE old_table_clone CLONE olt_table
AT(OFFSET=>-2*24*60*60);-- Offset for 2 daysAltyapı:
Diyelim ki yeni bir stajyer aldık ve onlara hatalı siparişle ilgili sorunu verdik.
O kaydı kaldırmaya çalışırken, stajyer yanlışlıkla üretimdeki orders tablosunu siliyor:
-- Simulate accidentally dropping the orders tableDROPTABLE orders
SELECT*FROM orders;;Altyapı:
Stajyer panik içinde yanımıza gelip ne yaptığını anlatıyor. Biz de sakince UNDROP komutunu çalıştırıyoruz:
-- Recover the dropped table using UNDROP
UNDROP TABLE orders
SELECT*FROM orders;;Altyapı:
Ve tabloyu geri alıyoruz. Ayrıca stajyeni affediyor ve (elbette) bu hatası nedeniyle işten çıkarmamaya karar veriyoruz.
Sonuç
Bu öğreticide Snowflake’in kilit bir özelliğini — Time Travel’ı — öğrendik. Time Travel sayesinde geçmiş bilgileri sorgulayabilir ve geri yükleyebilirsiniz; bu, veritabanı yönetim araçlarında oldukça aranan bir özelliktir.
Üretim ortamlarında her şey olabilir ve her güncelleme öncesinde veritabanınızın bir yedeğinin olması size huzur verir.
Bence Snowflake, mevcut en iyi veritabanı yönetim aracıdır. Kapsamı çok geniştir ve ona hâkim olmak veri rollerinde aranan bir yetenektir. Daha fazlasını öğrenmek isterseniz DataCamp’teki Introduction to Snowflake kursuna göz atın.
2 yılı aşkın deneyime sahip bir veri bilimi içerik üreticisiyim ve Medium’da en büyük takipçi kitlelerinden birine sahibim. Yapay zekâ ve makine öğrenimi üzerine, biraz da alaycı bir üslupla yazılmış, ayrıntılı makaleler kaleme almayı seviyorum; çünkü onları biraz daha az sıkıcı hale getirmek için bir şeyler yapmak gerekiyor. 130’un üzerinde makale ve bir de DataCamp kursu ürettim; bir diğeri de hazırlık aşamasında. İçeriklerim 5 milyondan fazla kişi tarafından görüldü; bunların 20 bini Medium ve LinkedIn’de takipçim oldu.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Snowflake’te Time Travel nedir?
Nasıl ki yazılım mühendisleri sürüm kontrol için Git kullanıyorsa, veri mühendislerinin de Snowflake veritabanlarında Time Travel’ı var. Time Travel özelliği, veritabanı yöneticilerinin geçmiş verileri sorgulamasına, eski tabloları klonlamasına ve geçmişte silinen nesneleri geri yüklemesine olanak tanır.
Ancak veritabanlarının çok büyük boyutlara ulaşabildiği göz önüne alındığında, Time Travel kod sürüm kontrolünün birebir karşılığı değildir. Bir tablo her değiştirildiğinde (silindiğinde veya güncellendiğinde) Snowflake, güncelleme öncesindeki veri durumunun bir anlık görüntüsünü alır. Bu anlık görüntü yalnızca belirli gün sayısı boyunca saklanır; buna veri saklama süresi denir.
Snowflake Standard hesapları için azami saklama süresi yalnızca bir gündür. Enterprise hesapları için saklama süresi 0 ile 90 gün arasında olabilir. Saklama süresinin 0 olması Time Travel’ı fiilen devre dışı bırakır; Time Travel tüm tablolar için varsayılan olarak etkindir.
Snowflake Time Travel ve Fail-Safe
Snowflake dokümantasyonunu okurken “Fail-safe” terimiyle de karşılaşabilirsiniz. İsimlerine bakınca Time Travel ve Fail-safe özellikleri aynı işi yapıyormuş gibi görünebilir, ancak öyle değildir.
Bir nesne saklama süresini tamamladığında Snowflake Fail-safe’e taşınır. Fail-safe’te şunları yapamazsınız:
Fail-safe verileri yapılandırılamayan 7 günlük bir süre boyunca saklar. Bu süre içinde veriler yalnızca Snowflake tarafından kurtarılabilir. Bu özellik bir veri kurtarma hizmeti olarak sunulur ve yalnızca tüm kurtarma yöntemleri başarısız olduğunda son çare olarak kullanılmak üzere tasarlanmıştır. Operasyonel hatalar nedeniyle veriler hasar görmüş veya silinmişse kullanılmalıdır.
Dolayısıyla, nesneleriniz belirlenen saklama süresini doğal olarak doldurduktan sonra Snowflake’ten geçmiş sürümleri kurtarmasını isteyemezsiniz. Bu öğreticiyi takip ederken bu kuralı aklınızda bulundurun.
Ortamı Hazırlama
Snowflake’in platformla etkileşim kurmak için iki arayüzü vardır: SnowSight (web arayüzü) ve Snowflake CLI (terminal istemcisi). Kurulumu daha kolay olduğu için SnowSight ile devam edeceğiz. Snowflake’e yeniyseniz, bu kapsamlı öğreticiyi okuyabilirsiniz. Snowflake CLI kullanımını da kapsar.
Önce, Snowflake ana sayfasından ücretsiz bir hesap açın. 30 günlük ücretsiz deneme süresince Enterprise özelliklerine erişebileceksiniz.
Hesabınız hazır olduğunda, panonuzdaki Worksheets sayfasına yönlendirileceksiniz. Her çalışma sayfasını SQL hatta Python çalıştırabileceğiniz ayrı bir ortam gibi düşünebilirsiniz.
Şimdi sağ üstteki “+” düğmesini kullanarak yeni bir çalışma sayfası oluşturun:
Şimdi bazı veritabanları ve tablolar oluşturalım ve veriyle dolduralım.
Veritabanı ve Tabloları Oluşturma
Önce,
ecommerce_dbadlı bir veritabanı oluşturacağız. Aşağıdaki kodu yapıştırın ve çalıştırmak için "Ctrl + Enter" (Cmd + Enter) tuşlarına basın ("Ctrl + Shift + Enter" tüm çalışma sayfasını çalıştırır).Bu varsayımsal veritabanını yapay zekâ temalı ürünler satmak için kullanacağız. Varsayılan olarak ayarlamak için aşağıdaki komutu çalıştırın:
Önce, üç sütunlu
inventoryadlı bir tablo oluşturacağız:Ardından, bazı başlangıç ürünlerini ekleyeceğiz:
Ayrıca siparişler için bir tablo da oluşturacağız:
Ürünlerimizi satmak için bir web sitesi açtıktan sonra bazı siparişler aldık. Sabah, her iki ürünümüz için de iki sipariş alıyoruz:
Öğleden sonra bir tane daha alıyoruz:
Ancak bir sistem hatası nedeniyle, sipariş elimizde olandan daha fazla stok için kaydediliyor. Bunu iki hafta boyunca fark etmediğimizi varsayalım.
Arka planda tablolarda birkaç başka güncelleme yaptığımı unutmayın.
Saklama Süresini Kontrol Etme
İlk görevimiz bir saklama süresi ayarlamak. Benim ücretsiz denemem bittiği için yalnızca bir gün olarak ayarlayabiliyorum:
Sizinki bitmediyse, dört hafta olarak ayarlamayı deneyin; denemeniz o süre sonunda sona erecektir.
ATveBEFOREKoşullarını KullanmaSnowflake, Time Travel’ı şu SQL uzantılarıyla uygular:
SELECTifadelerinde kullanılanATveBEFOREkoşulları. Bu işi yapmak için şu parametreleri destekler:TIMESTAMPOFFSET- şimdiki zamandan saniye cinsinden farkSTATEMENT- benzersiz sorgu kimliğiUNDROPkomutuBu uzantıları örnek veritabanımızda nasıl kullanacağımıza bakalım.
Geçmiş verileri sorgulama
Önce,
inventorytablosunda neler olduğuna bakalım:Şimdi elimizdeki siparişler ve envanteri birleştirelim:
Eyvah! Bir hata var gibi görünüyor — Llama hoodie siparişlerinin miktarı elimizde olandan fazla. Bu hatalı ifadenin çalıştığı tam anı bulmak için 17,5 saat geriye gitmeyi deneyelim:
Demek ki hatalı sipariş 6 Mart’ta saat 16:54’te verilmiş. Bu da o zamandan önceki tablo durumuna ihtiyacımız olduğu anlamına geliyor. Bunu
BEFOREkoşuluyla kolayca sorgulayabiliriz:Zaman damgası için veri türü olarak
timestamp_tzeklemeyi unutmayın.tzsaat dilimini ifade eder.Bu örnekler, zaman damgaları ve ofsetlerle
ATveBEFOREkoşullarının nasıl kullanılacağını gösterir. Sorguların zamanlamasını çıkarmakla uğraşmak istemiyorsanız, ifade kimliklerini kullanabilirsiniz.Örneğin, aşağıdaki sorgu son örnekle aynı işi yapar — hatalı sipariş verilmeden önceki tablo durumunu sorgular:
Herhangi bir ifadenin sorgu kimliğini şu şekilde bulabilirsiniz:
Sorgu türünü filtreleyerek aradığınız ifadeyi SnowSight’ta çok daha hızlı bulabilirsiniz.
Geçmiş nesneleri klonlama
Tablomuzda hatalı bir sipariş var — peki bunu nasıl temizleyeceğiz?
Deneyebileceğimiz bir yöntem, hatalı satır olmadan tabloyu klonlamak:
İşe yaradı ve sorunu düzeltmek için Time Travel’a güvenmemiz gerekmedi. Ancak bir tablonun geçmiş durumlarını klonlamanız gerektiğinde, şu söz dizimini izleyebilirsiniz:
Veritabanlarını klonlamak da benzerdir:
Nesneleri Silme ve Geri Yükleme
Diyelim ki yeni bir stajyer aldık ve onlara hatalı siparişle ilgili sorunu verdik.
O kaydı kaldırmaya çalışırken, stajyer yanlışlıkla üretimdeki orders tablosunu siliyor:
Stajyer panik içinde yanımıza gelip ne yaptığını anlatıyor. Biz de sakince
UNDROPkomutunu çalıştırıyoruz:Ve tabloyu geri alıyoruz. Ayrıca stajyeni affediyor ve (elbette) bu hatası nedeniyle işten çıkarmamaya karar veriyoruz.
Sonuç
Bu öğreticide Snowflake’in kilit bir özelliğini — Time Travel’ı — öğrendik. Time Travel sayesinde geçmiş bilgileri sorgulayabilir ve geri yükleyebilirsiniz; bu, veritabanı yönetim araçlarında oldukça aranan bir özelliktir.
Üretim ortamlarında her şey olabilir ve her güncelleme öncesinde veritabanınızın bir yedeğinin olması size huzur verir.
Bence Snowflake, mevcut en iyi veritabanı yönetim aracıdır. Kapsamı çok geniştir ve ona hâkim olmak veri rollerinde aranan bir yetenektir. Daha fazlasını öğrenmek isterseniz DataCamp’teki Introduction to Snowflake kursuna göz atın.
Zaten rahatsanız ve becerilerinizi sınamak istiyorsanız, 2024’te mevcut olan en iyi Snowflake sertifikalarına bakın.