आँकड़ों और विज्ञापन के लिए कुकीज़
हम आँकड़ों और विज्ञापन के लिए कुकीज़ इस्तेमाल करते हैं, दोनों Google को जाती हैं। मना करने से आपको दिखने वाली किसी चीज़ में कोई फ़र्क़ नहीं पड़ता।निजता पेज पढ़ें
Parquet
बड़ी मात्राओं के लिए कॉलम-वार भंडारण। CSV से कहीं छोटा और कहीं तेज़ी से पूछा जा सकने वाला।
Parquet
Parquet एक बाइनरी फ़ॉर्मेट है, जो सिर्फ़ उसी प्रोग्राम के लिए मायने रखता है जो इसे जानता हो। इसका इस्तेमाल सहेजना और प्रोग्रामों के बीच डेटा ले जाना के लिए होता है।
एक्सटेंशन .parquet है और पूरा नाम Apache Parquet। दोनों उतना नहीं बताते जितना यह कि फ़ाइल अंदर क्या-क्या रख सकती है — और इस पन्ने का बाक़ी हिस्सा इसी के बारे में है।
इसे Apache Software Foundation ने 2013 में जारी किया था।
उम्र एक व्यावहारिक वजह से काम की है: फ़ॉर्मेट जितना पुराना, उतने ज़्यादा प्रोग्रामों को उसे सीखने का वक़्त मिला है।
यह पूरा प्रकाशित है, इसलिए कोई भी इसे देखकर अंदाज़ा लगाने के बजाय दस्तावेज़ पढ़कर लागू कर सकता है। यही वजह है कि यह फ़ॉर्मेट इतने सारे प्रोग्रामों में मिलता है, और यही वजह है कि बीस साल पहले लिखी गई फ़ाइलें आज भी खुल जाती हैं। पर विनिर्देश का प्रकाशित होना और उसका रॉयल्टी-मुक्त होना एक बात नहीं है: जहाँ फ़ॉर्मेट किसी कोडेक को अपने अंदर लपेटता है, वहाँ पेटेंट का लाइसेंस एक अलग सवाल है, और मानक उसका जवाब नहीं देता।
Parquet फ़ाइल अपना अंदरूनी हिस्सा हूबहू सहेजती है। दोबारा सहेजने से कुछ नहीं बदलता, इसलिए इसे जितनी बार चाहें खोलिए, बदलिए और फिर से सहेजिए — नुक़सान जमा नहीं होता। यही बात इसे सौंपने का नहीं, काम करने का फ़ॉर्मेट बनाती है।
Parquet फ़ाइल अपने साथ एक चेकसम, जिससे ख़राब हुई फ़ाइल चुपचाप ग़लत पढ़े जाने के बजाय पकड़ में आ जाए और चाहें तो एन्क्रिप्शन लाती है।
एन्क्रिप्ट की गई फ़ाइल को बदलने से पहले खोलना पड़ता है — यहाँ भी और कहीं भी। पासवर्ड कोई ऐसी चीज़ नहीं जिसे कोई कन्वर्टर पार कर सके, और जो यह दावा करे उसे तो फ़ाइल देनी ही नहीं चाहिए।
pandas, Apache Spark और DuckDB इसे पढ़ते हैं, और इसी तरह के ज़्यादातर दूसरे प्रोग्राम भी।
फ़ाइल न खुले तो कसूर फ़ॉर्मेट का शायद ही कभी होता है — अक्सर प्रोग्राम ही फ़ॉर्मेट से पुराना होता है। किसी पुरानी चीज़ में बदल लेना इससे निकलने का भरोसेमंद रास्ता है, और इस वेबसाइट का बाक़ी हिस्सा इसी के लिए है।
इसे कोई भी ब्राउज़र नहीं पढ़ता।
इसे बदलने की सबसे आम वजह यही है: फ़ॉर्मेट ख़राब है, ऐसा नहीं — बात यह है कि जहाँ आप फ़ाइल दिखाना चाहते हैं वह जगह उसे पढ़ ही नहीं सकती।
Parquet सौंपने के लिए बना है, इसके अंदर काम करने के लिए नहीं। इसे बदलना मुमकिन है और शायद ही कभी सुखद; समझदारी का रास्ता मूल फ़ाइल से होकर और एक नए निर्यात से होकर जाता है।
बार-बार आने वाली शिकायतें: अपने इलाक़े के बाहर सहारा बिखरा हुआ है।
इनमें से कोई भी फ़ॉर्मेट से दूर रहने की वजह नहीं है। ये वे बातें हैं जिन्हें इनमें से कोई आपको चौंकाए उससे पहले जान लेना चाहिए — यह अलग दावा है, और ज़्यादा काम का।
CSV एक बार में एक रिकॉर्ड लिखता है: नाम, तारीख़, देश, राशि, फिर अगला रिकॉर्ड। Parquet एक बार में एक कॉलम लिखता है: हर नाम साथ में, फिर हर तारीख़, फिर हर देश।
यही एक पुनर्व्यवस्था पूरा फ़ॉर्मेट है। यह फ़ाइलिंग पसंद जैसा सुनाई देता है और यह आगे की हर चीज़ का अर्थशास्त्र बदल देता है, क्योंकि पचास में से दो कॉलम चाहने वाली क्वेरी ठीक वे दो ही पढ़ सकती है और बाक़ी छोड़ सकती है।
किसी कॉलम के मूल्य आपस में मिलते-जुलते हैं — तारीख़ें तारीख़ जैसी दिखती हैं, देश कोड दोहराते हैं — और यही समानता संपीड़न को खुराक देती है। Parquet संपीड़न से पहले चतुराई से एनकोड भी करता है: कम अलग मूल्य वाला कॉलम डिक्शनरी और छोटे पूर्णांकों की सूची बन जाता है।
नतीजा नियमित रूप से CSV के मुक़ाबले पाँच से दस गुना छोटा होता है। यह भंडारण पर सीधी बचत है और, ज़्यादा मायने रखने वाली बात, इसे पढ़ने वाली हर चीज़ के ट्रांसफ़र समय पर।
CSV में कोई प्रकार नहीं, इसलिए हर उपभोक्ता अंदाज़ा लगाता है — और यहीं शुरुआती शून्य ग़ायब होते हैं। Parquet हर कॉलम के अपने स्कीमा में प्रकार दर्ज करता है: यह 64-बिट पूर्णांक है, यह स्ट्रिंग है, यह टाइम-ज़ोन वाला टाइमस्टैंप है।
तो डेटा वही मतलब लेकर पहुँचता है जो उसका था। कुछ भी अंदाज़ा नहीं लगाया जाता, कुछ भी locale पर निर्भर नहीं, और पिनकोड का कॉलम पिनकोड का कॉलम रहता है। सिस्टम के बीच जाने वाली किसी भी चीज़ के लिए, यह संपीड़न से बड़ा व्यावहारिक फ़ायदा है।
Parquet row group में संगठित होता है, और हर एक प्रति-कॉलम आँकड़े दर्ज करता है — न्यूनतम, अधिकतम, कितने null। तारीख़ सीमा पर फ़िल्टर करती क्वेरी वे आँकड़े पढ़ सकती है, देख सकती है कि पूरा row group सीमा से बाहर है, और बिना कुछ डिकंप्रेस किए उसे छोड़ सकती है।
यही वजह है कि बड़े Parquet डेटासेट पर क्वेरी CSV के मुक़ाबले नाटकीय रूप से तेज़ हो सकती है। यह यह भी बताता है कि तारीख़ के हिसाब से डेटासेट को फ़ोल्डर संरचना में बाँटना — प्रति दिन एक फ़ोल्डर — क्यों इतना अच्छा काम करता है।
एक रिकॉर्ड पढ़ने में। एक पंक्ति दोबारा बनाना मतलब हर कॉलम से एक मूल्य इकट्ठा करना, जो ठीक वह पहुँच पैटर्न है जिसके लिए यह ले-आउट नहीं बना। Parquet एनालिटिक्स फ़ॉर्मेट है, डेटाबेस नहीं।
जोड़ने में। फ़ाइल पूरी लिखी जाती है, उसके आँकड़े और फ़ुटर अंत में गिने जाते हैं, इसलिए पंक्ति जोड़ने का मतलब है दोबारा लिखना या नई फ़ाइल लिखना। और देखने में। यह बाइनरी है — टेक्स्ट एडिटर कुछ काम का नहीं दिखाता।
रुकावट पहले से कम है। DuckDB एक ही SQL क्वेरी से Parquet फ़ाइल सीधे पढ़ता है और सेकंडों में इंस्टॉल हो जाता है। pandas या Polars वाला Python एक लाइन में पढ़ता है। कई मुफ़्त डेस्कटॉप व्यूअर इसे स्प्रेडशीट की तरह खोलते हैं।
CSV में बदलना दूसरा रास्ता है, और सही है जब सहकर्मी को डेटा स्प्रेडशीट में चाहिए — यह मानते हुए कि प्रकार वापस अंदाज़े बन जाते हैं। Parquet को स्रोत की तरह रखिए और माँगने वाले के लिए CSV बनाइए।
बड़े पैमाने पर डेटा विश्लेषण की हर जगह: क्लाउड स्टोरेज पर डेटा लेक, Spark और Databricks, Snowflake और BigQuery निर्यात, dbt पाइपलाइन, और अब सामान्य Python विश्लेषण जहाँ इसने चुपचाप डेटाफ़्रेम सहेजने के तयशुदा तरीक़े के रूप में CSV की जगह ले ली है।
यह वह फ़ॉर्मेट भी बनता जा रहा है जिसमें सार्वजनिक निकाय और शोध प्रोजेक्ट बड़े डेटासेट प्रकाशित करते हैं, ठीक इसलिए कि विकल्प — दो-गीगाबाइट CSV जिसे कोई स्प्रेडशीट में खोल ही नहीं सकता — किसी के काम का नहीं।
| एक्सटेंशन | .parquet |
|---|---|
| मीडिया टाइप | application/vnd.apache.parquet |
| प्रकाशक | Apache Software Foundation |
| पहली बार प्रकाशित | 2013 |
DuckDB एक ही SQL क्वेरी से इसे सीधे पढ़ता है और सेकंडों में इंस्टॉल होता है। pandas या Polars वाला Python इसे एक लाइन में पढ़ता है, और कई मुफ़्त डेस्कटॉप व्यूअर इसे स्प्रेडशीट की तरह दिखाते हैं। टेक्स्ट एडिटर कुछ नहीं दिखाता — फ़ॉर्मेट बाइनरी है।
क्योंकि यह कॉलम साथ रखता है, और किसी कॉलम के भीतर मूल्य इतने मिलते-जुलते होते हैं कि वे बहुत अच्छे से संपीड़ित होते हैं। यह संपीड़न से पहले एनकोड भी करता है — दोहराए मूल्य डिक्शनरी बनते हैं। पाँच से दस गुना छोटा होना आम है।
पुराने संस्करणों में सीधे नहीं। पहले CSV या XLSX में बदलिए, यह मानते हुए कि फ़ाइल कई गुना बड़ी हो जाएगी और CSV वह प्रकार जानकारी खो देगा जो Parquet ढोता था।
हाँ — स्कीमा हर कॉलम का प्रकार दर्ज करता है, पूर्णांक चौड़ाई, टाइम-ज़ोन वाले टाइमस्टैंप और तय सटीकता वाले दशमलव समेत। यही वजह है कि पिनकोड का कॉलम सिस्टम के बीच यात्रा में सही बचता है।
सचमुच नहीं। फ़ाइल पूरी लिखी जाती है, उसका फ़ुटर और आँकड़े अंत में गिने जाते हैं, इसलिए डेटा जोड़ने का मतलब है नई फ़ाइल लिखना। स्ट्रीमिंग पाइपलाइन कई छोटी फ़ाइलें बनाती हैं और उन्हें समय-समय पर जोड़ती हैं।
Parquet किसी भी विश्लेषणात्मक, बड़ी, या प्रकार मायने रखने वाली सिस्टम-के-बीच चीज़ के लिए। CSV जब किसी इंसान को इसे स्प्रेडशीट में खोलना है, या पाने वाला औज़ार कुछ और स्वीकार नहीं करता।