Lewati ke konten utama

Menggunakan Snowflake Time Travel: Panduan Komprehensif

Pelajari cara memanfaatkan Snowflake Time Travel untuk menanyakan riwayat, mengkloning tabel, dan memulihkan data dengan panduan mendalam kami tentang pemulihan basis data.
· 9 mnt Baca

Jelajahi bersama AI

Apa itu Time Travel di Snowflake?

Seperti halnya insinyur perangkat lunak menggunakan Git untuk kontrol versi, insinyur data memiliki Time Travel di basis data Snowflake. Fitur Time Travel memungkinkan administrator basis data untuk menanyakan data historis, mengkloning tabel lama, dan memulihkan objek yang sebelumnya dihapus.

Namun, mengingat ukuran basis data bisa tumbuh sangat besar, Time Travel bukanlah padanan langsung dari kontrol versi kode. Setiap kali sebuah tabel dimodifikasi (dihapus atau diperbarui), Snowflake mengambil snapshot keadaan data sebelum pembaruan. Snapshot ini hanya bertahan selama jumlah hari tertentu, yang disebut periode retensi data.

Untuk akun Snowflake Standard, periode retensi maksimum hanya satu hari. Untuk akun Enterprise, periode retensi dapat antara 0 hingga 90 hari. Periode retensi 0 pada dasarnya menonaktifkan Time Travel, yang diaktifkan secara default untuk semua tabel.

Snowflake Time Travel vs. Fail-Safe

Saat membaca dokumentasi Snowflake, Anda mungkin juga menemukan istilah “Fail-safe”. Dari namanya, mungkin terdengar seperti Time Travel dan Fail-safe melakukan tugas yang sama, tetapi sebenarnya tidak.

Ketika suatu objek menyelesaikan periode retensinya, objek tersebut kemudian dipindahkan ke Snowflake Fail-safe. Di Fail-safe, Anda tidak dapat:

  • Menanyakan data historis
  • Mengkloning objek di masa lalu
  • Memulihkan objek masa lalu yang telah dihapus

Fail-safe hanya menyimpan data selama 7 hari dan tidak dapat dikonfigurasi. Selama periode ini, data hanya dapat dipulihkan oleh pihak Snowflake sendiri. Fitur ini disediakan sebagai layanan pemulihan data dan hanya dimaksudkan sebagai upaya terakhir ketika semua metode pemulihan lain gagal. Fitur ini digunakan hanya ketika data rusak atau terhapus karena kegagalan operasional.

Jadi, Anda tidak dapat meminta Snowflake untuk memulihkan versi sebelumnya dari objek Anda setelah objek tersebut melewati periode retensi yang telah ditentukan secara alami. Ingat aturan ini saat mengikuti tutorial ini.

Menyiapkan Lingkungan

Snowflake memiliki dua antarmuka untuk berinteraksi dengan platform: SnowSight (UI web) dan Snowflake CLI (klien terminal). Kita akan melanjutkan dengan SnowSight karena lebih mudah disiapkan. Anda dapat membaca tutorial komprehensif ini jika Anda baru mengenal Snowflake. Tutorial tersebut juga membahas cara menggunakan Snowflake CLI.

Pertama, daftar akun gratis dari beranda Snowflake. Anda akan dapat mengakses fitur Enterprise selama uji coba gratis 30 hari.

Beranda Snowflake

Setelah akun Anda siap, Anda akan diarahkan ke halaman Worksheets di dasbor Anda. Anda dapat menganggap setiap worksheet sebagai lingkungan terpisah untuk menjalankan SQL atau bahkan Python.

Worksheet Snowflake

Sekarang, buat worksheet baru menggunakan tombol “+” di kanan atas:

Membuat database dan tabel di Snowflake

Berikutnya, mari kita buat beberapa database dan tabel lalu mengisinya dengan data.

Membuat Database dan Tabel

Pertama, kita akan membuat database bernama ecommerce_db. Tempelkan kode berikut dan tekan "Ctrl + Enter" (Cmd + Enter) untuk menjalankannya ("Ctrl + Shift + Enter" menjalankan seluruh pernyataan pada worksheet).

CREATE DATABASE IF NOT EXISTS ecommerce_db;

Kita akan menggunakan database hipotetis ini untuk menjual merchandise terkait AI. Jalankan perintah di bawah untuk menjadikannya default:

USE DATABASE ecommerce_db;

Pertama, kita akan membuat tabel bernama inventory dengan tiga kolom:

CREATE OR REPLACE TABLE inventory (
 product_id INT PRIMARY KEY,
 name VARCHAR(255),
 stock_level INT,
 last_updated TIMESTAMP_TZ DEFAULT CURRENT_TIMESTAMP
);

Lalu, kita akan menambahkan beberapa produk awal:

INSERT INTO inventory (product_id, name, stock_level)
VALUES (1, Llama hoodie', 10), (2, Falcon cap', 20);

Kita juga akan membuat tabel untuk pesanan:

CREATE OR REPLACE TABLE orders (
 order_id INT PRIMARY KEY,
 product_id INT REFERENCES inventory(product_id),
 quantity INT,
 order_date TIMESTAMP_TZ DEFAULT CURRENT_TIMESTAMP
);
-- Assume some time passes after this table was created

Setelah kita membuat situs web untuk menjual merchandise, kita menerima beberapa pesanan. Pagi hari, kita menerima dua pesanan untuk kedua produk kita:

INSERT INTO orders (order_id, product_id, quantity)
VALUES (1, 1, 5), (1, 2, 3);

Sore harinya, kita menerima satu pesanan lagi:

-- Simulate a system glitch causing an extra order for product 1
INSERT INTO orders (order_id, (product_id, quantity)
VALUES  (3, 1, 100);  -- This might cause negative stock

Namun karena gangguan sistem, pesanan tersebut tercatat melebihi stok yang kita miliki. Anggap saja kita tidak menyadarinya selama dua minggu.

Perlu dicatat bahwa saya membuat beberapa pembaruan lain pada tabel di belakang layar.

Mengendalikan Periode Retensi

Tugas pertama kita adalah menetapkan periode retensi. Masa uji coba gratis saya sudah berakhir, jadi saya hanya bisa menetapkannya selama satu hari:

ALTER TABLE inventory SET DATA_RETENTION_TIME_IN_DAYS=1;
ALTER TABLE orders SET DATA_RETENTION_TIME_IN_DAYS=1;

Jika masa uji coba Anda belum berakhir, coba tetapkan empat minggu, karena uji coba Anda akan habis setelah waktu tersebut.

Menggunakan Klausul AT dan BEFORE

Snowflake menerapkan Time Travel melalui ekstensi SQL berikut:

  • Klausul AT dan BEFORE untuk digunakan dalam pernyataan SELECT guna menentukan titik (atau periode) waktu yang ingin Anda kueri. Keduanya mendukung parameter berikut untuk menjalankan tugas ini:
  • TIMESTAMP
  • OFFSET - selisih waktu dalam detik dari waktu saat ini
  • STATEMENT - ID kueri unik
  • Perintah UNDROP untuk memulihkan tabel, skema, dan database

Mari lihat cara menggunakan ekstensi-ekstensi ini pada basis data contoh kita.

Mengkueri data historis

Pertama, mari lihat apa yang kita miliki di inventory:

-- Check current stock level (might show negative value)
SELECT * FROM inventory;

Mengkueri data historis snowflake

Sekarang, mari gabungkan data pesanan dan inventaris yang kita miliki:

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;

Contoh Snowflake menggabungkan pesanan dan inventaris

Waduh! Sepertinya ada kesalahan—jumlah pesanan Llama hoodie lebih banyak daripada stok yang kita punya. Mari coba mundur 17,5 jam untuk mengetahui tepat kapan pernyataan yang salah ini dieksekusi:

SELECT * FROM orders AT(OFFSET => -60*60*17.5); -- Go back 17.5

Snowflake time travel

Jadi, pesanan yang salah dimasukkan pada pukul 4.54 sore tanggal 6 Maret. Ini berarti kita memerlukan keadaan tabel sebelum waktu tersebut. Itu mudah dikueri dengan klausul BEFORE:

-- Change the timezone
ALTER SESSION  SET TIMEZONE = 'UTC';

-- Select the table state before the error
SELECT * FROM orders BEFORE(TIMESTAMP => '2024-03-06 04:54:00 -0800'::timestamp_tz);

Jangan lupa menambahkan timestamp_tz sebagai tipe data untuk cap waktu. tz adalah singkatan dari time zone.

tambahkan timestamp_tz sebagai tipe data

Contoh-contoh ini menunjukkan cara menggunakan klausul AT dan BEFORE dengan timestamp dan offset. Jika Anda tidak ingin repot menghitung waktu kueri, Anda dapat menggunakan ID pernyataan.

Sebagai contoh, kueri di bawah ini menjalankan tugas yang sama seperti yang terakhir—mengkueri keadaan tabel sebelum pesanan yang salah dimasukkan:

SELECT * FROM orders BEFORE(STATEMENT => '01b2ce86-0000-95e2-0000-000669127035');

Begini cara menemukan ID kueri dari pernyataan apa pun:

Snowflake Temukan Query ID

Dengan memfilter jenis kueri, Anda dapat menemukan yang Anda cari jauh lebih cepat di SnowSight.

Mengkloning objek historis

Jadi, kita memiliki pesanan yang salah di tabel—bagaimana cara menyingkirkannya?

Salah satu yang bisa kita coba adalah mengkloning tabel tanpa baris yang salah tersebut:

CREATE OR REPLACE TABLE orders_clone AS
SELECT * FROM orders WHERE quantity != 100;

SELECT * FROM orders_clone;

Mengkloning objek historis

Berhasil, dan kita tidak perlu mengandalkan Time Travel untuk memperbaiki masalahnya. Namun, ketika Anda perlu mengkloning keadaan tabel di masa lalu, berikut sintaks yang dapat diikuti:

-- Clone an object as it existed 2 days ago
CREATE TABLE old_table_clone CLONE olt_table
   AT(OFFSET => -2 * 24 * 60 * 60);  -- Offset for 2 days

Mengkloning database caranya serupa:

CREATE DATABASE cloned_db CLONE my_db
 BEFORE(STATEMENT => '8e5d0ca9-005e-44e6-b858-a8f5b37c5726');

Menghapus dan Memulihkan Objek

Misalkan kita baru saja mempekerjakan seorang magang dan memberikan mereka masalah pesanan yang salah tadi.

Ketika mencoba menghapus catatan itu, sang magang tanpa sengaja menghapus tabel orders di produksi:

-- Simulate accidentally dropping the orders table
DROP TABLE orders

SELECT * FROM orders;;

Menghapus dan memulihkan objek

Si magang menghampiri kita dengan panik dan memberi tahu apa yang terjadi. Lalu, kita dengan tenang mengeksekusi perintah UNDROP:

-- Recover the dropped table using UNDROP
UNDROP TABLE orders

SELECT * FROM orders;;

Dan tabelnya kembali. Kita juga memaafkan sang magang dan (tentu saja) memutuskan untuk tidak memecatnya karena kesalahan tersebut.

Kesimpulan

Dalam tutorial ini, kita telah mempelajari fitur kunci di Snowflake—Time Travel. Dengan Time Travel, Anda dapat menanyakan dan memulihkan informasi masa lalu, yang merupakan fitur sangat dicari dalam alat manajemen basis data.

Apa pun bisa terjadi di lingkungan produksi, dan memiliki cadangan basis data sebelum setiap pembaruan memberi Anda ketenangan.

Menurut saya, Snowflake adalah alat manajemen basis data terbaik saat ini. Alat ini sangat mumpuni, dan menguasainya adalah keterampilan yang diinginkan dalam peran data. Jadi, jika Anda ingin mempelajarinya lebih lanjut, lihat kursus Introduction to Snowflake di DataCamp.

Jika Anda sudah cukup nyaman dan ingin menguji kemampuan, lihat sertifikasi Snowflake terbaik yang tersedia pada 2024.

Bexruz (Bex) Tuychiev

Penulis

Bexruz (Bex) Tuychiev

Saya adalah kreator konten data science dengan pengalaman lebih dari 2 tahun dan salah satu dengan jumlah pengikut terbesar di Medium. Saya suka menulis artikel mendalam tentang AI dan ML dengan sedikit gaya sarkastik—karena harus ada sesuatu untuk membuatnya tidak terlalu membosankan. Saya telah menghasilkan lebih dari 130 artikel dan satu kursus di DataCamp, dengan satu lagi sedang dalam proses. Konten saya telah dilihat oleh lebih dari 5 juta pasang mata, dan 20 ribu di antaranya menjadi pengikut di Medium dan LinkedIn. 

Topik

Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

blogs

Spaghetti Plot dan Jalur Badai

blogs

Tutorial Korelasi di R