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.
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.
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.
Sekarang, buat worksheet baru menggunakan tombol “+” di kanan atas:
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).
CREATEDATABASEIFNOTEXISTS ecommerce_db;Didukung oleh
Kita akan menggunakan database hipotetis ini untuk menjual merchandise terkait AI. Jalankan perintah di bawah untuk menjadikannya default:
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 createdDidukung oleh
Setelah kita membuat situs web untuk menjual merchandise, kita menerima beberapa pesanan. Pagi hari, kita menerima dua pesanan untuk kedua produk kita:
INSERTINTO orders (order_id, product_id, quantity)VALUES(1,1,5),(1,2,3);Didukung oleh
Sore harinya, kita menerima satu pesanan lagi:
-- 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 stockDidukung oleh
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:
ALTERTABLE inventory SET DATA_RETENTION_TIME_IN_DAYS=1;ALTERTABLE orders SET DATA_RETENTION_TIME_IN_DAYS=1;Didukung oleh
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;Didukung oleh
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;Didukung oleh
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.5Didukung oleh
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 timezoneALTERSESSIONSET TIMEZONE ='UTC';-- Select the table state before the errorSELECT*FROM orders BEFORE(TIMESTAMP=>'2024-03-06 04:54:00 -0800'::timestamp_tz);Didukung oleh
Jangan lupa menambahkan timestamp_tz sebagai tipe data untuk cap waktu. tz adalah singkatan dari time zone.
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');Didukung oleh
Begini cara menemukan ID kueri dari pernyataan apa pun:
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:
CREATEORREPLACETABLE orders_clone ASSELECT*FROM orders WHERE quantity !=100;SELECT*FROM orders_clone;Didukung oleh
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 agoCREATETABLE old_table_clone CLONE olt_table
AT(OFFSET=>-2*24*60*60);-- Offset for 2 daysDidukung oleh
Mengkloning database caranya serupa:
CREATEDATABASE cloned_db CLONE my_db
BEFORE(STATEMENT =>'8e5d0ca9-005e-44e6-b858-a8f5b37c5726');Didukung oleh
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 tableDROPTABLE orders
SELECT*FROM orders;;Didukung oleh
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;;Didukung oleh
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.
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.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
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:
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.
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.
Sekarang, buat worksheet baru menggunakan tombol “+” di kanan atas:
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).Kita akan menggunakan database hipotetis ini untuk menjual merchandise terkait AI. Jalankan perintah di bawah untuk menjadikannya default:
Pertama, kita akan membuat tabel bernama
inventorydengan tiga kolom:Lalu, kita akan menambahkan beberapa produk awal:
Kita juga akan membuat tabel untuk pesanan:
Setelah kita membuat situs web untuk menjual merchandise, kita menerima beberapa pesanan. Pagi hari, kita menerima dua pesanan untuk kedua produk kita:
Sore harinya, kita menerima satu pesanan lagi:
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:
Jika masa uji coba Anda belum berakhir, coba tetapkan empat minggu, karena uji coba Anda akan habis setelah waktu tersebut.
Menggunakan Klausul
ATdanBEFORESnowflake menerapkan Time Travel melalui ekstensi SQL berikut:
ATdanBEFOREuntuk digunakan dalam pernyataanSELECTguna menentukan titik (atau periode) waktu yang ingin Anda kueri. Keduanya mendukung parameter berikut untuk menjalankan tugas ini:TIMESTAMPOFFSET- selisih waktu dalam detik dari waktu saat iniSTATEMENT- ID kueri unikUNDROPuntuk memulihkan tabel, skema, dan databaseMari lihat cara menggunakan ekstensi-ekstensi ini pada basis data contoh kita.
Mengkueri data historis
Pertama, mari lihat apa yang kita miliki di
inventory:Sekarang, mari gabungkan data pesanan dan inventaris yang kita miliki:
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:
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:Jangan lupa menambahkan
timestamp_tzsebagai tipe data untuk cap waktu.tzadalah singkatan dari time zone.Contoh-contoh ini menunjukkan cara menggunakan klausul
ATdanBEFOREdengan 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:
Begini cara menemukan ID kueri dari pernyataan apa pun:
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:
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:
Mengkloning database caranya serupa:
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:
Si magang menghampiri kita dengan panik dan memberi tahu apa yang terjadi. Lalu, kita dengan tenang mengeksekusi perintah
UNDROP: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.