आँकड़ों और विज्ञापन के लिए कुकीज़
हम आँकड़ों और विज्ञापन के लिए कुकीज़ इस्तेमाल करते हैं, दोनों Google को जाती हैं। मना करने से आपको दिखने वाली किसी चीज़ में कोई फ़र्क़ नहीं पड़ता।निजता पेज पढ़ें
यहाँ आप NDJSON को SQL में बदलते हैं, मुफ़्त और बिना खाते के: फ़ाइल ऊपर छोड़िए और कुछ ही सेकंड में नतीजा डाउनलोड के लिए तैयार मिलेगा। कन्वर्ज़न आपके अपने ब्राउज़र के भीतर होता है, इसलिए फ़ाइल कभी अपलोड नहीं होती। यह Windows, macOS और Linux पर वैसे ही चलता है जैसे iPhone और Android पर, और कनेक्शन काट देने पर भी चलता रहता है।
एक बार में 100 फ़ाइलें। फ़ॉर्मेट अलग-अलग हों तो भी चलेगा।
ये एक के बाद एक बदलती हैं और साथ में एक ZIP बनकर उतरती हैं।
NDJSON से SQL
मेल उतना ही सीधा है जितना सुनने में लगता है। स्रोत की हर ग़ैर-ख़ाली लाइन एक INSERT स्टेटमेंट बनाती है, इसलिए नतीजे में उतने ही स्टेटमेंट हैं जितने रिकॉर्ड इनपुट में थे, और दोनों फ़ाइलों पर लाइन गिनना एक ही संख्या देता है। कोई हेडर हिसाब में नहीं लेना, और डेटा में कुछ ऐसा नहीं जो लाइन तोड़ सके, क्योंकि किसी स्ट्रिंग के भीतर नई लाइन JSON में पहले ही एस्केप हो चुकी होती है।
यही अंदाज़ा इस जोड़ी को काम का बनाता है। अगर लोड 4,12,000 पंक्तियाँ डाली गईं बताए और फ़ाइल में 4,12,000 लाइनें थीं, तो लोड पूरा हुआ — कोई मिलान नहीं, कोई अधूरी पंक्ति का सवाल नहीं, यह चिंता भी नहीं कि किसी उद्धरण-चिह्न वाले फ़ील्ड ने पंक्ति की सीमा निगल ली।
यह वह इकलौती जगह है जहाँ स्ट्रीमिंग वाला स्रोत फ़ॉर्मेट स्ट्रीमिंग बदलाव नहीं दिलाता। कॉलम की सूची हर स्टेटमेंट में एक जैसी होनी चाहिए, और वह हर लाइन की कुँजियों के मेल से बनती है — इसलिए कोई फ़ील्ड जो सिर्फ़ आख़िरी रिकॉर्ड में दिखे, वह भी कॉलम बन जाती है, और जब तक रीडर उसे देख नहीं लेता, कुछ लिखा नहीं जा सकता।
नतीजा एक मेमोरी की छत है, आकार का पायदान नहीं: बदलते वक़्त पूरी फ़ाइल टैब में मौजूद रहती है। कुछ दसियों मेगाबाइट सामान्य है, कुछ सौ पर ब्राउज़र मेहनत करने लगता है, और उससे ज़्यादा पर जवाब है फ़ाइल बाँट देना — NDJSON किसी भी लाइन पर सुरक्षित बँट जाती है।
एक ही फ़ाइल में request, error और job completion डालने वाली लॉग स्ट्रीम में तीन अलग कुँजी-समूह होते हैं। मिलान कुछ छोड़ता नहीं — हर कुँजी एक कॉलम बनती है, और जिस लाइन में वह न हो, वहाँ NULL भर जाता है — और जो तालिका आप घोषित करते हैं वह तीनों ढाँचों का जोड़ है।
एक दोपहर के विश्लेषण के लिए यह अक्सर ठीक है। जो कुछ इससे ज़्यादा टिकना है, उसके लिए फ़ाइल को घटना के प्रकार से छानकर तीन तालिकाओं में लोड करना समझदार सूची और सीधी क्वेरी देता है। पहले बाँटना बस एक jq एक्सप्रेशन प्रति प्रकार का काम है।
नतीजे में कोई DDL नहीं, जान-बूझकर। JSON बताता है कि मान संख्या है, यह नहीं बताता कि कॉलम पूर्णांक होना चाहिए या दो दशमलव वाला संख्यात्मक, वह शून्य हो सकता है या नहीं, प्राइमरी कुँजी क्या है, या टेक्स्ट कितना लंबा हो सकता है — जो स्कीमा का ज़्यादातर हिस्सा है।
व्यावहारिक तरीक़ा है: बदलिए, पहले स्टेटमेंट से कॉलम सूची पढ़िए, उसी के मुताबिक़ तालिका लिखिए, फिर चलाइए। बड़ी फ़ाइलों पर एक बात ज़्यादा मायने रखती है: कॉलम पूरी फ़ाइल के बदलाव से निकालिए, नमूने से नहीं। कोई दुर्लभ फ़ील्ड जो पाँच लाख में एक लाइन में हो, वह भी हर स्टेटमेंट में कॉलम बन जाती है, और पहले हज़ार रिकॉर्ड से बनी तालिका उसी स्टेटमेंट पर पूरा लोड ठुकरा देगी।
फ़ाइल को BEGIN और COMMIT में लपेट दीजिए। वरना हर स्टेटमेंट अपना अलग लेन-देन और अपना अलग राउंड-ट्रिप है, और कुछ लाख पंक्तियों पर यह फ़र्क़ मिनटों की जगह घंटों में नापा जाता है।
यही एक बदलाव पूरी रफ़्तार बदल देता है, क्योंकि किसी भी डेटाबेस के लिए सबसे महँगा हिस्सा हर वाक्य के बाद डिस्क पर उसे पक्का करना है, न कि वाक्य लिखना।
फ़ाइल का नाम जो भी है, उसके एक्सटेंशन के बिना, और जो कुछ SQL पहचानकर्ता में नहीं समा सकता वह अंडरस्कोर से बदल दिया जाता है। हर स्टेटमेंट के बाद बदलने की जगह बदलाव से पहले ही फ़ाइल का नाम बदल लीजिए।
लॉग निर्यात अक्सर तारीख़ या सर्वर के नाम से भरे होते हैं, जो SQL पहचानकर्ता में सीधे नहीं समाते — यह जाँच लेना सस्ता है और चूक जाना महँगा।
नहीं। स्टेटमेंट इसी ब्राउज़र टैब में बनते हैं, जो उस फ़ाइल के लिए इकलौती समझदार व्यवस्था है जो आम तौर पर IP पते और उपयोगकर्ता पहचान से भरी होती है।
इसीलिए न पंक्तियों की कोई घोषित सीमा है और न कोई कतार — जो सीमा है वह आपके अपने डिवाइस की याददाश्त है, और लॉग फ़ाइलों के लिए वह लगभग हमेशा MB नहीं, GB में गिनी जाती है।
| NDJSON | SQL | |
|---|---|---|
| पूरा नाम | Newline-Delimited JSON | SQL INSERT कमांड |
| फ़ाइल एक्सटेंशन | .ndjson, .jsonl | .sql |
| मीडिया टाइप | application/x-ndjson | application/sql |
| पहली बार प्रकाशित | 2013 | 1986 |
| विनिर्देश | — | ISO/IEC 9075 |
| लाइसेंस | खुला मानक | खुला मानक |
| आज की स्थिति | मौजूदा | मौजूदा |
| ब्राउज़र में खुलता है | कोई ब्राउज़र नहीं | कोई ब्राउज़र नहीं |
| इसकी जगह विचारणीय | JSON, CSV | CSV, Parquet |
दोनों तरफ़ के प्रोग्राम अलग हैं: NDJSON फ़ाइल jq और pandas में खुलती है और SQL फ़ाइल PostgreSQL, MySQL और DBeaver में — यानी नतीजा जिसके पास जाएगा, उसे दूसरी सूची में से कोई प्रोग्राम चाहिए होगा।
SQL 1986 से चला आ रहा है, और ISO/IEC 9075 में तय किया गया है। PostgreSQL, MySQL और DBeaver इस फ़ॉर्मेट को पढ़ लेते है।
SQL 1986 में आया और NDJSON 2013 में। किसी को सौंपने के लिए आम तौर पर पुराना वाला ज़्यादा सुरक्षित रहता है; नया वाला वही काम कम बाइट में कर देता है।
नहीं। यह कन्वर्ज़न पूरी तरह आपके ब्राउज़र में होता है, इसलिए फ़ाइल आपके डिवाइस से बाहर नहीं जाती। आप ख़ुद जाँच सकते हैं: डेवलपर टूल्स का नेटवर्क टैब खोलिए और कुछ बदल कर देखिए। आपको पेज ख़ुद दिखेगा और आँकड़ों तथा विज्ञापन के वे अनुरोध दिखेंगे जिनसे इस सेवा का ख़र्च निकलता है — और एक भी ऐसा अनुरोध नहीं जो आपकी फ़ाइल साथ ले जा रहा हो।
हाँ। न खाता, न वॉटरमार्क, और न कोई रोज़ का कोटा जो ख़त्म हो: यह आपकी अपनी मशीन पर चलता है, इसलिए आप जितनी बार चाहें लौट सकते हैं। ब्राउज़र 100 MB तक की फ़ाइलें सँभालता है, एक बार में 100।
NDJSON और SQL सामग्री का वर्णन बुनियादी तौर पर अलग-अलग तरीक़ों से करते हैं। इसलिए यह कन्वर्ज़न नक़ल नहीं, पुनर्निर्माण है: ईमानदार, पर बाइट-दर-बाइट एक जैसा नहीं। एक के अंदर एक बैठी वस्तुएँ चपटी होकर कॉलम बन जाती हैं। गहराई तक बैठा डेटा अपना आकार खो देता है।
कन्वर्ज़न के लिए नहीं: वह उसी ब्राउज़र में होता है जो आपने पहले से खोल रखा है। नतीजा खोलने के लिए उसके बाद वही प्रोग्राम चाहिए जिससे आपका डिवाइस SQL Insert Statements आम तौर पर दिखाता है।