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

शुरुआती लोगों के लिए Snowflake QUALIFY: यह क्या है और इसका उपयोग कैसे करें

यह गाइड Snowflake की QUALIFY क्लॉज़ को आसान बनाकर समझाता है, दिखाते हुए कि विंडो फ़ंक्शंस को बिना सबक्वेरी के फ़िल्टर करके आप SQL क्वेरीज़ कैसे सरल कर सकते हैं—साफ़-सुथरे, तेज़ एनालिटिक्स के लिए एकदम सही।
अपडेट किया गया 25 सित॰ 2026

AI के साथ खोजें

ChatGPTClaudePerplexity

Snowflake के साथ काम करते हुए एक डेटा प्रोफेशनल के रूप में, आपको विंडो फ़ंक्शंस के आधार पर क्वेरी परिणामों को फ़िल्टर करने की आवश्यकता पड़ सकती है। पारंपरिक रूप से, इसके लिए सबक्वेरी या जटिल फ़िल्टरिंग लॉजिक चाहिए होता है। लेकिन Snowflake एक शक्तिशाली विकल्प देता है: QUALIFY क्लॉज़। 

इस गाइड में, मैं चरण-दर-चरण उदाहरणों और सर्वोत्तम प्रथाओं के साथ दिखाऊंगा कि QUALIFY का उपयोग करके फ़िल्टरिंग को कैसे सुव्यवस्थित करें।

Snowflake में QUALIFY क्लॉज़ क्या है?

Snowflake में QUALIFY क्लॉज़ का उपयोग विंडो फ़ंक्शंस के साथ परिणामों को फ़िल्टर करने के लिए किया जाता है। आप विंडो फ़ंक्शंस को SELECT सूची का हिस्सा बनाकर परिभाषित कर सकते हैं या सीधे QUALIFY क्लॉज़ के भीतर उन्हें संदर्भित कर सकते हैं।

आम तौर पर, WHERE एग्रीगेशन से पहले कच्ची पंक्तियों को फ़िल्टर करता है, जबकि HAVING GROUP 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 (PARTITION BY column3 ORDER BY column4) AS rank
FROM table_name
QUALIFY window_function_condition;

आपके पास सामान्य SELECT क्लॉज़ है जिसके बाद कुछ कॉलम हैं। फिर सामान्य फ़ॉर्मेट में लिखा हुआ आपका window_function() है जो हमें rank नाम का कॉलम देता है।

इसके बाद सामान्य FROM स्टेटमेंट है जो टेबल बताता है, और अंत में हमारा QUALIFY। इस QUALIFY के बाद “window_function_condition” आता है, जो अक्सर एक इक्वैलिटी होती है और कुछ ऐसा दिख सकता है: QUALIFY rank = 1

ध्यान दें: आप विंडो फ़ंक्शन के एलियस को संदर्भित कर सकते हैं या QUALIFY क्लॉज़ के अंदर पूरा विंडो फ़ंक्शन एक्सप्रेशन दोबारा लिख सकते हैं। दोनों तरीके काम करते हैं।

> यदि आपको विंडो फ़ंक्शंस की पुनरावृत्ति चाहिए, तो यह विंडो फ़ंक्शन चीट शीट देखें। 

Snowflake में 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 (PARTITION BY department ORDER BY 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 (PARTITION BY department ORDER BY 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 (PARTITION BY customer_id ORDER BY 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 (PARTITION BY 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 (PARTITION BY department ORDER BY salary DESC) AS rank,
       ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC, employee_id) AS row_num
FROM employees
QUALIFY rank <= 3 AND row_num <= 3;

यह क्वेरी उन कर्मचारियों को लौटाती है जो अपने विभाग में शीर्ष 3 वेतन रैंकों में आते हैं। हालांकि, यदि उस शीर्ष 3 में तीन से अधिक कर्मचारी टाई करते हैं, तो यह केवल कर्मचारी ID के अनुसार क्रमित पहले तीन को दिखाएगी।

परफॉर्मेंस संबंधी विचार

लिखे गए कोड के लिहाज़ से QUALIFY क्वेरीज़ को सरल बनाता है, लेकिन कुछ परफॉर्मेंस पहलुओं पर ध्यान देना चाहिए।

विंडो फ़ंक्शंस कम्प्यूटेशनली महंगे हो सकते हैं, और खराब संरचित क्वेरीज़ संसाधन-गहन बन सकती हैं। इन बातों का ध्यान रखें:

  • बड़े डेटासेट पर विंडो फ़ंक्शंस महंगे हो सकते हैं, इसलिए अपनी प्रक्रिया के किस चरण में उनका उपयोग कर रहे हैं, इस पर सावधानी रखें।
  • परफॉर्मेंस को अनुकूलित करने के लिए उचित इंडेक्सिंग और पार्टिशनिंग सुनिश्चित करें।
  • टेस्टिंग के दौरान और बेहतर कुशलता के लिए LIMIT को QUALIFY के साथ उपयोग करें।
  • Snowflake के Query Profile टूल का उपयोग विंडो वाली क्वेरीज़ में परफॉर्मेंस बाधाओं की पहचान के लिए करें।

QUALIFY क्वेरीज़ का ट्रबलशूटिंग

विंडो फ़ंक्शंस की जटिलता को देखते हुए QUALIFY स्टेटमेंट में गलतियाँ होना आसान है। यहाँ कुछ सुझाव हैं जो आम समस्याओं में मदद करेंगे।

1. WHERE क्लॉज़ में विंडो फ़ंक्शंस का उपयोग करना

सीधे WHERE क्लॉज़ में विंडो फ़ंक्शंस का उपयोग करने पर त्रुटि होगी क्योंकि WHERE का मूल्यांकन विंडो फ़ंक्शंस प्रोसेस होने से पहले होता है।

-- This will cause an error
SELECT employee_id, department, salary,
       RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank
FROM employees
WHERE rank = 1;

समाधान: इसके बजाय QUALIFY क्लॉज़ का उपयोग करें, जिसका मूल्यांकन विंडो फ़ंक्शंस के बाद होता है।

SELECT employee_id, department, salary,
       RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank
FROM employees
QUALIFY rank = 1;

2. QUALIFY में प्रेडिकेट छोड़ देना

विंडो फ़ंक्शंस के परिणामों को फ़िल्टर करने के लिए QUALIFY क्लॉज़ में एक प्रेडिकेट जरूरी है। प्रेडिकेट छोड़ देने पर त्रुटि होगी।

-- This will cause an error
SELECT employee_id, department, salary,
       RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank
FROM employees
QUALIFY RANK() OVER (PARTITION BY department ORDER BY salary DESC);

समाधान: सुनिश्चित करें कि QUALIFY क्लॉज़ में प्रेडिकेट हो, जैसे शीर्ष रैंक वाली पंक्ति के लिए = 1।

SELECT employee_id, department, salary,
       RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank
FROM employees
QUALIFY rank = 1;

3. संदिग्ध एलियस

किसी कॉलम और विंडो फ़ंक्शन के लिए एक ही एलियस का उपयोग करना भ्रम और अप्रत्याशित परिणाम दे सकता है।

-- Potentially ambiguous
SELECT salary AS rank,
       RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank
FROM employees
QUALIFY rank = 1;

समाधान: अस्पष्टता से बचने के लिए अलग-अलग एलियस का उपयोग करें।

SELECT salary AS salary_amount,
       RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS salary_rank
FROM employees
QUALIFY salary_rank = 1;

4. गलत पार्टिशनिंग या ऑर्डरिंग

विंडो फ़ंक्शंस में PARTITION BY या ORDER BY को गलत तरीके से निर्दिष्ट करना अप्रत्याशित परिणाम दे सकता है।

समाधान: इच्छित लॉजिक से मेल खाने के लिए पार्टिशनिंग और ऑर्डरिंग को सावधानीपूर्वक परिभाषित करें। उदाहरण के लिए, प्रति विभाग शीर्ष वेतन पाने के लिए:

SELECT employee_id, department, salary,
       RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank
FROM employees
QUALIFY rank = 1;

निष्कर्ष

Snowflake में QUALIFY क्लॉज़ विंडो फ़ंक्शंस के आधार पर परिणामों को फ़िल्टर करने के लिए एक शक्तिशाली टूल है, जो सबक्वेरी की जरूरत घटाता है और क्वेरीज़ को अधिक पठनीय बनाता है। इसे प्रभावी ढंग से उपयोग करना समझकर, डेटा साइंटिस्ट्स रैंक्ड, ग्रुप्ड, या एग्रीगेटेड डेटा के साथ काम करते समय अपनी क्वेरीज़ को सरल और दक्ष बना सकते हैं।

क्या आप अपनी Snowflake और SQL स्किल्स को आगे बढ़ाने के लिए तैयार हैं? हमारी Introduction to Snowflake कोर्स से शुरू करें, अपनी विश्लेषणात्मक क्वेरीज़ को PostgreSQL विंडो फ़ंक्शंस कोर्स में निखारें, या Associate Data Engineer in SQL ट्रैक के साथ अपने करियर को आगे बढ़ाएँ!

FAQs

QUALIFY, WHERE और HAVING से कैसे भिन्न है?

  • 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 का उपयोग करें।


Tim Lu's photo
Author
Tim Lu
LinkedIn

मैं एक डेटा साइंटिस्ट हूँ, जिसे स्पैटियल विश्लेषण, मशीन लर्निंग और डेटा पाइपलाइनों का अनुभव है। मैंने GCP, Hadoop, Hive, Snowflake, Airflow और अन्य डेटा साइंस/इंजीनियरिंग प्रक्रियाओं के साथ काम किया है।

विषय
Snowflake
Cloud

इन कोर्सेज़ से Snowflake के बारे में और जानें!

कोर्स

Snowflake परिचय

2 घंटा
48.8K
Snowflake एक प्रमुख डेटा वेयरहाउसिंग प्लेटफ़ॉर्म है। Snowsight का उपयोग करके डेटा एक्सेस और एक्सप्लोर करने के लिए आसान SQL इंटरफ़ेस सीखें।
विवरण देखेंRight Arrow
पाठ्यक्रम शुरू करें

लर्निंग पाथ

एसोसिएट डेटा इंजीनियर में Snowflake

32 घंटा
Snowflake में डिज़ाइन, क्वेरी और निर्माण करना सीखें - ट्रांसफ़ॉर्मेशन और मॉडलिंग के लिए Snowflake SQL में महारत हासिल करके नौकरी के लिए तैयार Data Engineer बनें।
और देखेंRight Arrow