प्रतिनिधि इंटरव्यू विषय

डेटा इंजीनियरिंग इंटरव्यू: क्वेरी को तेज़ करने के लिए आप Iceberg Puffin स्टैटिस्टिक्स फ़ाइलों का उपयोग कैसे करेंगे?

डेटाकठिन
Offer.cc संपादकीय टीमप्रकाशित अपडेट किया गया

प्रश्न

एक Iceberg टेबल में कई पार्टीशन फ़ाइलें हैं, और सामान्य क्वेरीज़ कम कार्डिनैलिटी वाले कॉलम को फ़िल्टर करती हैं लेकिन फिर भी कई फ़ाइलों का निरीक्षण करती हैं। कैंडिडेट्स को कम करने के लिए आप Puffin स्टैटिस्टिक्स फ़ाइलों को कैसे डिज़ाइन करेंगे? ब्लॉब और स्नैपशॉट बाइंडिंग, अपूर्ण स्टैटिस्टिक्स, समवर्ती कमिट्स, रीड फ़ॉलबैक, लागत और स्वीकृति मेट्रिक्स को समझाएं।

प्रॉम्प्ट और दायरा

एक Iceberg टेबल दिनांक और किरायेदार (tenant) द्वारा व्यवस्थित है। क्वेरीज़ अक्सर कम कार्डिनैलिटी वाले स्थिति (status) कॉलम को फ़िल्टर करती हैं, फिर भी प्लानिंग कई डेटा फ़ाइलों का निरीक्षण करती है। टीम ऐसे इंडेक्स या स्टैटिस्टिक्स को Puffin फ़ाइलों में स्टोर करना चाहती है जो सीधे मैनिफ़ेस्ट में फ़िट नहीं होते हैं और प्लानर को उनका चुनिंदा उपयोग करने देना चाहती है। स्नैपशॉट बाइंडिंग, बासी (stale) स्टैटिस्टिक्स से सुरक्षा, अनुपलब्ध स्टैटिस्टिक्स, समवर्ती कमिट्स, और इसका प्रमाण बताएं कि गति बढ़ाने से सटीकता से समझौता नहीं होता है।

क्षमता, चयनात्मकता (selectivity), और फ़ाइलों की संख्या इंटरव्यू के अनुमान हैं, सार्वभौमिक बेंचमार्क नहीं। यह प्रश्न डेटा इंजीनियरिंग, लेकहाउस स्टोरेज, क्वेरी इंजन और डेटा प्लेटफ़ॉर्म भूमिकाओं के लिए उपयुक्त है। इसका मुख्य कौशल टेबल-फ़ॉर्मेट मेटाडेटा और प्लानिंग है, इसलिए यह data से संबंधित है।

इंटरव्यूअर क्या मूल्यांकन करते हैं

पहला, क्या आप Puffin की सीमाओं को समझते हैं? Puffin एक Iceberg टेबल के इंडेक्स और स्टैटिस्टिक्स के लिए एक फ़ाइल फ़ॉर्मेट है; ब्लॉब मेटाडेटा इसकी सामग्री का वर्णन करता है। यह टेबल स्नैपशॉट या मैनिफ़ेस्ट को प्रतिस्थापित नहीं करता है।

दूसरा, क्या आप वैकल्पिक अनुकूलन को सटीकता मेटाडेटा से अलग कर सकते हैं? एक रीडर स्टैटिस्टिक्स को नज़रअंदाज़ कर सकता है और फिर भी सही ढंग से डेटा पढ़ सकता है। प्रूनिंग केवल उन्हीं उम्मीदवारों को हटा सकती है जो सिद्ध रूप से मेल नहीं खाते हैं।

तीसरा, क्या आप स्टैटिस्टिक्स को स्नैपशॉट और दायरे से बाँध (bind) सकते हैं? प्रत्येक ब्लॉब को लागू स्नैपशॉट, पार्टीशन, या डेटा-फ़ाइल रेंज की आवश्यकता होती है; किसी अपडेट को आँख बंद करके पुराने ब्लॉब का पुन: उपयोग नहीं करना चाहिए।

चौथा, क्या आप रखरखाव की लागत को माप सकते हैं? अतिरिक्त फ़ाइलें ऑब्जेक्ट-स्टोरेज I/O, कैशिंग, जनरेशन जॉब्स और समाप्ति (expiration) कार्य को बढ़ाती हैं; कम-चयनात्मकता वाली क्वेरीज़ बिना किसी लाभ के प्लानिंग ओवरहेड चुका सकती हैं।

पाँचवाँ, क्या आप फ़ॉलबैक डिज़ाइन कर सकते हैं? अनुपलब्ध, अपठनीय, असंगत, या अमान्य ब्लॉब्स को प्लानर को मैनिफ़ेस्ट और डेटा-फ़ाइल फ़िल्टर पर वापस भेजना चाहिए, कभी भी खाली परिणाम पर नहीं।

पहले स्पष्ट करने योग्य प्रश्न

  • कौन सा Iceberg संस्करण और क्वेरी इंजन लक्षित Puffin ब्लॉब प्रकार का समर्थन करता है?
  • क्या स्टैटिस्टिक्स प्रति पार्टीशन, डेटा फ़ाइल, कॉलम या मान सीमा (value range) के आधार पर जनरेट होते हैं?
  • स्नैपशॉट कितनी बार कमिट, फिर से लिखे (rewritten) या टाइम-ट्रैवल किए जाते हैं?
  • जनरेशन में कितना बासीपन (staleness) स्वीकार्य है, और क्या अंतिम अनुकूलन (eventual optimization) स्वीकार्य है?
  • ब्लॉब कम्प्रेशन, चेकसम, एन्क्रिप्शन और ऑब्जेक्ट अनुमतियों को कैसे प्रबंधित किया जाता है?
  • प्लानर यह कैसे साबित करता है कि किसी उम्मीदवार को बाहर करना सुरक्षित है?

30-सेकंड का उत्तर ढाँचा

"मैं समर्थित Puffin ब्लॉब प्रकारों और उनके Iceberg स्नैपशॉट एसोसिएशन को सत्यापित करूँगा। स्टैटिस्टिक्स एक वैकल्पिक अनुकूलन हैं, सटीकता की पूर्वापेक्षा नहीं; प्रत्येक ब्लॉब अपने स्नैपशॉट, पार्टीशन या फ़ाइल दायरे को रिकॉर्ड करता है, और जब यह गायब, बासी या अपठनीय होता है तो प्लानर मैनिफ़ेस्ट पर फ़ॉलबैक करता है। एक जनरेशन जॉब एक निश्चित स्नैपशॉट का उपयोग करता है और एक नए स्नैपशॉट के लिए पुराने स्टैटिस्टिक्स का पुन: उपयोग करने के बजाय संदर्भ को परमाणु रूप से (atomically) कमिट करता है। कैनरी में मैं कैंडिडेट फ़ाइलों, प्लानिंग समय, अतिरिक्त Puffin I/O, एंड-टू-एंड लेटेंसी और परिणाम सत्यापन की तुलना करूँगा।"

चरण-दर-चरण उत्तर

चरण 1: Puffin और स्नैपशॉट संबंध स्थापित करें

Puffin उन इंडेक्स और स्टैटिस्टिक्स को संग्रहीत करता है जो सीधे Iceberg मैनिफ़ेस्ट में फ़िट नहीं होते हैं। StatisticsFile API पथ, फ़ाइल आकार, फ़ूटर आकार, ब्लॉब मेटाडेटा और संबद्ध स्नैपशॉट ID को उजागर करता है। इन फ़ील्ड्स को बाहरी सेटिंग में केवल ऑब्जेक्ट पथ रखने के बजाय मेटाडेटा अनुबंध में रखें।

चरण 2: ब्लॉब सामग्री और दायरा परिभाषित करें

प्रत्येक ब्लॉब को प्रकार, संस्करण, एन्कोडिंग, कवर किए गए पार्टीशन या डेटा फ़ाइलें, जनरेशन स्नैपशॉट, कॉलम और तुलना नियमों को घोषित करना चाहिए। एक कम-कार्डिनैलिटी स्थिति कॉलम पार्टीशन काउंट या मान-सीमा सारांश का उपयोग कर सकता है; एक असुरक्षित उच्च-कार्डिनैलिटी सारांश फ़ाइलों को प्रून करने के बजाय केवल अवलोकन योग्य रहना चाहिए।

text
statistics = build_from_snapshot(snapshot_id, data_files)
blob = {
  type, version, snapshot_id, partition_scope,
  covered_files, column_rules, checksum, payload
}
commit_statistics_file(blob)

चरण 3: सुरक्षित प्रूनिंग डिज़ाइन करें

प्लानर किसी उम्मीदवार को केवल तभी बाहर करता है जब स्टैटिस्टिक्स यह साबित करते हैं कि वह मेल नहीं खा सकता। अनुपलब्ध स्टैटिस्टिक्स, ओवरलैपिंग मान सीमाएं, अनिश्चित नल (null) सिमेंटिक्स, अज्ञात ब्लॉब संस्करण, या विफल चेकसम सभी मैनिफ़ेस्ट और डेटा-फ़ाइल फ़िल्टरिंग को ट्रिगर करते हैं। "कोई स्टैटिस्टिक्स नहीं" का अर्थ कभी भी "कोई डेटा नहीं" नहीं होना चाहिए।

चरण 4: समवर्ती कमिट्स और बासीपन को संभालें

जनरेशन जॉब एक निश्चित स्नैपशॉट को पढ़ता है और, कमिट के समय, यह सत्यापित करता है कि टेबल अभी भी उस स्नैपशॉट या किसी संगत वंशज (descendant) को संदर्भित कर सकती है। नए राइट्स, डिलीट्स और पार्टीशन इवोल्यूशन फ़ाइल सेट को बदल देते हैं; एक पुराना ब्लॉब केवल अपने घोषित दायरे के लिए मान्य होता है। Puffin ऑब्जेक्ट को उसी स्थान पर (in place) अपडेट न करें।

चरण 5: सुरक्षित रूप से रीड्स की योजना बनाएं और कैश करें

Puffin में स्वयं फ़ूटर और ब्लॉब I/O होता है। प्लानर को यह तय करने के लिए हल्के मेटाडेटा का उपयोग करना चाहिए कि क्या ब्लॉब पढ़ने लायक है, फिर क्वेरी कॉलम और पार्टीशन द्वारा ब्लॉब चुनना चाहिए। कैश कुंजियों में टेबल पहचान, स्नैपशॉट, ब्लॉब प्रकार और संस्करण शामिल हैं। पढ़ने की त्रुटियां कैश को अमान्य करती हैं और फ़ॉलबैक करती हैं; किसी त्रुटि को खाली स्टैटिस्टिक के रूप में कैश नहीं किया जाना चाहिए।

चरण 6: लागत, समाप्ति और अनुमतियों का बजट बनाएं

ब्लॉब बाइट्स, फ़ूटर अनुपात, जनरेशन CPU, ऑब्जेक्ट अनुरोध और प्रूनिंग हिट दर को ट्रैक करें। स्नैपशॉट समाप्ति या फ़ाइल पुनर्लेखन के बाद, केवल ऑब्जेक्ट संशोधन समय के आधार पर नहीं, बल्कि संदर्भ संबंधों द्वारा स्टैटिस्टिक्स को साफ़ करें। जनरेटर और पाठकों को न्यूनतम विशेषाधिकार पहुंच प्रदान करें, चेकसम को मान्य करें, और जहां आवश्यक हो संवेदनशील सारांशों को एन्क्रिप्ट करें।

चरण 7: कैनरी स्वीकृति परीक्षण चलाएं

उसी स्नैपशॉट पर, सक्षम और अक्षम स्टैटिस्टिक्स के साथ प्लानिंग की तुलना करें: उम्मीदवार फ़ाइलें, स्कैन किए गए बाइट्स, प्लानिंग p50/p95, अतिरिक्त Puffin I/O, एंड-टू-एंड लेटेंसी और परिणाम हैश। एक ब्लॉब हटाएं, संस्करण बेमेल बनाएं, और यह साबित करने के लिए समवर्ती कमिट के साथ रेस करें कि फ़ॉलबैक पूर्ण परिणाम देता है। नकारात्मक नियंत्रण (negative control) के रूप में कम-चयनात्मकता वाली क्वेरी रखें।

मॉडल उत्तर

"मैं Puffin को एक वैकल्पिक प्लानिंग त्वरण परत के रूप में मानूँगा। एक जनरेटर एक निश्चित स्नैपशॉट पढ़ता है, और ब्लॉब मेटाडेटा स्नैपशॉट, पार्टीशन या फ़ाइल स्कोप, कॉलम नियम, संस्करण और चेकसम रिकॉर्ड करता है। एक नया स्नैपशॉट उस घोषित दायरे के बाहर ब्लॉब का पुन: उपयोग नहीं करना चाहिए।

प्लानर केवल तभी प्रून करता है जब स्टैटिस्टिक्स सुरक्षित रूप से बेमेल साबित करते हैं। गायब, बासी, अपठनीय, अस्पष्ट-नल, या अज्ञात-संस्करण ब्लॉब्स मैनिफ़ेस्ट और डेटा-फ़ाइल फ़िल्टर पर फ़ॉलबैक करते हैं; अनुपलब्ध स्टैटिस्टिक्स का अर्थ कभी भी खाली परिणाम नहीं होता है। कैश कुंजियों में टेबल, स्नैपशॉट, प्रकार और संस्करण शामिल हैं।

कैनरी में मैं गायब ब्लॉब्स और समवर्ती कमिट्स को इंजेक्ट करते हुए कैंडिडेट फ़ाइलों, प्लानिंग समय, Puffin I/O, एंड-टू-एंड p95 और परिणाम हैश की तुलना करूँगा। मैं इसका विस्तार तभी करूँगा जब लाभ स्थिर हों, फ़ॉलबैक सही हो, और रखरखाव लागत स्वीकार्य हो।"

सामान्य गलतियाँ

  • Puffin को स्नैपशॉट के प्राथमिक स्रोत (source of truth) के रूप में मानना → बासी स्टैटिस्टिक्स परिणाम बदल देते हैं → मैनिफ़ेस्ट फ़ॉलबैक के साथ इसे वैकल्पिक रखें।
  • केवल एक ऑब्जेक्ट पथ रिकॉर्ड करना → स्कोप और स्नैपशॉट की जाँच नहीं की जा सकती → पूर्ण ब्लॉब मेटाडेटा स्टोर करें।
  • बासी ब्लॉब्स के साथ प्रूनिंग करना → नए राइट्स या डिलीट्स छूट जाते हैं → स्नैपशॉट और कवर की गई फ़ाइलों को बाइंड करें।
  • अनुपलब्ध स्टैटिस्टिक्स के लिए खाली परिणाम लौटाना → अज्ञात कोई मेल नहीं बन जाता है → सामान्य फ़िल्टरिंग पर वापस जाएँ।
  • Puffin को उसी स्थान पर अधिलेखित (overwrite) करना → समवर्ती पाठक मिश्रित संस्करण देखते हैं → एक नई फ़ाइल लिखें और इसे परमाणु रूप से संदर्भित करें।
  • स्नैपशॉट के बिना कैशिंग → विभिन्न स्नैपशॉट गलत स्टैटिस्टिक्स का पुन: उपयोग करते हैं → कुंजी में संस्करण और स्नैपशॉट शामिल करें।
  • केवल प्लानिंग समय मापना → स्कैन परिणाम बदल सकते हैं → कैंडिडेट सेट और परिणाम हैश की तुलना करें।
  • संशोधन समय के आधार पर हटाना → बनाए रखे गए स्नैपशॉट अभी भी फ़ाइल को संदर्भित कर सकते हैं → संदर्भों के आधार पर समाप्त (expire) करें।

फ़ॉलो-अप प्रश्न

फ़ॉलो-अप 1: पाठक स्टैटिस्टिक्स को अनदेखा क्यों कर सकते हैं?

Puffin स्टैटिस्टिक्स केवल सूचनात्मक हैं। तालिका को अभी भी मैनिफ़ेस्ट और डेटा फ़ाइलों से सही ढंग से पढ़ा जा सकता है, इसलिए असमर्थित या अस्थायी रूप से अपठनीय ब्लॉब्स को पारदर्शी फ़ॉलबैक शुरू करना चाहिए।

फ़ॉलो-अप 2: आप स्टैटिस्टिक्स को कैसे समाप्त (expire) करते हैं?

पुष्टि करें कि किसी भी बनाए रखे गए स्नैपशॉट, शाखा (branch) या टैग को ब्लॉब की कवर की गई सीमा की आवश्यकता नहीं है, फिर इसे टेबल-फ़ॉर्मेट संदर्भों के अनुसार साफ़ करें। केवल ऑब्जेक्ट संशोधन समय पर्याप्त नहीं है।

फ़ॉलो-अप 3: क्या होगा यदि मान सीमा अपूर्ण है?

अज्ञात हिस्से को संभावित रूप से मेल खाने वाला मानें और उम्मीदवारों का दायरा बढ़ाएं या पूरी तरह से फ़ॉलबैक करें। अनुकूलन में फ़ाल्स पॉज़िटिव हो सकते हैं, लेकिन कभी भी फ़ाल्स नेगेटिव नहीं।

फ़ॉलो-अप 4: समवर्ती राइट्स के दौरान स्टैटिस्टिक्स कब जनरेट होने चाहिए?

एक कमिटेड स्नैपशॉट से जनरेट करें और मेटाडेटा कमिट के बाद बाइंड करें; इन-फ़्लाइट राइट से अस्थायी फ़ाइलें प्लानिंग के लिए दृश्यमान नहीं होनी चाहिए। कमिट समय पर अनुकूलता की पुन: जाँच करें।

फ़ॉलो-अप 5: Puffin का उपयोग कब सार्थक नहीं है?

जब चयनात्मकता कम हो, ब्लॉब I/O मैनिफ़ेस्ट बचत से अधिक हो, जनरेशन बहुत बासी हो, या रखरखाव लागत लाभ से अधिक हो, तो इसे अक्षम या सीमित करें। प्रति-तालिका एक स्विच बनाए रखें।

फ़ॉलो-अप 6: आप कैसे साबित करते हैं कि अनुकूलन परिणामों को सुरक्षित रखता है?

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

सार्वजनिक स्रोत

संबंधित प्रश्न