आँकड़ों और विज्ञापन के लिए कुकीज़
हम आँकड़ों और विज्ञापन के लिए कुकीज़ इस्तेमाल करते हैं, दोनों Google को जाती हैं। मना करने से आपको दिखने वाली किसी चीज़ में कोई फ़र्क़ नहीं पड़ता।निजता पेज पढ़ें
यहाँ आप Parquet को JSON में बदलते हैं, मुफ़्त और बिना खाते के: फ़ाइल ऊपर छोड़िए और कुछ ही सेकंड में नतीजा डाउनलोड के लिए तैयार मिलेगा। कन्वर्ज़न आपके अपने ब्राउज़र के भीतर होता है, इसलिए फ़ाइल कभी अपलोड नहीं होती। यह Windows, macOS और Linux पर वैसे ही चलता है जैसे iPhone और Android पर, और कनेक्शन काट देने पर भी चलता रहता है।
एक बार में 100 फ़ाइलें। फ़ॉर्मेट अलग-अलग हों तो भी चलेगा।
ये एक के बाद एक बदलती हैं और साथ में एक ZIP बनकर उतरती हैं।
Parquet से JSON
Parquet वह है जो कोई डेटा प्लेटफ़ॉर्म देता है और JSON वह है जो बाक़ी सब खाता है। यही फ़र्क़ इस बदलाव की जगह है: टेस्ट के साथ रखा जाने वाला fixture, स्थानीय mock सेवा के लिए seed फ़ाइल, किसी request में पेस्ट करने वाला body, या कुछ पचास पंक्तियाँ जो DuckDB इंस्टॉल किए बिना JSON viewer में देखनी हैं।
ध्यान दीजिए दिलचस्प मामले सब छोटे हैं। Parquet बहुत बड़ी टेबल को सस्ते में क्वेरी करने लायक़ बनाने के लिए है, और इनमें से कुछ भी सफ़र में नहीं बचता — कॉलम-वार बनावट, कंप्रेशन, वे आँकड़े जो reader को पूरे row group छोड़ने देते हैं। जो मिलता है वह टेक्स्ट दस्तावेज़ है, सौ पंक्तियों के लिए सही कलाकृति और दस लाख के लिए ग़लत।
Parquet फ़ाइल वापस पंक्तियों में ट्रांसपोज़ होती है, और वे पंक्तियाँ दो-स्पेस इंडेंटेशन और पीछे नई लाइन के साथ शीर्ष-स्तरीय JSON ऐरे बनकर लिखी जाती हैं। कॉलम नाम ऑब्जेक्ट की कुंजी बनते हैं ठीक वैसे जैसे स्कीमा में लिखे थे।
कोई लपेटन नहीं, कोई मेटाडेटा नहीं। अगर गंतव्य को पंक्तियाँ किसी नाम के नीचे चाहिए — `{"rows": […]}` आम शक्ल है — इसे ख़ुद जोड़िए; `jq '{rows: .}'` एक क़दम में कर देता है। ऐरे की लंबाई पंक्ति गिनती है, तो यह जल्दी जाँचने का तरीक़ा भी है कि एक्सट्रैक्ट में वह है जो आपको बताया गया था।
यही इस पेज का असली चौंकाना है और दो बार पढ़ने लायक़ है। Parquet में असली नेस्टेड टाइप हैं — LIST, STRUCT और MAP — और यहाँ का reader उन्हें JavaScript ऑब्जेक्ट के तौर पर वापस देता है, जिन्हें फिर टेक्स्ट में serialise करके फ़ील्ड में स्ट्रिंग के तौर पर रखा जाता है। दो मान रखने वाला `tags` कॉलम नतीजे में `["a","b"]` नहीं बनता।
कुछ भी खोता नहीं और हर चीज़ एक क़दम दूर रह जाती है। `jq '.[0].tags[0]'` त्रुटि देता है कि स्ट्रिंग में इंडेक्स नहीं होते; `jq '.[0].tags | fromjson | .[0]'` सही मान लौटाता है। अगर JSON किसी test fixture में जा रहा है, ईमानदार तरीक़ा है उन कॉलम को `jq 'map(.tags |= fromjson)'` से एक बार खोलकर बनावट वाला संस्करण कमिट करना।
Parquet टाइमस्टैम्प कॉलम एक टाइप्ड पूर्णांक है जिसकी इकाई और टाइम-ज़ोन फ़्लैग फ़ुटर में दर्ज है। JSON के पास कोई तारीख़ टाइप नहीं, तो हर मान ISO 8601 स्ट्रिंग के तौर पर लिखा जाता है — `2026-03-01T08:00:00.000Z` — जो बेशक और सही क्रम में सॉर्ट होता है।
जो जाता है वह है घोषणा। फ़ाइल अब यह नहीं कहती कि कॉलम टाइमस्टैम्प है; यह कहती है कॉलम एक स्ट्रिंग है जो वैसी दिखती है। आगे कुछ भी इसे दोबारा बताना पड़ेगा — कोई `parse_dates` तर्क, कोई स्कीमा, कोई cast। fixture के लिए यह ठीक और साफ़ है।
Parquet में 64-बिट पूर्णांक टाइप है और JavaScript नंबर 53 बिट पूर्णांक सटीकता रखते हैं। चुपचाप गोल करने की बजाय, न समाने वाला मान quote की गई स्ट्रिंग के तौर पर लिखा जाता है; समाने वाला सादे नंबर के तौर पर।
यह सौदा जान-बूझकर है और सही तरीक़े से लिया गया है — एक अंक ग़लत निकली ऑर्डर संख्या ऐसी बग है जो किसी को तब तक नहीं मिलती जब तक मायने न रखे, जबकि कभी-नंबर-कभी-स्ट्रिंग वाला कॉलम कम से कम दिखता तो है। इसका मतलब है कॉलम फ़ाइल के बीच में टाइप बदल सकता है।
बिना UTF8 टैग वाला Parquet `BYTE_ARRAY` टेक्स्ट नहीं, बाइट है, और बाइट का JSON में कोई वफ़ादार रूप नहीं। हर ऐसा मान छोटे-अक्षर hex स्ट्रिंग के तौर पर लिखा जाता है — प्रति बाइट दो अक्षर, कोई विभाजक नहीं, कोई प्रीफ़िक्स नहीं।
Hex उलटा जा सकता है और साफ़ तौर पर गद्य नहीं, यही डिकोड करने की कोशिश की बजाय इसे चुनने की वजह है। यह उन बाइट से दोगुना भी है जिन्हें यह एनकोड करता है, तो अगर binary कॉलम बड़ा है और आपको ज़रूरत नहीं, इसे query में ही छोड़ दीजिए।
Parquet में गुम मान JSON में `null` बनता है, ख़ाली स्ट्रिंग से अलग और शून्य से अलग। यह मामूली लगता है जब तक आप इसे delimited लक्ष्यों से न मिलाएँ, जहाँ null और ख़ाली दोनों दो विभाजकों के बीच कुछ नहीं में सिमट जाते हैं।
किसी fixture के लिए यह फ़र्क़ ही पूरी बात है। मान की ग़ैर-मौजूदगी पर परखने वाले टेस्ट को उस ग़ैर-मौजूदगी को दिखा पाना चाहिए, और JSON यहाँ इकलौता टेक्स्ट लक्ष्य है जो इसे दिखाता है।
काफ़ी, और तीन दिशाओं से एक साथ। Parquet हर कॉलम को उसकी टाइप के साथ एक बार सहेजता है, फिर दोहराई क़ीमतों को dictionary-encode करता है और पन्नों को कंप्रेस करता है; JSON हर पंक्ति पर हर कॉलम नाम दोहराता है, हर संख्या को दशमलव अंक में लिखता है, और यह आउटपुट हर फ़ील्ड को अपनी लाइन पर इंडेंट करता है।
गुणा में ही सोचिए, प्रतिशत में नहीं, और टेबल चौड़ी होने पर और भी ज़्यादा। पूरा दस्तावेज़ सहेजे जाने से पहले मेमोरी में एक स्ट्रिंग के तौर पर बनता है, जो 100 MB मुफ़्त सीमा से बहुत पहले असली सीमा है। पूरे वेयरहाउस टेबल की उम्मीद रखने की बजाय एक्सट्रैक्ट पर `LIMIT` लगाइए।
जो फ़ुटर फ़ाइल को ख़ुद-बताने वाली बनाता था वह पार नहीं आता। कॉलम नाम कुंजी के तौर पर बचते हैं और बाक़ी कुछ नहीं: न घोषित टाइप, न nullability, न कंप्रेशन, न row-group आँकड़े, न कोई कुंजी-मान मेटाडेटा।
अगर आपके पास DuckDB है, `DESCRIBE SELECT * FROM 'file.parquet'` एक लाइन के shell में स्कीमा दिखाता है और दस सेकंड लेता है। नहीं है तो मुट्ठी भर पंक्तियाँ पहले बदलकर पढ़िए — quote किए पूर्णांक, ISO स्ट्रिंग और escape की गई नेस्टेड कॉलम हर एक स्रोत टाइप बताते हैं।
इसी टैब में। सादी JavaScript में लिखा Parquet reader इनमें से किसी जोड़ी का पहली बार इस्तेमाल करते ही लाया जाता है और फिर स्थानीय तौर पर काम करता है; फ़ाइल कभी कहीं नहीं भेजी जाती, और नेटवर्क टैब बदलाव के दौरान reader आते और कुछ न जाते दिखाता है।
यह फ़र्क़ इस फ़ॉर्मेट के लिए ज़्यादातर से ज़्यादा मायने रखता है, क्योंकि Parquet एक वेयरहाउस कलाकृति है। इस एक्सटेंशन वाली फ़ाइलें उत्पादन टेबल के एक्सट्रैक्ट हैं — ग्राहक, ऑर्डर, इवेंट, तनख़्वाह — और वे किसी डेटा टीम से आती हैं जिसे अपलोड की रिपोर्ट करनी पड़ती।
| Parquet | JSON | |
|---|---|---|
| पूरा नाम | Apache Parquet | JavaScript Object Notation |
| फ़ाइल एक्सटेंशन | .parquet | .json |
| मीडिया टाइप | application/vnd.apache.parquet | application/json |
| कंप्रेशन | बिना नुक़सान — कुछ छोड़ा नहीं जाता | — |
| पहली बार प्रकाशित | 2013 | 2001 |
| प्रकाशक | Apache Software Foundation | — |
| विनिर्देश | — | RFC 8259 |
| लाइसेंस | खुला मानक | खुला मानक |
| आज की स्थिति | मौजूदा | मौजूदा |
| ब्राउज़र में खुलता है | कोई ब्राउज़र नहीं | हर ब्राउज़र |
| इसकी जगह विचारणीय | CSV | XML, YAML, NDJSON |
कुछ नहीं खोता। Parquet और JSON — दोनों अपनी सामग्री बिना नुक़सान सँभालते हैं: यह कन्वर्ज़न पैकिंग बदलता है, गुणवत्ता नहीं, और आप इसे दोहरा सकते हैं बिना इस डर के कि नुक़सान जमा होता जाएगा।
JSON काम करने का फ़ॉर्मेट है और Parquet बनकर तैयार फ़ॉर्मेट। जो लौटता है वह पन्ने की तस्वीर नहीं बल्कि बदली जा सकने वाली लिखावट है — आम तौर पर यही इस कन्वर्ज़न की वजह होती है, और यही इसकी सीमा भी।
JSON को हर मौजूदा ब्राउज़र खोल लेता है। Parquet को इतने भी नहीं। अगर फ़ाइल किसी वेब पेज या किसी फ़ॉर्म तक जा रही है, तो आम तौर पर इस कन्वर्ज़न की पूरी वजह यही है।
दोनों तरफ़ के प्रोग्राम अलग हैं: Parquet फ़ाइल pandas, Apache Spark और DuckDB में खुलती है और JSON फ़ाइल Visual Studio Code, jq और Postman में — यानी नतीजा जिसके पास जाएगा, उसे दूसरी सूची में से कोई प्रोग्राम चाहिए होगा।
JSON 2001 से चला आ रहा है, और RFC 8259 में तय किया गया है। Visual Studio Code, jq और Postman इस फ़ॉर्मेट को पढ़ लेते है।
नहीं। यह कन्वर्ज़न पूरी तरह आपके ब्राउज़र में होता है, इसलिए फ़ाइल आपके डिवाइस से बाहर नहीं जाती। आप ख़ुद जाँच सकते हैं: डेवलपर टूल्स का नेटवर्क टैब खोलिए और कुछ बदल कर देखिए। आपको पेज ख़ुद दिखेगा और आँकड़ों तथा विज्ञापन के वे अनुरोध दिखेंगे जिनसे इस सेवा का ख़र्च निकलता है — और एक भी ऐसा अनुरोध नहीं जो आपकी फ़ाइल साथ ले जा रहा हो। इस जोड़ी के पीछे parquet-wasm है, Apache Arrow के पाठक का एक WebAssembly संस्करण; आपका ब्राउज़र इसे एक बार उतारता है और फिर सहेज कर रखता है।
हाँ। न खाता, न वॉटरमार्क, और न कोई रोज़ का कोटा जो ख़त्म हो: यह आपकी अपनी मशीन पर चलता है, इसलिए आप जितनी बार चाहें लौट सकते हैं। ब्राउज़र 100 MB तक की फ़ाइलें सँभालता है, एक बार में 100। parquet-wasm आपकी अपनी मशीन पर उतरता है और वहीं चलता है — इसीलिए उस पर कोई गिनती नहीं है।
नहीं। JSON वही सामग्री बिना कुछ फेंके सँभालता है: नतीजा गुणवत्ता में असली फ़ाइल जैसा ही होता है।
कुछ नहीं खोता। Parquet और JSON — दोनों अपनी सामग्री बिना नुक़सान सँभालते हैं: यह कन्वर्ज़न पैकिंग बदलता है, गुणवत्ता नहीं, और आप इसे दोहरा सकते हैं बिना इस डर के कि नुक़सान जमा होता जाएगा।
JSON काम करने का फ़ॉर्मेट है और Parquet बनकर तैयार फ़ॉर्मेट। जो लौटता है वह पन्ने की तस्वीर नहीं बल्कि बदली जा सकने वाली लिखावट है — आम तौर पर यही इस कन्वर्ज़न की वजह होती है, और यही इसकी सीमा भी।