शुरुआती लोगों के लिए Snowflake QUALIFY: यह क्या है और इसका उपयोग कैसे करें
यह गाइड Snowflake की QUALIFY क्लॉज़ को आसान बनाकर समझाता है, दिखाते हुए कि विंडो फ़ंक्शंस को बिना सबक्वेरी के फ़िल्टर करके आप SQL क्वेरीज़ कैसे सरल कर सकते हैं—साफ़-सुथरे, तेज़ एनालिटिक्स के लिए एकदम सही।
Snowflake के साथ काम करते हुए एक डेटा प्रोफेशनल के रूप में, आपको विंडो फ़ंक्शंस के आधार पर क्वेरी परिणामों को फ़िल्टर करने की आवश्यकता पड़ सकती है। पारंपरिक रूप से, इसके लिए सबक्वेरी या जटिल फ़िल्टरिंग लॉजिक चाहिए होता है। लेकिन Snowflake एक शक्तिशाली विकल्प देता है: QUALIFY क्लॉज़।
इस गाइड में, मैं चरण-दर-चरण उदाहरणों और सर्वोत्तम प्रथाओं के साथ दिखाऊंगा कि QUALIFY का उपयोग करके फ़िल्टरिंग को कैसे सुव्यवस्थित करें।
Snowflake में QUALIFY क्लॉज़ क्या है?
Snowflake में QUALIFY क्लॉज़ का उपयोग विंडो फ़ंक्शंस के साथ परिणामों को फ़िल्टर करने के लिए किया जाता है। आप विंडो फ़ंक्शंस को SELECT सूची का हिस्सा बनाकर परिभाषित कर सकते हैं या सीधे QUALIFY क्लॉज़ के भीतर उन्हें संदर्भित कर सकते हैं।
आम तौर पर, WHERE एग्रीगेशन से पहले कच्ची पंक्तियों को फ़िल्टर करता है, जबकि HAVINGGROUP BY एग्रीगेशन के बाद फ़िल्टर करता है।
इसके बजाय, QUALIFY हमें ROW_NUMBER(), RANK(), और DENSE_RANK() जैसे SQL स्टेटमेंट्स के परिणामों पर फ़िल्टर करने देता है। यानी हम इन्हें अपनी विंडो फ़ंक्शंस के आउटपुट में इस्तेमाल कर सकते हैं और तुरंत उन पर फ़िल्टर लगा सकते हैं।
आप QUALIFY को विंडो फ़ंक्शंस के लिए उसी तरह समझ सकते हैं जैसे HAVING एग्रीगेट्स के लिए होता है—गणना हो जाने के बाद परिणामों को फ़िल्टर करना।
कई ऐसे उपयोग केस हैं जहाँ QUALIFY क्लॉज़ विशेष रूप से उपयोगी साबित होता है:
आपको विंडो फ़ंक्शन आउटपुट के आधार पर क्वेरी परिणामों को फ़िल्टर करना है।
आप सबक्वेरी की जरूरत घटाकर अपनी SQL क्वेरीज़ को सरल बनाना चाहते हैं।
आपको पार्टिशन के भीतर डेटा को रैंक करना, डेडुप्लिकेट करना, या कुशलता से सेगमेंट करना है।
आप ऐसी रिपोर्ट या डैशबोर्ड तैयार कर रहे हैं जिसे प्रति श्रेणी शीर्ष प्रदर्शन करने वाले रिकॉर्ड चाहिए।
> यदि आप Snowflake में नए हैं, तो हमारी Introduction to Snowflake कोर्स QUALIFY जैसी क्लॉज़ में जाने से पहले एक हैंड्स-ऑन शुरुआती बिंदु देता है। आप Snowflake की व्यापक क्षमताओं को इस शुरुआती-अनुकूल ट्यूटोरियल से भी खोज सकते हैं।
Snowflake में QUALIFY का सिंटैक्स
आइए QUALIFY का बेसिक सिंटैक्स देखें ताकि आप इसके हिस्सों को समझ सकें। QUALIFY के साथ एक सरल क्वेरी कुछ यूँ दिख सकती है:
SELECT
column1,
column2,
window_function()OVER(PARTITIONBY column3 ORDERBY column4)AS rank
FROM table_name
QUALIFY window_function_condition;संचालित द्वारा
आपके पास सामान्य SELECT क्लॉज़ है जिसके बाद कुछ कॉलम हैं। फिर सामान्य फ़ॉर्मेट में लिखा हुआ आपका window_function() है जो हमें rank नाम का कॉलम देता है।
इसके बाद सामान्य FROM स्टेटमेंट है जो टेबल बताता है, और अंत में हमारा QUALIFY। इस QUALIFY के बाद “window_function_condition” आता है, जो अक्सर एक इक्वैलिटी होती है और कुछ ऐसा दिख सकता है: QUALIFY rank = 1
ध्यान दें: आप विंडो फ़ंक्शन के एलियस को संदर्भित कर सकते हैं या QUALIFY क्लॉज़ के अंदर पूरा विंडो फ़ंक्शन एक्सप्रेशन दोबारा लिख सकते हैं। दोनों तरीके काम करते हैं।
अब जब आप QUALIFY की समग्र संरचना जानते हैं, तो मैं इस क्लॉज़ के कुछ विशिष्ट उदाहरण दिखाऊंगा।
उदाहरण 1: प्रत्येक समूह के शीर्ष N पंक्तियों को फ़िल्टर करना
मान लीजिए हम प्रत्येक विभाग में सबसे अधिक वेतन पाने वाले शीर्ष 3 कर्मचारियों को ढूंढना चाहते हैं। पहले, एक उदाहरण देखते हैं जो QUALIFY का उपयोग नहीं करता, और फिर इसका उपयोग करने वाला अधिक संक्षिप्त संस्करण।
/* First we have to rank all the employees */WITH ranked_employees AS(SELECT employee_id, department, salary,
RANK()OVER(PARTITIONBY department ORDERBY salary DESC)AS rank
FROM employees)/* Then we query to subquery and filter using WHERE */SELECT*FROM ranked_employees
WHERE rank <=3;संचालित द्वारा
जैसा कि आप देख सकते हैं, ऊपर वाले उदाहरण में CTE की आवश्यकता होती है, लेकिन QUALIFY के साथ क्वेरी अधिक सीधी हो जाती है:
SELECT employee_id, department, salary,
RANK()OVER(PARTITIONBY department ORDERBY salary DESC)AS rank
FROM employees
QUALIFY rank <=3;संचालित द्वारा
ऊपर की क्वेरी प्रत्येक विभाग के भीतर हर कर्मचारी को एक रैंक असाइन करती है और प्रत्येक विभाग में शीर्ष 3 लौटाती है। यह QUALIFY स्टेटमेंट का उपयोग करती है ताकि बिना किसी सबक्वेरी या CTE के तुरंत फ़िल्टर किया जा सके। यह विशेष रूप से डैशबोर्ड या API में उपयोगी है, जहाँ क्वेरी की लंबाई और रिस्पॉन्स समय कम रखना महत्वपूर्ण होता है।
उदाहरण 2: डुप्लिकेट रिकॉर्ड्स को फ़िल्टर करना
यदि किसी टेबल में डुप्लिकेट रिकॉर्ड हैं और हम रैंकिंग फ़ंक्शन के आधार पर केवल पहली घटना रखना चाहते हैं, तो हम ROW_NUMBER() के साथ QUALIFY का उपयोग कर सकते हैं:
SELECT
order_id,
customer_id,
order_date,
ROW_NUMBER()OVER(PARTITIONBY customer_id ORDERBY order_date)AS row_num
FROM orders
QUALIFY row_num =1;संचालित द्वारा
row_num कॉलम प्रत्येक ग्राहक पर पार्टिशन करके और ऑर्डर डेट के अनुसार सॉर्ट करके जनरेट किया जाता है। यह प्रत्येक ऑर्डर को क्रमागत संख्या देता है, सबसे पहले वाले से शुरू करते हुए। QUALIFY row_num = 1 के साथ फ़िल्टर करने से हम सुनिश्चित करते हैं कि प्रत्येक ग्राहक के लिए केवल सबसे पहला ऑर्डर ही रखा जाए।
यह तकनीक डेटा क्लीनिंग के दौरान डेडुप्लिकेशन कार्यों में आम है।
उदाहरण 3: एग्रीगेट्स में विंडो फ़ंक्शन के आधार पर फ़िल्टर करना
आइए थोड़ा उन्नत हों। एग्रीगेट विंडो फ़ंक्शंस के साथ QUALIFY का उपयोग अधिक लचीला और डायनामिक फ़िल्टरिंग देता है।
उदाहरण के लिए, यदि हम ऐसे कर्मचारियों को ढूंढना चाहते हैं जिनका वेतन विभाग के औसत से ऊपर है, तो हम विंडो फ़ंक्शन पर AVG() के साथ QUALIFY का उपयोग कर सकते हैं:
SELECT
employee_id,
department,
salary,AVG(salary)OVER(PARTITIONBY department)AS avg_salary
FROM employees
QUALIFY salary > avg_salary;संचालित द्वारा
यह तरह का लॉजिक पीयर समूहों के भीतर आउट्लायर या शीर्ष परफ़ॉर्मर की पहचान करने में बेहतरीन है।
> यदि आप ऐसी अधिक जटिल क्वेरीज़ के लिए अपनी SQL स्किल्स मजबूत करना चाहते हैं, तो हमारा Intermediate SQL कोर्स देखें।
Snowflake में QUALIFY उपयोग करने के सर्वोत्तम तरीके
यहाँ QUALIFY क्लॉज़ के कुछ सर्वोत्तम अभ्यास और उपयोग दिए गए हैं।
जटिल क्वेरीज़ को सरल बनाएं
QUALIFY की ताकत अतिरिक्त सबक्वेरी और CTEs की जरूरत हटाकर क्वेरीज़ को सरल बनाने में है। इस फ़ंक्शनैलिटी का लाभ उठाएँ। जब भी आप कोई विंडो फ़ंक्शन लिखें और उसके आउटपुट पर फ़िल्टर करना हो, बिना सबक्वेरी बनाए QUALIFY का उपयोग करें।
कम CTEs का मतलब है आसान डिबगिंग, स्पष्ट लॉजिक, और बेहतर मेंटेनबिलिटी।
QUALIFY को अन्य विंडो फ़ंक्शंस के साथ जोड़ें
अधिक परिष्कृत फ़िल्टरिंग के लिए आप कई विंडो फ़ंक्शंस को जोड़ सकते हैं। उदाहरण के लिए, परिणाम सीमित करते हुए टाई सुलझाने के लिए ROW_NUMBER() के साथ RANK() का उपयोग:
SELECT
employee_id,
department,
salary,
RANK()OVER(PARTITIONBY department ORDERBY salary DESC)AS rank,
ROW_NUMBER()OVER(PARTITIONBY department ORDERBY salary DESC, employee_id)AS row_num
FROM employees
QUALIFY rank <=3AND row_num <=3;संचालित द्वारा
यह क्वेरी उन कर्मचारियों को लौटाती है जो अपने विभाग में शीर्ष 3 वेतन रैंकों में आते हैं। हालांकि, यदि उस शीर्ष 3 में तीन से अधिक कर्मचारी टाई करते हैं, तो यह केवल कर्मचारी ID के अनुसार क्रमित पहले तीन को दिखाएगी।
परफॉर्मेंस संबंधी विचार
लिखे गए कोड के लिहाज़ से QUALIFY क्वेरीज़ को सरल बनाता है, लेकिन कुछ परफॉर्मेंस पहलुओं पर ध्यान देना चाहिए।
विंडो फ़ंक्शंस कम्प्यूटेशनली महंगे हो सकते हैं, और खराब संरचित क्वेरीज़ संसाधन-गहन बन सकती हैं। इन बातों का ध्यान रखें:
बड़े डेटासेट पर विंडो फ़ंक्शंस महंगे हो सकते हैं, इसलिए अपनी प्रक्रिया के किस चरण में उनका उपयोग कर रहे हैं, इस पर सावधानी रखें।
परफॉर्मेंस को अनुकूलित करने के लिए उचित इंडेक्सिंग और पार्टिशनिंग सुनिश्चित करें।
टेस्टिंग के दौरान और बेहतर कुशलता के लिए LIMIT को QUALIFY के साथ उपयोग करें।
विंडो फ़ंक्शंस की जटिलता को देखते हुए QUALIFY स्टेटमेंट में गलतियाँ होना आसान है। यहाँ कुछ सुझाव हैं जो आम समस्याओं में मदद करेंगे।
1. WHERE क्लॉज़ में विंडो फ़ंक्शंस का उपयोग करना
सीधे WHERE क्लॉज़ में विंडो फ़ंक्शंस का उपयोग करने पर त्रुटि होगी क्योंकि WHERE का मूल्यांकन विंडो फ़ंक्शंस प्रोसेस होने से पहले होता है।
-- This will cause an errorSELECT employee_id, department, salary,
RANK()OVER(PARTITIONBY department ORDERBY salary DESC)AS rank
FROM employees
WHERE rank =1;संचालित द्वारा
समाधान: इसके बजाय QUALIFY क्लॉज़ का उपयोग करें, जिसका मूल्यांकन विंडो फ़ंक्शंस के बाद होता है।
SELECT employee_id, department, salary,
RANK()OVER(PARTITIONBY department ORDERBY salary DESC)AS rank
FROM employees
QUALIFY rank =1;संचालित द्वारा
2. QUALIFY में प्रेडिकेट छोड़ देना
विंडो फ़ंक्शंस के परिणामों को फ़िल्टर करने के लिए QUALIFY क्लॉज़ में एक प्रेडिकेट जरूरी है। प्रेडिकेट छोड़ देने पर त्रुटि होगी।
-- This will cause an errorSELECT employee_id, department, salary,
RANK()OVER(PARTITIONBY department ORDERBY salary DESC)AS rank
FROM employees
QUALIFY RANK()OVER(PARTITIONBY department ORDERBY salary DESC);संचालित द्वारा
समाधान: सुनिश्चित करें कि QUALIFY क्लॉज़ में प्रेडिकेट हो, जैसे शीर्ष रैंक वाली पंक्ति के लिए = 1।
SELECT employee_id, department, salary,
RANK()OVER(PARTITIONBY department ORDERBY salary DESC)AS rank
FROM employees
QUALIFY rank =1;संचालित द्वारा
3. संदिग्ध एलियस
किसी कॉलम और विंडो फ़ंक्शन के लिए एक ही एलियस का उपयोग करना भ्रम और अप्रत्याशित परिणाम दे सकता है।
-- Potentially ambiguousSELECT salary AS rank,
RANK()OVER(PARTITIONBY department ORDERBY salary DESC)AS rank
FROM employees
QUALIFY rank =1;संचालित द्वारा
समाधान: अस्पष्टता से बचने के लिए अलग-अलग एलियस का उपयोग करें।
SELECT salary AS salary_amount,
RANK()OVER(PARTITIONBY department ORDERBY salary DESC)AS salary_rank
FROM employees
QUALIFY salary_rank =1;संचालित द्वारा
4. गलत पार्टिशनिंग या ऑर्डरिंग
विंडो फ़ंक्शंस में PARTITION BY या ORDER BY को गलत तरीके से निर्दिष्ट करना अप्रत्याशित परिणाम दे सकता है।
समाधान: इच्छित लॉजिक से मेल खाने के लिए पार्टिशनिंग और ऑर्डरिंग को सावधानीपूर्वक परिभाषित करें। उदाहरण के लिए, प्रति विभाग शीर्ष वेतन पाने के लिए:
SELECT employee_id, department, salary,
RANK()OVER(PARTITIONBY department ORDERBY salary DESC)AS rank
FROM employees
QUALIFY rank =1;संचालित द्वारा
निष्कर्ष
Snowflake में QUALIFY क्लॉज़ विंडो फ़ंक्शंस के आधार पर परिणामों को फ़िल्टर करने के लिए एक शक्तिशाली टूल है, जो सबक्वेरी की जरूरत घटाता है और क्वेरीज़ को अधिक पठनीय बनाता है। इसे प्रभावी ढंग से उपयोग करना समझकर, डेटा साइंटिस्ट्स रैंक्ड, ग्रुप्ड, या एग्रीगेटेड डेटा के साथ काम करते समय अपनी क्वेरीज़ को सरल और दक्ष बना सकते हैं।
WHERE एग्रीगेशन से पहले कच्चे डेटा को फ़िल्टर करता है।
HAVING एग्रीगेटेड डेटा को GROUP BY के बाद फ़िल्टर करता है।
QUALIFY विंडो फ़ंक्शंस लागू होने के बाद परिणामों को फ़िल्टर करता है।
क्या QUALIFY क्वेरी परफॉर्मेंस बेहतर करता है?⌄
QUALIFY क्वेरीज़ को सरल बना सकता है और सबक्वेरी की जरूरत घटा सकता है, लेकिन परफॉर्मेंस डेटा के आकार और इंडेक्सिंग पर निर्भर करती है। उचित पार्टिशनिंग परफॉर्मेंस को अनुकूलित करने में मदद कर सकती है।
क्या मैं SUM() या AVG() जैसे नॉन-रैंकिंग विंडो फ़ंक्शंस के साथ QUALIFY का उपयोग कर सकता/सकती हूँ?⌄
हाँ, लेकिन सुनिश्चित करें कि फ़िल्टरिंग कंडीशन समझ में आती हो। उदाहरण के लिए, औसत से अधिक वेतन वाले कर्मचारियों को फ़िल्टर करना काम करता है क्योंकि AVG() प्रति पार्टिशन निकाला जा सकता है।
क्या मैं QUALIFY के साथ कई विंडो फ़ंक्शंस का उपयोग कर सकता/सकती हूँ?⌄
हाँ। आप एक ही क्वेरी में कई विंडो फ़ंक्शंस को जोड़ सकते हैं और QUALIFY में लॉजिकल कंडीशंस का उपयोग करके उनमें से एक या अधिक के आधार पर फ़िल्टर कर सकते हैं।
मुझे Snowflake में कब QUALIFY का उपयोग नहीं करना चाहिए?⌄
यदि आपका लॉजिक विंडो फ़ंक्शंस पर निर्भर नहीं करता, या जटिल नेस्टेड लॉजिक के कारण क्वेरी को डिबग करना कठिन हो जाता है, तो QUALIFY से बचें।
क्या Snowflake में QUALIFY सभी विंडो फ़ंक्शंस को सपोर्ट करता है?⌄
हाँ। ROW_NUMBER(), RANK(), DENSE_RANK(), NTILE() जैसी फ़ंक्शंस और OVER() के साथ एग्रीगेट फ़ंक्शंस, सभी को QUALIFY के साथ फ़िल्टर किया जा सकता है।
क्या QUALIFY Snowflake के लिए ही विशिष्ट है?⌄
हालाँकि QUALIFY Snowflake और BigQuery जैसे कुछ अन्य प्लेटफ़ॉर्म पर सपोर्टेड है, यह मानक ANSI SQL का हिस्सा नहीं है, इसलिए पोर्टेबिलिटी एक मुद्दा हो सकता है।
क्या मैं CTEs या सबक्वेरीज़ के अंदर QUALIFY नेस्ट कर सकता/सकती हूँ?⌄
हाँ, QUALIFY को Common Table Expressions (CTEs) या सबक्वेरीज़ के अंदर भी इस्तेमाल किया जा सकता है, जिससे मॉड्यूलर SQL डिज़ाइन में लचीलापन मिलता है।
Snowflake में QUALIFY से संबंधित त्रुटियों को कैसे डिबग करूँ?⌄
एलियस कॉन्फ्लिक्ट्स की जाँच से शुरू करें, सुनिश्चित करें कि सभी विंडो फ़ंक्शंस सही परिभाषित हों, और परफॉर्मेंस या लॉजिक संबंधी समस्याओं के ट्रबलशूटिंग के लिए Snowflake के Query Profile का उपयोग करें।
मैं एक डेटा साइंटिस्ट हूँ, जिसे स्पैटियल विश्लेषण, मशीन लर्निंग और डेटा पाइपलाइनों का अनुभव है। मैंने GCP, Hadoop, Hive, Snowflake, Airflow और अन्य डेटा साइंस/इंजीनियरिंग प्रक्रियाओं के साथ काम किया है।
Snowflake में डिज़ाइन, क्वेरी और निर्माण करना सीखें - ट्रांसफ़ॉर्मेशन और मॉडलिंग के लिए Snowflake SQL में महारत हासिल करके नौकरी के लिए तैयार Data Engineer बनें।
Snowflake के साथ काम करते हुए एक डेटा प्रोफेशनल के रूप में, आपको विंडो फ़ंक्शंस के आधार पर क्वेरी परिणामों को फ़िल्टर करने की आवश्यकता पड़ सकती है। पारंपरिक रूप से, इसके लिए सबक्वेरी या जटिल फ़िल्टरिंग लॉजिक चाहिए होता है। लेकिन Snowflake एक शक्तिशाली विकल्प देता है:
QUALIFYक्लॉज़।इस गाइड में, मैं चरण-दर-चरण उदाहरणों और सर्वोत्तम प्रथाओं के साथ दिखाऊंगा कि
QUALIFYका उपयोग करके फ़िल्टरिंग को कैसे सुव्यवस्थित करें।Snowflake में QUALIFY क्लॉज़ क्या है?
Snowflake में
QUALIFYक्लॉज़ का उपयोग विंडो फ़ंक्शंस के साथ परिणामों को फ़िल्टर करने के लिए किया जाता है। आप विंडो फ़ंक्शंस कोSELECTसूची का हिस्सा बनाकर परिभाषित कर सकते हैं या सीधेQUALIFYक्लॉज़ के भीतर उन्हें संदर्भित कर सकते हैं।आम तौर पर,
WHEREएग्रीगेशन से पहले कच्ची पंक्तियों को फ़िल्टर करता है, जबकिHAVINGGROUP BYएग्रीगेशन के बाद फ़िल्टर करता है।इसके बजाय,
QUALIFYहमेंROW_NUMBER(),RANK(), औरDENSE_RANK()जैसे SQL स्टेटमेंट्स के परिणामों पर फ़िल्टर करने देता है। यानी हम इन्हें अपनी विंडो फ़ंक्शंस के आउटपुट में इस्तेमाल कर सकते हैं और तुरंत उन पर फ़िल्टर लगा सकते हैं।आप
QUALIFYको विंडो फ़ंक्शंस के लिए उसी तरह समझ सकते हैं जैसेHAVINGएग्रीगेट्स के लिए होता है—गणना हो जाने के बाद परिणामों को फ़िल्टर करना।कई ऐसे उपयोग केस हैं जहाँ
QUALIFYक्लॉज़ विशेष रूप से उपयोगी साबित होता है:> यदि आप Snowflake में नए हैं, तो हमारी Introduction to Snowflake कोर्स QUALIFY जैसी क्लॉज़ में जाने से पहले एक हैंड्स-ऑन शुरुआती बिंदु देता है। आप Snowflake की व्यापक क्षमताओं को इस शुरुआती-अनुकूल ट्यूटोरियल से भी खोज सकते हैं।
Snowflake में QUALIFY का सिंटैक्स
आइए
QUALIFYका बेसिक सिंटैक्स देखें ताकि आप इसके हिस्सों को समझ सकें।QUALIFYके साथ एक सरल क्वेरी कुछ यूँ दिख सकती है:आपके पास सामान्य
SELECTक्लॉज़ है जिसके बाद कुछ कॉलम हैं। फिर सामान्य फ़ॉर्मेट में लिखा हुआ आपकाwindow_function()है जो हमेंrankनाम का कॉलम देता है।इसके बाद सामान्य
FROMस्टेटमेंट है जो टेबल बताता है, और अंत में हमाराQUALIFY। इसQUALIFYके बाद “window_function_condition” आता है, जो अक्सर एक इक्वैलिटी होती है और कुछ ऐसा दिख सकता है:QUALIFY rank = 1ध्यान दें: आप विंडो फ़ंक्शन के एलियस को संदर्भित कर सकते हैं या
QUALIFYक्लॉज़ के अंदर पूरा विंडो फ़ंक्शन एक्सप्रेशन दोबारा लिख सकते हैं। दोनों तरीके काम करते हैं।> यदि आपको विंडो फ़ंक्शंस की पुनरावृत्ति चाहिए, तो यह विंडो फ़ंक्शन चीट शीट देखें।
Snowflake में QUALIFY के उपयोग के उदाहरण
अब जब आप
QUALIFYकी समग्र संरचना जानते हैं, तो मैं इस क्लॉज़ के कुछ विशिष्ट उदाहरण दिखाऊंगा।उदाहरण 1: प्रत्येक समूह के शीर्ष N पंक्तियों को फ़िल्टर करना
मान लीजिए हम प्रत्येक विभाग में सबसे अधिक वेतन पाने वाले शीर्ष 3 कर्मचारियों को ढूंढना चाहते हैं। पहले, एक उदाहरण देखते हैं जो
QUALIFYका उपयोग नहीं करता, और फिर इसका उपयोग करने वाला अधिक संक्षिप्त संस्करण।जैसा कि आप देख सकते हैं, ऊपर वाले उदाहरण में CTE की आवश्यकता होती है, लेकिन
QUALIFYके साथ क्वेरी अधिक सीधी हो जाती है:ऊपर की क्वेरी प्रत्येक विभाग के भीतर हर कर्मचारी को एक रैंक असाइन करती है और प्रत्येक विभाग में शीर्ष 3 लौटाती है। यह
QUALIFYस्टेटमेंट का उपयोग करती है ताकि बिना किसी सबक्वेरी या CTE के तुरंत फ़िल्टर किया जा सके। यह विशेष रूप से डैशबोर्ड या API में उपयोगी है, जहाँ क्वेरी की लंबाई और रिस्पॉन्स समय कम रखना महत्वपूर्ण होता है।उदाहरण 2: डुप्लिकेट रिकॉर्ड्स को फ़िल्टर करना
यदि किसी टेबल में डुप्लिकेट रिकॉर्ड हैं और हम रैंकिंग फ़ंक्शन के आधार पर केवल पहली घटना रखना चाहते हैं, तो हम
ROW_NUMBER()के साथQUALIFYका उपयोग कर सकते हैं:row_numकॉलम प्रत्येक ग्राहक पर पार्टिशन करके और ऑर्डर डेट के अनुसार सॉर्ट करके जनरेट किया जाता है। यह प्रत्येक ऑर्डर को क्रमागत संख्या देता है, सबसे पहले वाले से शुरू करते हुए।QUALIFY row_num = 1के साथ फ़िल्टर करने से हम सुनिश्चित करते हैं कि प्रत्येक ग्राहक के लिए केवल सबसे पहला ऑर्डर ही रखा जाए।यह तकनीक डेटा क्लीनिंग के दौरान डेडुप्लिकेशन कार्यों में आम है।
उदाहरण 3: एग्रीगेट्स में विंडो फ़ंक्शन के आधार पर फ़िल्टर करना
आइए थोड़ा उन्नत हों। एग्रीगेट विंडो फ़ंक्शंस के साथ
QUALIFYका उपयोग अधिक लचीला और डायनामिक फ़िल्टरिंग देता है।उदाहरण के लिए, यदि हम ऐसे कर्मचारियों को ढूंढना चाहते हैं जिनका वेतन विभाग के औसत से ऊपर है, तो हम विंडो फ़ंक्शन पर
AVG()के साथQUALIFYका उपयोग कर सकते हैं:यह तरह का लॉजिक पीयर समूहों के भीतर आउट्लायर या शीर्ष परफ़ॉर्मर की पहचान करने में बेहतरीन है।
> यदि आप ऐसी अधिक जटिल क्वेरीज़ के लिए अपनी SQL स्किल्स मजबूत करना चाहते हैं, तो हमारा Intermediate SQL कोर्स देखें।
Snowflake में QUALIFY उपयोग करने के सर्वोत्तम तरीके
यहाँ
QUALIFYक्लॉज़ के कुछ सर्वोत्तम अभ्यास और उपयोग दिए गए हैं।जटिल क्वेरीज़ को सरल बनाएं
QUALIFYकी ताकत अतिरिक्त सबक्वेरी और CTEs की जरूरत हटाकर क्वेरीज़ को सरल बनाने में है। इस फ़ंक्शनैलिटी का लाभ उठाएँ। जब भी आप कोई विंडो फ़ंक्शन लिखें और उसके आउटपुट पर फ़िल्टर करना हो, बिना सबक्वेरी बनाएQUALIFYका उपयोग करें।कम CTEs का मतलब है आसान डिबगिंग, स्पष्ट लॉजिक, और बेहतर मेंटेनबिलिटी।
QUALIFY को अन्य विंडो फ़ंक्शंस के साथ जोड़ें
अधिक परिष्कृत फ़िल्टरिंग के लिए आप कई विंडो फ़ंक्शंस को जोड़ सकते हैं। उदाहरण के लिए, परिणाम सीमित करते हुए टाई सुलझाने के लिए
ROW_NUMBER()के साथRANK()का उपयोग:यह क्वेरी उन कर्मचारियों को लौटाती है जो अपने विभाग में शीर्ष 3 वेतन रैंकों में आते हैं। हालांकि, यदि उस शीर्ष 3 में तीन से अधिक कर्मचारी टाई करते हैं, तो यह केवल कर्मचारी ID के अनुसार क्रमित पहले तीन को दिखाएगी।
परफॉर्मेंस संबंधी विचार
लिखे गए कोड के लिहाज़ से
QUALIFYक्वेरीज़ को सरल बनाता है, लेकिन कुछ परफॉर्मेंस पहलुओं पर ध्यान देना चाहिए।विंडो फ़ंक्शंस कम्प्यूटेशनली महंगे हो सकते हैं, और खराब संरचित क्वेरीज़ संसाधन-गहन बन सकती हैं। इन बातों का ध्यान रखें:
LIMITकोQUALIFYके साथ उपयोग करें।QUALIFY क्वेरीज़ का ट्रबलशूटिंग
विंडो फ़ंक्शंस की जटिलता को देखते हुए
QUALIFYस्टेटमेंट में गलतियाँ होना आसान है। यहाँ कुछ सुझाव हैं जो आम समस्याओं में मदद करेंगे।1. WHERE क्लॉज़ में विंडो फ़ंक्शंस का उपयोग करना
सीधे
WHEREक्लॉज़ में विंडो फ़ंक्शंस का उपयोग करने पर त्रुटि होगी क्योंकिWHEREका मूल्यांकन विंडो फ़ंक्शंस प्रोसेस होने से पहले होता है।समाधान: इसके बजाय
QUALIFYक्लॉज़ का उपयोग करें, जिसका मूल्यांकन विंडो फ़ंक्शंस के बाद होता है।2. QUALIFY में प्रेडिकेट छोड़ देना
विंडो फ़ंक्शंस के परिणामों को फ़िल्टर करने के लिए
QUALIFYक्लॉज़ में एक प्रेडिकेट जरूरी है। प्रेडिकेट छोड़ देने पर त्रुटि होगी।समाधान: सुनिश्चित करें कि
QUALIFYक्लॉज़ में प्रेडिकेट हो, जैसे शीर्ष रैंक वाली पंक्ति के लिए= 1।3. संदिग्ध एलियस
किसी कॉलम और विंडो फ़ंक्शन के लिए एक ही एलियस का उपयोग करना भ्रम और अप्रत्याशित परिणाम दे सकता है।
समाधान: अस्पष्टता से बचने के लिए अलग-अलग एलियस का उपयोग करें।
4. गलत पार्टिशनिंग या ऑर्डरिंग
विंडो फ़ंक्शंस में
PARTITION BYयाORDER BYको गलत तरीके से निर्दिष्ट करना अप्रत्याशित परिणाम दे सकता है।समाधान: इच्छित लॉजिक से मेल खाने के लिए पार्टिशनिंग और ऑर्डरिंग को सावधानीपूर्वक परिभाषित करें। उदाहरण के लिए, प्रति विभाग शीर्ष वेतन पाने के लिए:
निष्कर्ष
Snowflake में
QUALIFYक्लॉज़ विंडो फ़ंक्शंस के आधार पर परिणामों को फ़िल्टर करने के लिए एक शक्तिशाली टूल है, जो सबक्वेरी की जरूरत घटाता है और क्वेरीज़ को अधिक पठनीय बनाता है। इसे प्रभावी ढंग से उपयोग करना समझकर, डेटा साइंटिस्ट्स रैंक्ड, ग्रुप्ड, या एग्रीगेटेड डेटा के साथ काम करते समय अपनी क्वेरीज़ को सरल और दक्ष बना सकते हैं।क्या आप अपनी Snowflake और SQL स्किल्स को आगे बढ़ाने के लिए तैयार हैं? हमारी Introduction to Snowflake कोर्स से शुरू करें, अपनी विश्लेषणात्मक क्वेरीज़ को PostgreSQL विंडो फ़ंक्शंस कोर्स में निखारें, या Associate Data Engineer in SQL ट्रैक के साथ अपने करियर को आगे बढ़ाएँ!