वास्तविक समय एआई/एमएल अनुप्रयोगों के लिए सुविधाएँ विकसित करते समय, आपके डेटा के भीतर समय-आधारित पैटर्न को समझना महत्वपूर्ण है, क्योंकि यह मूल्यवान अंतर्दृष्टि प्रकट कर सकता है। हालाँकि, अस्थायी प्रश्नों को व्यक्त करने से चुनौतियाँ पैदा हो सकती हैं। बस समय के साथ अपने उपयोगकर्ताओं के व्यवहार का सहजता से विश्लेषण करने, सटीक अस्थायी जुड़ाव करने और विभिन्न घटनाओं के बीच गतिविधि के पैटर्न की जांच करने की क्षमता की कल्पना करें - यह सब समय के सहज और निर्बाध प्रबंधन को बनाए रखते हुए। यह वह जगह है जहां समयरेखा, अस्थायी डेटा के साथ काम करने के लिए एक उच्च स्तरीय अमूर्तता, अमूल्य साबित हो सकती है
इस लेख में, हम समयरेखा की दुनिया में गहराई से उतरेंगे। हम प्रदर्शित करेंगे कि कैसे वे घटनाओं पर और, महत्वपूर्ण रूप से, घटनाओं के बीच अस्थायी प्रश्नों को व्यक्त करना न केवल आसान बल्कि सहज भी बनाते हैं। यह लेख इसी श्रृंखला का दूसरा लेख है
सहज चूंकि समय-सीमा समय के अनुसार क्रमबद्ध होती है, इसलिए प्रश्नों का भी क्रम से संचालित होना स्वाभाविक है। जैसे-जैसे समय बढ़ता है, अतिरिक्त घटनाएं - इनपुट - घटित होती हैं और क्वेरी के आउटपुट में परिलक्षित होती हैं। गणनाओं के बारे में सोचने का यह तरीका - समय के साथ प्रगति के रूप में - सहज है क्योंकि यह घटनाओं को देखने के हमारे तरीके से मेल खाता है।
घोषणात्मक अस्थायी संचालन - जैसे विंडोिंग और शिफ्टिंग - समयसीमा के साथ काम करते समय स्पष्ट रूप से घोषित किए जाते हैं क्योंकि समय अमूर्तता का हिस्सा है।
कंपोज़ेबल प्रत्येक ऑपरेशन टाइमलाइन लेता है और टाइमलाइन उत्पन्न करता है, जिसका अर्थ है कि अपेक्षित परिणाम उत्पन्न करने के लिए ऑपरेशन को आवश्यकतानुसार श्रृंखलाबद्ध किया जा सकता है।
नीचे, हम समय-सीमा के लाभों को प्रदर्शित करने वाले चार वास्तविक जीवन के उदाहरणों का विश्लेषण करेंगे। हम एकत्रीकरण के लिए एक सरल क्वेरी से शुरुआत करेंगे और धीरे-धीरे अधिक जटिल अस्थायी विंडो, डेटा-निर्भर विंडो और अस्थायी रूप से सही जुड़ाव से निपटेंगे। अंत में, आपको इस बात की गहरी समझ होनी चाहिए कि कैसे समयसीमा सरल अस्थायी प्रश्नों को एसक्यूएल की तरह सरल बनाती है, और वे हमें अधिक चुनौतीपूर्ण प्रश्नों को लेने के लिए कैसे सशक्त बनाती हैं।
टाइमलाइन एसक्यूएल में आप जो कुछ भी कर सकते हैं उसका समर्थन करती है, समय के साथ संचालित करने के लिए सहज रूप से विस्तारित होती है। परिष्कृत अस्थायी प्रश्नों के लिए कुछ नई क्षमताओं को देखने से पहले, आइए कुछ सरल चीज़ देखें - एक एकत्रीकरण। सरल प्रश्न लिखना आसान है: वास्तव में, क्योंकि समय-सीमा समय के अनुसार क्रमबद्ध होती है और इकाई द्वारा समूहीकृत होती है, वे SQL की तुलना में और भी आसान हो सकते हैं!
इस प्रश्न पर विचार करें कि प्रत्येक उपयोगकर्ता ने कितना खर्च किया? घटनाओं के बारे में सोचते समय, प्रत्येक उपयोगकर्ता द्वारा समय के साथ खर्च की गई राशि को अद्यतन करते हुए, खरीदारी को क्रमबद्ध करना स्वाभाविक है। परिणाम एक संचयी योग है जो एक सतत समयरेखा उत्पन्न करता है।
संबंधित क्वेरी को नीचे दो समान तरीकों से लिखा हुआ दिखाया गया है। पहला खरीदारी पर लागू होने वाली राशि पर जोर देता है जबकि दूसरा हमारे द्वारा बनाई गई परिचालन श्रृंखला पर जोर देता है - "खरीदारी लें फिर राशि लागू करें।" यहां से, हम बाद वाले का उपयोग करेंगे क्योंकि यह प्रसंस्करण समयसीमा के बारे में हमारे सोचने के तरीके से बेहतर मेल खाता है।
sum(Purchases.amount)
#OR
Purchases.amount | sum()
टाइमलाइन के साथ सरल अस्थायी प्रश्न लिखना SQL जितना आसान था। घटनाओं को क्रम में संसाधित करना समय के साथ संचालन का एक सहज तरीका है। बेशक, सभी घटनाओं को एकत्रित करना ही एक तरीका है जिससे हम चीजों को एकत्रित करना चाह सकते हैं। अगले उदाहरण में, हम देखेंगे कि हाल की घटनाओं पर ध्यान केंद्रित करने के लिए टेम्पोरल विंडो का उपयोग करके इस क्वेरी को कैसे बढ़ाया जाए।
अस्थायी प्रश्नों के बारे में सोचते समय, हाल के अतीत के बारे में प्रश्न पूछना बहुत स्वाभाविक है: वर्ष-दर-तारीख या पिछले 30 दिन। क्रम में घटनाओं को संसाधित करने का अंतर्ज्ञान इस प्रश्न का उत्तर देने का सुझाव देता है कि "प्रत्येक उपयोगकर्ता ने इस महीने कितना खर्च किया है" बस प्रत्येक महीने की शुरुआत में मूल्य को रीसेट करने की आवश्यकता होनी चाहिए। और यह अंतर्ज्ञान बिल्कुल वैसा ही है कि इस प्रकार की अस्थायी खिड़कियाँ समयसीमा के साथ कैसे काम करती हैं।
अस्थायी क्वेरी नीचे दिखाई गई है. यह स्पष्ट रूप से उस इरादे को इंगित करता है जो हमने ऊपर व्यक्त किया है - प्रत्येक महीने की शुरुआत से खरीदारी करें और उन्हें एकत्रित करें।
Purchases.amount
| sum(window=since(monthly()))
क्योंकि समय स्वाभाविक रूप से हर समयरेखा का हिस्सा है, प्रत्येक एकत्रीकरण अस्थायी खिड़कियों के भीतर काम करने में सक्षम है। अगले उदाहरण में, हम देखेंगे कि अधिक जटिल प्रश्नों के साथ काम करना कितना आसान है, जिसमें अधिक परिष्कृत विंडो के साथ एकत्रीकरण भी शामिल है।
सभी विंडोज़ को समय के संदर्भ में परिभाषित नहीं किया गया है। एकत्रीकरण के लिए उपयोग की जाने वाली विंडो को निर्धारित करने के लिए घटनाओं का उपयोग करना अक्सर उपयोगी होता है। इसके अतिरिक्त, जबकि अब तक के सभी उदाहरण एक ही प्रकार की घटना - purchases
- पर संचालित हुए हैं - कारण-और-प्रभाव संबंधों की पहचान के लिए विभिन्न घटनाओं के बीच गतिविधि के पैटर्न की जांच करना महत्वपूर्ण है।
इस उदाहरण में, हम डेटा-परिभाषित विंडो और कई प्रकार की घटनाओं का उपयोग करके प्रश्नों को घोषणात्मक रूप से व्यक्त करने के लिए समयसीमा का लाभ उठाएंगे। हम क्वेरी बनाते समय बाद के चरणों में उपयोग किए गए मानों को नियंत्रित करने के लिए विशिष्ट बिंदुओं पर एक मध्यवर्ती समयरेखा भी फ़िल्टर करेंगे।
हम जिस प्रश्न का उत्तर देंगे वह है "प्रत्येक उपयोगकर्ता के लिए प्रत्येक खरीदारी के बीच पृष्ठ दृश्यों की औसत संख्या क्या है?" हम पहले पिछली खरीदारी के बाद से पृष्ठ दृश्यों की गणना करेंगे, प्रत्येक खरीदारी के समय उनका निरीक्षण करेंगे, और फिर औसत लेंगे।
पहली चीज़ जो हम करेंगे वह पिछली खरीदारी के बाद से पृष्ठ दृश्यों की संख्या की गणना करना है। पिछले उदाहरण में, हमने महीने की शुरुआत से विंडो विंडो की थी। लेकिन किसी महीने की शुरुआत को परिभाषित करने वाली समयरेखा के बारे में कुछ खास नहीं है - हम किसी अन्य समयरेखा के साथ विंडो जोड़ सकते हैं।
PageViews
| count(window=since(is_valid(Purchases)))
डेटा-परिभाषित विंडोिंग के अलावा, हम देखते हैं कि कई प्रकार की घटनाओं के साथ कैसे काम किया जाए। क्योंकि प्रत्येक समयरेखा को समय के अनुसार क्रमित किया जाता है और इकाई द्वारा समूहीकृत किया जाता है, प्रत्येक समयरेखा को समय के अनुसार पंक्तिबद्ध किया जा सकता है और इकाई द्वारा स्वचालित रूप से जोड़ा जा सकता है।
पिछले चरण ने हमें पिछली खरीदारी के बाद से पृष्ठ दृश्य दिए। लेकिन यह एक सतत समयरेखा थी जो अगली खरीदारी तक प्रत्येक पृष्ठ दृश्य पर बढ़ती गई। हम पिछली खरीदारी के बाद से पृष्ठ दृश्यों का प्रतिनिधित्व करने वाली प्रत्येक खरीदारी के समय एक एकल मूल्य के साथ एक अलग समयरेखा का अनुसरण कर रहे हैं। ऐसा करने के लिए, हम when
ऑपरेशन का उपयोग करते हैं, जो समय में विशिष्ट बिंदुओं पर एक समयरेखा का अवलोकन - और यदि आवश्यक हो तो प्रक्षेप करने की अनुमति देता है।
जब ऑपरेशन का उपयोग अस्थायी क्वेरी में कहीं भी किया जा सकता है और फ़िल्टरिंग बिंदुओं की अनुमति देता है, जो आउटपुट में मौजूद होते हैं - या बाद के एकत्रीकरण में पास किए जाते हैं।
खरीदारी के बीच पृष्ठ दृश्यों की संख्या की गणना के साथ, अब हम इस मूल्य के औसत की गणना करने में सक्षम हैं। हमें बस mean
एकत्रीकरण का उपयोग करना है।
पूरी क्वेरी नीचे दिखाई गई है. हम देखते हैं कि चरण उन तार्किक चरणों से मेल खाते हैं जिनके बारे में हमने ऊपर बात की थी। भले ही तर्क काफी जटिल था, क्वेरी अपेक्षाकृत सीधी है और हम जो गणना करना चाहते हैं उसके बारे में हमारे विचार को पकड़ती है - कठिन प्रश्न संभव हैं।
PageViews
| count(window=since(is_valid(Purchases)))
| when(is_valid(Purchases))
| mean()
पृष्ठ दृश्य गतिविधि में विभिन्न प्रकार के पैटर्न का विश्लेषण करने के लिए इस प्रकार की क्वेरी को सामान्यीकृत किया जा सकता है। शायद हम सभी आइटमों के बजाय केवल सबसे अधिक देखे जाने वाले आइटम के पृष्ठ दृश्य देखना चाहते हैं, यह मानते हुए कि उपयोगकर्ता उस आइटम पर अधिक ध्यान केंद्रित कर रहा है। हो सकता है कि हम किसी भी खरीदारी के बजाय उसी वस्तु की खरीदारी को विंडो करना चाहते हों।
इस क्वेरी ने कुछ ऐसे तरीके दिखाए जिनसे समयसीमा जटिल अस्थायी प्रश्नों को व्यक्त करने में सक्षम होती है:
ऑर्डर करने से विंडोज़ को उनके सीमांककों द्वारा परिभाषित करने में सक्षम बनाता है - जब वे शुरू होते हैं और समाप्त होते हैं - समूहीकरण के लिए प्रत्येक मान से "विंडो आईडी" की गणना करने के बजाय।
ऑर्डर देने से एक ही अभिव्यक्ति के भीतर कई समय-सीमाओं का उपयोग करना भी संभव हो जाता है - इस मामले में, pageviews
और purchases
।
निरंतरता मानों को मनमाने समय पर प्रक्षेपित करने और when
ऑपरेशन का उपयोग करके फ़िल्टर करने की अनुमति देती है।
कंपोजिबिलिटी किसी भी ऑपरेशन के परिणाम को अस्थायी प्रश्नों को व्यक्त करने के लिए बाद के ऑपरेशनों के साथ उपयोग करने में सक्षम बनाती है। यह जटिल प्रश्नों को सरल संक्रियाओं के अनुक्रम के रूप में व्यक्त करने की अनुमति देता है।
ये क्षमताएं कारण-और-प्रभाव पैटर्न की पहचान करने की अनुमति देती हैं। हालाँकि ऐसा हो सकता है कि अभी खरीदारी के कारण मुझे बाद में खरीदारी करनी पड़े, अन्य घटनाओं का अक्सर एक मजबूत संबंध होता है - उदाहरण के लिए, टेप खत्म हो जाना और अधिक खरीदना, या कैंपिंग ट्रिप का शेड्यूल करना और स्टॉक करना। अन्य घटनाओं ( purchases
) द्वारा परिभाषित विंडो के भीतर गतिविधि ( pageviews
) को देखने में सक्षम होना उन घटनाओं के बीच संबंध को समझने के लिए महत्वपूर्ण है।
हम पहले ही देख चुके हैं कि कैसे समय-सीमा एक ही इकाई से जुड़े कई प्रकार के आयोजनों के साथ काम करने की अनुमति देती है। लेकिन कई संस्थाओं के साथ भी काम करना अक्सर आवश्यक होता है। उदाहरण के लिए, प्रत्येक उपयोगकर्ता के लिए मूल्यों को सामान्य बनाने के लिए संपूर्ण जनसंख्या के बारे में जानकारी का उपयोग करना। हमारा अंतिम उदाहरण दिखाएगा कि एकाधिक संस्थाओं के साथ कैसे काम करना है और अस्थायी जुड़ाव कैसे करना है।
अंतिम प्रश्न जिसका हम उत्तर देंगे वह है "प्रत्येक खरीदारी के समय न्यूनतम औसत उत्पाद समीक्षा (स्कोर) क्या है?" ऐसा करने के लिए, हम पहले औसत स्कोर की गणना करने के लिए प्रत्येक उत्पाद से जुड़ी समीक्षाओं के साथ काम करेंगे, और फिर हम प्रत्येक खरीदारी को संबंधित औसत समीक्षा के साथ जोड़ देंगे।
आरंभ करने के लिए, हम प्रत्येक आइटम के लिए औसत उत्पाद समीक्षा (स्कोर) की गणना करना चाहते हैं। चूँकि समीक्षाएँ वर्तमान में उपयोगकर्ता द्वारा समूहीकृत हैं, हमें कुंजी ऑपरेशन का उपयोग करके, उन्हें आइटम के आधार पर फिर से समूहीकृत करने की आवश्यकता होगी। एक बार जब हम ऐसा कर लेते हैं, तो हम उस माध्य एकत्रीकरण का उपयोग कर सकते हैं जो हमने पहले ही देखा है।
प्रत्येक खरीदारी (उपयोगकर्ता द्वारा समूहीकृत) के लिए हम संबंधित आइटम का औसत समीक्षा स्कोर देखना चाहते हैं। यह lookup
ऑपरेशन का उपयोग करता है.
इन सबको एक साथ रखकर हम प्रत्येक उपयोगकर्ता द्वारा खरीदी गई वस्तुओं की न्यूनतम औसत रेटिंग निर्धारित करने के लिए min
एकत्रीकरण के साथ लुकअप का उपयोग करते हैं।
Reviews.score
| with_key(Reviews.item)
| mean()
| lookup(Purchases.item)
| min()
एक अलग इकाई में पुन: समूहीकरण करने, एकत्रीकरण करने और मूल्य को देखने (या मूल इकाइयों में वापस स्थानांतरित करने) का यह पैटर्न डेटा-प्रोसेसिंग कार्यों में आम है। इस मामले में, परिणामी मूल्य को देखा गया और सीधे उपयोग किया गया। अन्य मामलों में यह सामान्यीकरण के लिए उपयोगी है - जैसे कि प्रत्येक उपयोगकर्ता के मूल्य को उनके शहर के औसत मूल्यों से जोड़ना।
ऑर्डर देना और समूह बनाना समयसीमा को विभिन्न संस्थाओं के बीच संचालन को स्पष्ट रूप से व्यक्त करने की अनुमति देता है। लुकअप का परिणाम उस समय से होता है जिस समय लुकअप किया जाता है। यह अस्थायी रूप से सही "जैसा-जैसा" जुड़ाव प्रदान करता है।
अतीत के प्रशिक्षण उदाहरणों की गणना के लिए सही समय पर जुड़ाव करना महत्वपूर्ण है जो मॉडल को लागू करते समय उपयोग किए गए फीचर मानों से तुलनीय हैं। इसी तरह, यह सुनिश्चित करता है कि क्वेरी के परिणामों पर किया गया कोई भी डैशबोर्ड, विज़ुअलाइज़ेशन या विश्लेषण वास्तव में सही है जैसे कि वे उस जानकारी का उपयोग करने के बजाय अतीत में मूल्यों को देख रहे थे जो उस समय उपलब्ध नहीं थी।
हमने अस्थायी डेटा को संभालने के लिए उच्च स्तरीय अमूर्तता के रूप में समयसीमा की शक्ति का प्रदर्शन किया है। सहज, घोषणात्मक और संयोजन योग्य संचालन के माध्यम से, हमने दिखाया कि कैसे समयरेखा घटनाओं पर और घटनाओं के बीच अस्थायी प्रश्नों की कुशल अभिव्यक्ति को सक्षम बनाती है। सरल एकत्रीकरण से लेकर डेटा-निर्भर विंडो और अस्थायी रूप से सही जुड़ाव जैसे परिष्कृत प्रश्नों के उदाहरणों के साथ, हमने बताया कि इच्छित परिणाम उत्पन्न करने के लिए समयरेखा संचालन को कैसे श्रृंखलाबद्ध किया जा सकता है। समयसीमा की क्षमता सरल लौकिक प्रश्नों को आसानी से व्यक्त करने और जटिल लौकिक प्रश्नों को सहजता से विस्तारित करने की उनकी क्षमता में निहित है।
कुल खर्च से लेकर न्यूनतम समीक्षा स्कोर तक, हमने चार उदाहरणात्मक उदाहरण देखे जो अस्थायी पूछताछ में समयसीमा की क्षमताओं को उजागर करते हैं। हमने संचयी एकत्रीकरण, अस्थायी विंडोिंग का पता लगाया और देखा कि कैसे डेटा-परिभाषित विंडोिंग जटिल अस्थायी प्रश्नों को व्यक्त करने की क्षमता प्रदान करती है। हमने यह भी दिखाया कि कैसे समय-सीमा बहु-इकाई प्रबंधन और अस्थायी जुड़ाव की सुविधा प्रदान करती है। ये उदाहरण दिखाते हैं कि समयसीमा के साथ, आपके पास कारण-और-प्रभाव पैटर्न की पहचान करने और प्रशिक्षण उदाहरणों की गणना करने के लिए एक शक्तिशाली उपकरण है जो मॉडल लागू करते समय तुलनात्मक रूप से मान्य हैं।
आगे बढ़ते हुए, हम समय-सीमा पर अस्थायी प्रश्नों की गतिशीलता के बारे में और विस्तार से जानेंगे। हम पता लगाएंगे कि समयसीमा के गुणों का लाभ उठाकर इन प्रश्नों को कुशलतापूर्वक कैसे निष्पादित किया जाता है।\
हम आपको प्रोत्साहित करते हैं