मुख्य सामग्री पर जाएँ

Snowflake टाइम ट्रैवल का उपयोग: एक व्यापक मार्गदर्शिका

हमारी विस्तृत डेटाबेस रिकवरी गाइड के साथ जानें कि क्वेरी हिस्ट्री, टेबल क्लोनिंग, और डेटा रिस्टोर के लिए Snowflake Time Travel का लाभ कैसे उठाएँ।
· 9 मि॰ पढ़ें

AI के साथ खोजें

Snowflake में टाइम ट्रैवल क्या है?

जिस तरह सॉफ्टवेयर इंजीनियर संस्करण नियंत्रण के लिए Git का उपयोग करते हैं, उसी तरह डेटा इंजीनियर Snowflake डेटाबेस में Time Travel का उपयोग करते हैं। Time Travel फीचर डेटाबेस एडमिनिस्ट्रेटर्स को ऐतिहासिक डेटा क्वेरी करने, पुरानी टेबल्स क्लोन करने और पहले हटाए गए ऑब्जेक्ट्स को रिस्टोर करने की सुविधा देता है।

हालाँकि, डेटाबेस बहुत बड़े हो सकते हैं, इसलिए Time Travel कोड वर्ज़न कंट्रोल का एक सीधा विकल्प नहीं है। हर बार जब किसी टेबल में बदलाव (डिलीट या अपडेट) होता है, तो Snowflake अपडेट से पहले डेटा की स्थिति का एक स्नैपशॉट लेता है। यह स्नैपशॉट केवल तय की गई कुछ दिनों की अवधि तक रहता है, जिसे डेटा रिटेंशन अवधि कहा जाता है।

Snowflake Standard खातों के लिए अधिकतम रिटेंशन अवधि केवल एक दिन है। Enterprise खातों के लिए, रिटेंशन अवधि 0 से 90 दिनों के बीच हो सकती है। 0 की रिटेंशन अवधि प्रभावी रूप से Time Travel को अक्षम कर देती है, जो कि डिफ़ॉल्ट रूप से सभी टेबल्स के लिए सक्षम रहता है।

Snowflake Time Travel बनाम Fail-Safe

जब आप Snowflake प्रलेखन पढ़ते हैं, तो आपको “Fail-safe” शब्द भी मिल सकता है। नाम से ऐसा लग सकता है कि Time Travel और Fail-safe एक ही काम करते हैं, लेकिन ऐसा नहीं है।

जब किसी ऑब्जेक्ट की रिटेंशन अवधि पूरी हो जाती है, तो उसे Snowflake Fail-safe में स्थानांतरित कर दिया जाता है। Fail-safe में, आप यह नहीं कर सकते:

  • ऐतिहासिक डेटा क्वेरी करना
  • पिछले ऑब्जेक्ट्स को क्लोन करना
  • पहले हटाए गए ऑब्जेक्ट्स को रिस्टोर करना

Fail-safe डेटा को केवल 7 दिनों की एक स्थिर, गैर-कॉन्फ़िगरेबल अवधि तक रखता है। इस अवधि में, डेटा को केवल Snowflake द्वारा ही रिकवर किया जा सकता है। यह फीचर डेटा रिकवरी सेवा के रूप में लागू किया गया है और केवल अंतिम उपाय के रूप में है, जब सभी अन्य रिकवरी विधियाँ विफल हो जाएँ। इसका उपयोग केवल तब किया जाना चाहिए जब परिचालन विफलताओं के कारण डेटा क्षतिग्रस्त या डिलीट हो गया हो।

इसलिए, जब आपके ऑब्जेक्ट्स अपनी निर्धारित रिटेंशन अवधि पूरी तरह जी लेते हैं, तो आप Snowflake से उनके पुराने वर्ज़न रिकवर करने के लिए नहीं कह सकते। इस ट्यूटोरियल का अनुसरण करते समय इस नियम को ध्यान में रखें।

पर्यावरण सेटअप

Snowflake के पास प्लेटफ़ॉर्म से इंटरैक्ट करने के दो इंटरफ़ेस हैं: SnowSight (वेब UI) और Snowflake CLI (टर्मिनल क्लाइंट)। हम SnowSight के साथ आगे बढ़ेंगे क्योंकि इसे सेट अप करना आसान है। यदि आप Snowflake में नए हैं, तो आप यह विस्तृत ट्यूटोरियल पढ़ सकते हैं। इसमें Snowflake CLI का उपयोग भी शामिल है।

सबसे पहले, Snowflake होमपेज से एक निःशुल्क खाता बनाएं। आपको 30 दिनों के लिए Enterprise फीचर्स तक पहुँच मिलेगी।

Snowflake होमपेज

खाता तैयार होने के बाद, आप अपने डैशबोर्ड के Worksheets पेज पर ले जाए जाएँगे। आप प्रत्येक वर्कशीट को SQL या यहाँ तक कि Python चलाने के लिए एक अलग वातावरण के रूप में समझ सकते हैं।

Snowflake वर्कशीट्स

अब, ऊपर दाईं ओर “+” बटन का उपयोग करके एक नई वर्कशीट बनाएँ:

Snowflake में डेटाबेस और टेबल्स बनाना

इसके बाद, आइए कुछ डेटाबेस और टेबल्स बनाते हैं और उनमें डेटा भरते हैं।

डेटाबेस और टेबल्स बनाना

सबसे पहले, हम ecommerce_db नाम का एक डेटाबेस बनाएँगे। नीचे दिया गया कोड पेस्ट करें और चलाने के लिए "Ctrl + Enter" (Cmd + Enter) दबाएँ (पूरी वर्कशीट के स्टेटमेंट्स चलाने के लिए "Ctrl + Shift + Enter" दबाएँ)।

CREATE DATABASE IF NOT EXISTS ecommerce_db;

हम इस काल्पनिक डेटाबेस का उपयोग AI-संबंधित मर्चेंडाइज़ बेचने के लिए करेंगे। इसे डिफ़ॉल्ट के रूप में सेट करने के लिए नीचे दिया गया कमांड चलाएँ:

USE DATABASE ecommerce_db;

सबसे पहले, हम inventory नाम की एक टेबल तीन कॉलम्स के साथ बनाएँगे:

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

फिर, हम कुछ शुरुआती प्रोडक्ट्स जोड़ेंगे:

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

हम ऑर्डर्स के लिए एक टेबल भी बनाएँगे:

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

हमने जब अपना मर्चेंडाइज़ बेचने के लिए वेबसाइट शुरू की, तो हमें कुछ ऑर्डर्स मिले। सुबह में, हमें दोनों प्रोडक्ट्स के लिए दो ऑर्डर्स मिले:

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

दोपहर में, हमें एक और ऑर्डर मिला:

-- 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

लेकिन एक सिस्टम गड़बड़ी के कारण, ऑर्डर हमारे पास उपलब्ध स्टॉक से कहीं अधिक मात्रा के लिए दर्ज हो गया। मान लें कि हमें यह बात दो हफ्तों तक पता नहीं चली।

ध्यान दें कि मैंने पर्दे के पीछे टेबल्स में कुछ और भी अपडेट किए हैं।

रिटेंशन अवधि नियंत्रित करना

हमारा पहला काम रिटेंशन अवधि सेट करना है। मेरा फ्री ट्रायल समाप्त हो गया था, इसलिए मैं इसे केवल एक दिन के लिए सेट कर सकता हूँ:

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

यदि आपका ट्रायल समाप्त नहीं हुआ है, तो इसे चार हफ्तों के लिए सेट करने का प्रयास करें, क्योंकि आपका ट्रायल उसके बाद समाप्त हो जाएगा।

AT और BEFORE क्लॉज़ का उपयोग

Snowflake इन SQL एक्सटेंशन्स के माध्यम से Time Travel को लागू करता है:

  • AT और BEFORE क्लॉज़, जिन्हें SELECT स्टेटमेंट्स में उपयोग किया जाता है, उस सटीक समय (या अवधि) को निर्धारित करने के लिए जिसका आप क्वेरी करना चाहते हैं। ये इस कार्य के लिए निम्न पैरामीटर्स को सपोर्ट करते हैं:
  • TIMESTAMP
  • OFFSET - वर्तमान समय से सेकंड्स में समयांतर
  • STATEMENT - यूनिक क्वेरी आईडी
  • UNDROP कमांड, जो टेबल्स, स्कीमाज़ और डेटाबेसेज़ को रिस्टोर करता है

आइए देखें कि इन एक्सटेंशन्स का उपयोग अपने सैंपल डेटाबेस पर कैसे करें।

ऐतिहासिक डेटा क्वेरी करना

पहले, देखें कि inventory में हमारे पास क्या है:

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

Snowflake में ऐतिहासिक डेटा क्वेरी करना

अब, हमारे पास जो ऑर्डर्स और इन्वेंटरी है, उन्हें मिलाएँ:

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;

Snowflake उदाहरण: ऑर्डर्स और इन्वेंटरी को मिलाना

ओह! लगता है कोई गलती हुई है — Llama hoodie के ऑर्डर्स की संख्या हमारे पास से ज़्यादा है। आइए 17.5 घंटे पीछे जाकर यह पता करें कि यह गलत स्टेटमेंट किस समय निष्पादित हुआ था:

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

Snowflake टाइम ट्रैवल

तो, गलत ऑर्डर 6 मार्च को शाम 4:54 बजे दर्ज हुआ था। इसका मतलब है कि हमें उस समय से पहले टेबल की स्थिति चाहिए। यह 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);

टाइम स्टैम्प के लिए डेटा टाइप के रूप में timestamp_tz जोड़ना न भूलें। tz का अर्थ time zone होता है।

डेटा टाइप के रूप में timestamp_tz जोड़ें

ये उदाहरण दिखाते हैं कि टाइमस्टैम्प और ऑफ़सेट के साथ AT और BEFORE क्लॉज़ का उपयोग कैसे करें। यदि आप क्वेरियों के समय का हिसाब नहीं लगाना चाहते, तो आप स्टेटमेंट आईडीज़ का उपयोग कर सकते हैं।

उदाहरण के लिए, नीचे दी गई क्वेरी पिछले वाले के समान काम करती है — गलत ऑर्डर दर्ज होने से पहले टेबल की स्थिति क्वेरी करना:

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

यहाँ बताया गया है कि आप किसी भी स्टेटमेंट की क्वेरी आईडी कैसे ढूँढ सकते हैं:

Snowflake में क्वेरी आईडी ढूँढें

क्वेरी के प्रकार को फ़िल्टर करके, आप SnowSight में अपनी मनचाही क्वेरी बहुत जल्दी ढूँढ सकते हैं।

ऐतिहासिक ऑब्जेक्ट्स क्लोन करना

तो, हमारी टेबल में एक गलत ऑर्डर है — इसे कैसे हटाएँ?

एक तरीका यह है कि गलत पंक्ति के बिना टेबल को क्लोन कर लें:

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

SELECT * FROM orders_clone;

ऐतिहासिक ऑब्जेक्ट्स क्लोन करना

यह काम कर गया, और समस्या को ठीक करने के लिए हमें Time Travel पर निर्भर नहीं होना पड़ा। लेकिन जब आपको किसी टेबल की पिछली स्थिति क्लोन करनी हो, तो आप यह सिंटैक्स अपना सकते हैं:

-- 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

डेटाबेस क्लोन करना भी इसी तरह है:

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

ऑब्जेक्ट्स हटाना और रिस्टोर करना

मान लें कि हमने अभी एक इंटर्न को हायर किया है और उन्हें गलत ऑर्डर की समस्या दी है।

उस रिकॉर्ड को हटाने की कोशिश में, इंटर्न ने गलती से प्रोडक्शन में orders टेबल ही ड्रॉप कर दी:

-- Simulate accidentally dropping the orders table
DROP TABLE orders

SELECT * FROM orders;;

ऑब्जेक्ट्स हटाना और रिस्टोर करना

इंटर्न घबरा कर हमारे पास आता है और अपनी गलती बताता है। तब हम शांत मन से UNDROP कमांड चलाते हैं:

-- Recover the dropped table using UNDROP
UNDROP TABLE orders

SELECT * FROM orders;;

और टेबल वापस मिल जाती है। हम इंटर्न को माफ़ भी कर देते हैं और (स्वाभाविक रूप से) उनकी गलती के लिए उन्हें निकालने का फैसला नहीं करते।

निष्कर्ष

इस ट्यूटोरियल में, हमने Snowflake के एक प्रमुख फीचर — Time Travel — के बारे में सीखा। Time Travel का उपयोग करके, आप पिछले डेटा को क्वेरी और रिस्टोर कर सकते हैं, जो डेटाबेस मैनेजमेंट टूल्स में बेहद माँगा जाने वाला फीचर है।

प्रोडक्शन परिवेश में कुछ भी हो सकता है, और हर अपडेट से पहले अपने डेटाबेस का बैकअप होना मन को शांति देता है।

मेरा मानना है कि Snowflake वहाँ का सबसे अच्छा डेटाबेस मैनेजमेंट टूल है। यह एक विशाल टूल है, और इसे अच्छी तरह सीखना डेटा भूमिकाओं में एक वांछनीय कौशल है। तो, यदि आप इसके बारे में और सीखना चाहते हैं, तो DataCamp पर Introduction to Snowflake कोर्स देखें।

यदि आप पहले से ही इसके साथ सहज हैं और अपने कौशल को परखना चाहते हैं, तो 2024 में उपलब्ध सर्वश्रेष्ठ Snowflake सर्टिफ़िकेशन्स पर नज़र डालें।

Bexruz (Bex) Tuychiev

लेखक

Bexruz (Bex) Tuychiev

मैं 2 से अधिक वर्षों के अनुभव वाला डेटा साइंस कंटेंट क्रिएटर हूँ और Medium पर सबसे बड़े फॉलोइंग्स में से एक रखता हूँ। मुझे एआई और एमएल पर विस्तार से लेख लिखना पसंद है, जिसमें हल्का-सा व्यंग्यात्मक अंदाज रहता है—क्योंकि कुछ तो करना पड़ता है ताकि वे कम उबाऊ लगें। मैंने 130 से अधिक लेख और एक DataCamp कोर्स तैयार किया है, और एक और बन रहा है। मेरा कंटेंट 50 लाख से अधिक लोगों ने देखा है, जिनमें से 20 हज़ार लोग Medium और LinkedIn पर फॉलोअर्स बन गए। 

विषय