आँकड़ों और विज्ञापन के लिए कुकीज़
हम आँकड़ों और विज्ञापन के लिए कुकीज़ इस्तेमाल करते हैं, दोनों Google को जाती हैं। मना करने से आपको दिखने वाली किसी चीज़ में कोई फ़र्क़ नहीं पड़ता।निजता पेज पढ़ें
यहाँ आप XLSX को SQL में बदलते हैं, मुफ़्त और बिना खाते के: फ़ाइल ऊपर छोड़िए और कुछ ही सेकंड में नतीजा डाउनलोड के लिए तैयार मिलेगा। कन्वर्ज़न आपके अपने ब्राउज़र के भीतर होता है, इसलिए फ़ाइल कभी अपलोड नहीं होती। यह Windows, macOS और Linux पर वैसे ही चलता है जैसे iPhone और Android पर, और कनेक्शन काट देने पर भी चलता रहता है।
एक बार में 100 फ़ाइलें। फ़ॉर्मेट अलग-अलग हों तो भी चलेगा।
ये एक के बाद एक बदलती हैं और साथ में एक ZIP बनकर उतरती हैं।
XLSX से SQL
आउटपुट है INSERT स्टेटमेंट की फ़ाइल, शीट की हर पंक्ति के लिए एक, हर एक टेबल का नाम लेती और हेडर से कॉलम गिनाती है। ऊपर कोई CREATE TABLE नहीं — यह जान-बूझकर है। स्प्रेडशीट में न टाइप है, न लंबाई, न कुंजी।
पंक्ति में एक ग़लत अंदाज़ा एक बिगड़ा रिकॉर्ड है। ढाँचे में एक ग़लत अंदाज़ा दो साल तक पते काटता रहने वाला VARCHAR है। यहाँ माना जाता है कि आपने पहले ही टेबल डिज़ाइन कर ली है।
वर्कबुक का नाम, एक्सटेंशन हटाकर, हर स्टेटमेंट में टेबल बनता है। इसे साफ़ किया जाता है: हरफ़, अंक और underscore के अलावा कुछ भी underscore बन जाता है, और अंक से शुरू होने वाले नाम के आगे एक जुड़ जाता है।
व्यावहारिक सलाह सीधी है — बदलने से पहले फ़ाइल का नाम ठीक उसी टेबल के बराबर रख दीजिए जिसमें डेटा जाना है। हेडर पंक्ति के नाम भी उसी तरह साफ़ होते हैं, इसलिए "Order total (£)" जैसा हेडर आपके कॉलम-नाम से नहीं मिलेगा।
संख्याएँ सादी लिखी जाती हैं। टेक्स्ट एकल-उद्धरण में लपेटा जाता है और अंदर का apostrophe दोगुना कर दिया जाता है — यह ANSI रूप है जो हर बड़ा इंजन समझता है। Backslash escape जान-बूझकर इस्तेमाल नहीं होता, क्योंकि वह MySQL का विस्तार है।
ख़ाली खाना NULL कीवर्ड बनता है, ख़ाली स्ट्रिंग नहीं — जो स्प्रेडशीट में किसी ख़ाली जगह का लगभग हमेशा सही पढ़ना है, और यह जानना ज़रूरी है अगर आपका कॉलम NOT NULL है।
बूलियन खाना अक्षरशः TRUE या FALSE बनकर लिखा जाता है। Postgres इसे सीधे लेता है, MySQL इन्हें 1 और 0 का उपनाम मानता है, SQLite बरसों से स्वीकार करता है। SQL Server नहीं — उसका bit टाइप 1 और 0 चाहता है।
यह जानने के बाद दो सेकंड का फ़िक्स है — चलाने से पहले TRUE/FALSE बदल दीजिए। न जानने पर चार सौवें स्टेटमेंट पर आई त्रुटि से पता चलना बीस मिनट का झंझट है।
स्प्रेडशीट तारीख़ को दिन-गिनती के रूप में रखती है, दिखावट के साथ, और बदलाव वह अंक ही लिखता है। 1 जनवरी 2024, दिसंबर 1899 के अंत से गिनकर 45292 बन जाता है।
संख्या-कॉलम में यह चुपचाप ग़लत बैठ जाता है; तारीख़-कॉलम में नकार दिया जाता है, जो कम-से-कम ज़ोर से होता है। इलाज है वर्कबुक में कॉलम को स्पष्ट टेक्स्ट में बदलना, या डेटाबेस में एक staging कॉलम रखकर वहीं गणित करना।
शीट में टेक्स्ट के रूप में रखा गया कोड उद्धृत स्ट्रिंग बनकर लिखा जाता है, इसलिए 007, '007' बनकर आता है और ज़ीरो-पैडेड खाता-संदर्भ VARCHAR कॉलम में सही पहुँचता है। यह ठीक उलटा है उस हाल का जो CSV और लापरवाह स्प्रेडशीट राउंड-ट्रिप में होता है।
जाँच यह है कि किसी कॉलम के दो मान जोड़ने का कोई मतलब बनता है क्या। पिनकोड, फ़ोन नंबर, संदर्भ-कोड — सब इस जाँच में नाकाम होते हैं और टेक्स्ट कॉलम में ही रहने चाहिए।
हर स्टेटमेंट अपने कॉलम खुलकर नाम लेता है, टेबल के मौजूदा कॉलम-क्रम पर भरोसा नहीं करता। कॉलम-सेट पूरी शीट में मिले खानों का जोड़ है, इसलिए कोई खाना जो सिर्फ़ बाद की पंक्तियों में दिखता है, वह भी सूची में है — पहले वाली पंक्तियों में NULL के साथ।
यह विस्तार एक क़ीमत लेता है — कॉलम-सूची हर लाइन पर दोहराई जाती है, इसलिए फ़ाइल डेटा से बड़ी है। पचास हज़ार छह-कॉलम पंक्तियाँ लगभग 5.7 मेगाबाइट SQL बनती हैं, जबकि उनकी .xlsx लगभग 4.3 मेगाबाइट थी।
स्टेटमेंट बिना transaction के, हर पंक्ति पर एक, लिखे जाते हैं। Postgres या MySQL पर जैसा है वैसा चलाने पर वह पचास हज़ार अलग राउंड-ट्रिप और उतने ही implicit commit हैं।
फ़ाइल को BEGIN और COMMIT में लपेटना दोनों समस्या दो लाइनों में सुलझा देता है। सचमुच बड़े लोड के लिए बेहतर औज़ार bulk रास्ता है — Postgres में COPY, MySQL में LOAD DATA — जो एक दर्जा तेज़ है।
वर्कबुक की पहली शीट ही बदली जाती है, क्योंकि INSERT स्टेटमेंट का सिलसिला एक ही टेबल की बात करता है। अगर चाहिए वाली शीट पहली नहीं, तो उसे हटाकर आगे लाइए और फिर बदलिए।
सब कुछ यहीं होता है — वर्कबुक पार्स होती है और स्टेटमेंट पेज में लिखे जाते हैं, कोई अपलोड नहीं। यह ज़्यादा मायने रखता है क्योंकि डेटाबेस की तरफ़ जा रही स्प्रेडशीट अक्सर ग्राहक-रिकॉर्ड या लेन-देन होते हैं।
| XLSX | SQL | |
|---|---|---|
| पूरा नाम | Excel वर्कबुक | SQL INSERT कमांड |
| फ़ाइल एक्सटेंशन | .xlsx | .sql |
| मीडिया टाइप | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | application/sql |
| पहली बार प्रकाशित | 2007 | 1986 |
| प्रकाशक | Microsoft | — |
| विनिर्देश | ECMA-376 | ISO/IEC 9075 |
| लाइसेंस | खुला मानक | खुला मानक |
| आज की स्थिति | मौजूदा | मौजूदा |
| ब्राउज़र में खुलता है | कोई ब्राउज़र नहीं | कोई ब्राउज़र नहीं |
| इसकी जगह विचारणीय | CSV, ODS, Parquet | CSV, Parquet |
दोनों तरफ़ के प्रोग्राम अलग हैं: XLSX फ़ाइल Microsoft Excel, LibreOffice Calc और Google Sheets में खुलती है और SQL फ़ाइल PostgreSQL, MySQL और DBeaver में — यानी नतीजा जिसके पास जाएगा, उसे दूसरी सूची में से कोई प्रोग्राम चाहिए होगा।
दोनों का निशाना अलग काम है: XLSX का एडिटिंग पर, SQL का प्रोग्रामों के बीच डेटा ले जाना और सहेजना पर। इस पर सोचना बनता है, क्योंकि जिस वजह से एक मौजूद है, आम तौर पर उसी वजह से दूसरा असुविधाजनक होता है।
XLSX Microsoft का फ़ॉर्मेट है, जो 2007 में आया। यह ECMA-376 में तय किया गया है, और अगर फ़ाइल को उस औज़ार से ज़्यादा जीना है जिसने उसे लिखा, तो यह बात क़ीमती है।
SQL 1986 से चला आ रहा है, और ISO/IEC 9075 में तय किया गया है। PostgreSQL, MySQL और DBeaver इस फ़ॉर्मेट को पढ़ लेते है।
SQL 1986 में आया और XLSX 2007 में। किसी को सौंपने के लिए आम तौर पर पुराना वाला ज़्यादा सुरक्षित रहता है; नया वाला वही काम कम बाइट में कर देता है।
नहीं। यह कन्वर्ज़न पूरी तरह आपके ब्राउज़र में होता है, इसलिए फ़ाइल आपके डिवाइस से बाहर नहीं जाती। आप ख़ुद जाँच सकते हैं: डेवलपर टूल्स का नेटवर्क टैब खोलिए और कुछ बदल कर देखिए। आपको पेज ख़ुद दिखेगा और आँकड़ों तथा विज्ञापन के वे अनुरोध दिखेंगे जिनसे इस सेवा का ख़र्च निकलता है — और एक भी ऐसा अनुरोध नहीं जो आपकी फ़ाइल साथ ले जा रहा हो। इस जोड़ी के पीछे SheetJS है, JavaScript में लिखा स्प्रेडशीट का एक पाठक और लेखक; आपका ब्राउज़र इसे एक बार उतारता है और फिर सहेज कर रखता है।
हाँ। न खाता, न वॉटरमार्क, और न कोई रोज़ का कोटा जो ख़त्म हो: यह आपकी अपनी मशीन पर चलता है, इसलिए आप जितनी बार चाहें लौट सकते हैं। ब्राउज़र 100 MB तक की फ़ाइलें सँभालता है, एक बार में 100। SheetJS आपकी अपनी मशीन पर उतरता है और वहीं चलता है — इसीलिए उस पर कोई गिनती नहीं है।
XLSX और SQL सामग्री का वर्णन बुनियादी तौर पर अलग-अलग तरीक़ों से करते हैं। इसलिए यह कन्वर्ज़न नक़ल नहीं, पुनर्निर्माण है: ईमानदार, पर बाइट-दर-बाइट एक जैसा नहीं। सिर्फ़ पहली शीट पढ़ी जाती है, और उसमें भी सिर्फ़ मान। सूत्र, फ़ॉर्मैटिंग, कॉलम की चौड़ाई और पहली के बाद की हर शीट पीछे रह जाती है।
कन्वर्ज़न के लिए नहीं: वह उसी ब्राउज़र में होता है जो आपने पहले से खोल रखा है। नतीजा खोलने के लिए उसके बाद वही प्रोग्राम चाहिए जिससे आपका डिवाइस SQL Insert Statements आम तौर पर दिखाता है।