CSV को SQL में बदलें

यहाँ आप CSV को SQL में बदलते हैं, मुफ़्त और बिना खाते के: फ़ाइल ऊपर छोड़िए और कुछ ही सेकंड में नतीजा डाउनलोड के लिए तैयार मिलेगा। कन्वर्ज़न आपके अपने ब्राउज़र के भीतर होता है, इसलिए फ़ाइल कभी अपलोड नहीं होती। यह Windows, macOS और Linux पर वैसे ही चलता है जैसे iPhone और Android पर, और कनेक्शन काट देने पर भी चलता रहता है।

  • कहाँ चलता है आपके ब्राउज़र में। फ़ाइल कभी अपलोड नहीं होती।
  • बिना नुक़सान कुछ नहीं छोड़ा जाता। CSV में जो था, SQL में ठीक वही रहता है।
  • फ़ाइल आकार की सीमा हर फ़ाइल 100 MB तक, मुफ़्त, बिना खाते के।

एक बार में 100 फ़ाइलें। फ़ॉर्मेट अलग-अलग हों तो भी चलेगा।

आपका डेटाबेस CSV पहले ही पढ़ सकता है, और अक्सर उसे ही पढ़ना चाहिए

यह पहले कहना ज़रूरी है, क्योंकि इस रूपांतरण को खोजने वालों में से बहुतों को इसकी ज़रूरत नहीं। Postgres के पास COPY है, MySQL के पास LOAD DATA INFILE, SQLite के पास .import — और हर एक delimited फ़ाइल सीधे पढ़ता है और block में लिखता है। कुछ हज़ार पंक्तियों से ऊपर वह रास्ता आराम से जीतता है।

इस रूपांतरण को सही चुनाव बनाती है एक बाध्यता, पसंद नहीं। Bulk loader को फ़ाइल सर्वर की पहुँच में चाहिए, और अक्सर कोई अनुमति जो account के पास नहीं। अगर आपके पास सिर्फ़ एक query window है, तो statement ही इस्तेमाल में लाने लायक़ मुद्रा हैं।

सिर्फ़ पंक्तियाँ, और जान-बूझकर छोड़ा गया CREATE TABLE

आउटपुट सिर्फ़ INSERT स्टेटमेंट की फ़ाइल है, एक-एक पंक्ति के लिए, टेबल नाम रखते और header row से लिए कॉलम गिनाते हुए। इससे पहले कुछ नहीं। यह चूक नहीं, इनकार है — CSV न प्रकार रिकॉर्ड करता है, न लंबाई, न keys, इसलिए बनाई गई schema अनुमानों का समूह होगी।

ग़लत अनुमान की क़ीमत असमान है। ग़लत पंक्ति एक ग़लत record है और delete उसे ठीक कर देता है। नमूने की सबसे लंबी value से अनुमानित VARCHAR(50) दो साल तक पते काटता रहता है, बिना किसी के ध्यान में आए।

फ़ाइलनाम हर स्टेटमेंट में टेबल नाम बनता है

CSV का नाम, बिना एक्सटेंशन के, टेबल के रूप में इस्तेमाल होता है। रास्ते में इसे साफ़ किया जाता है — अक्षर, अंक और underscore के बाहर कुछ भी underscore बन जाता है, और अंक से शुरू होने वाले नाम के आगे एक underscore जुड़ जाता है।

यही साफ़-सफ़ाई header row से लिए कॉलम नाम पर भी लागू होती है, जो चौंकाने की ज़्यादा संभावना रखता है। `Order total (£)` जैसा header `Order_total____` बन जाता है और आपकी टेबल में किसी से मेल नहीं खाएगा। CSV में header को ठीक करना और फ़ाइल का नाम लक्ष्य टेबल जैसा रखना बेहतर है।

Type inference तय करता है कौन-सी value quote होती है

यही है वह जगह जहाँ CSV को स्प्रेडशीट से बदलने में फ़र्क़ पड़ता है, और यही सबसे ज़्यादा ग़लत होने वाली चीज़ है। स्प्रेडशीट सेल जानता है वह टेक्स्ट है या संख्या। CSV field सिर्फ़ अक्षर हैं, इसलिए parser अंदाज़ा लगाता है।

व्यावहारिक नतीजा है कि identifier कॉलम अपने quotes और padding दोनों खो देते हैं। 01234 का postcode `1234` बनकर बिना quote के लिखा जाता है। identifier कॉलम को quote करके या non-numeric prefix के साथ export कीजिए, या बनी फ़ाइल में जाँच लीजिए।

ख़ाली CSV field NULL के रूप में लिखी जाती है

दो delimiter के बीच का ख़ाली space NULL keyword बन जाता है, ख़ाली स्ट्रिंग नहीं। यह किसी export में गैप की लगभग हमेशा सही पढ़ाई है, और यह वह पढ़ाई है जिसे NOT NULL constraint चुपचाप स्वीकार करने के बजाय ज़ोर से अस्वीकार करेगा।

जहाँ ख़ाली का असल मतलब खाली स्ट्रिंग था, फ़ाइल में यह फ़र्क़ कभी था ही नहीं और कोई कन्वर्टर इसे वापस नहीं ला सकता। अगर आपकी टेबल में एक कॉलम है जहाँ "" और NULL अलग मतलब रखते हैं, तो यह फ़र्क़ बदलने से पहले CSV में एनकोड कर लीजिए।

Escaping, और portability के लिए चुना गया रूप

संख्याएँ और boolean बिना quote लिखी जाती हैं। टेक्स्ट single quote में लिपटता है, भीतर मौजूद apostrophe दोगुना होता है — तो O'Brien, 'O''Brien' बनता है। यह ANSI परंपरा है और हर बड़ा इंजन इसे एक जैसे पढ़ता है।

Backslash escaping जान-बूझकर नहीं है। यह एक MySQL extension है जिसका व्यवहार server setting पर निर्भर करता है, इसलिए एक फ़ाइल एक सर्वर पर सही चलती है और दूसरे पर डेटा बिगाड़ सकती है।

Boolean, और एक आम इंजन जो उन्हें ठुकराता है

CSV में `true` या `false` पढ़ी value boolean के रूप में पढ़ी जाती है और bare literal TRUE या FALSE के रूप में लिखी जाती है। Postgres इसे सीधा स्वीकार करता है, MySQL इन शब्दों को 1 और 0 का alias मानता है।

SQL Server नहीं। इसका bit type 1 और 0 चाहता है, और TRUE वाला statement parse नहीं होता — यह आप चौथे सौवें statement पर देखेंगे अगर boolean कॉलम में ऊपर ख़ाली की एक लड़ी हो। अगर यही मंज़िल है, चलाने से पहले बदल लीजिए।

तारीख़ें CSV में जो भी टेक्स्ट थीं वैसे ही आती हैं

इस रूपांतरण में कुछ भी किसी तारीख़ की व्याख्या नहीं करता। `2024-03-11` लिखा field संख्या नहीं है, इसलिए यह स्ट्रिंग रहता है और quote करके लिखा जाता है, और `11/03/2024` लिखा field भी ऐसा ही करता है। यह लगता उससे बेहतर है — quote की ISO तारीख़ हर इंजन में सही insert होती है।

यही जगह है जहाँ अस्पष्टता बिना छुए यात्रा करती है। `11/03/2024` किसका इशारा है — यह फ़ाइल नहीं बताती। जिस CSV की तारीख़ शैली आप पक्का नहीं कर सकते, उसे एक text staging कॉलम में लोड करके साफ़ तौर पर बदलिए।

एक पंक्ति एक statement, कोई transaction नहीं

Statement अलग-अलग निकलते हैं, कोई BEGIN नहीं, कोई COMMIT नहीं, कोई multi-row VALUES batching नहीं। किसी दूर के सर्वर पर जैसा है वैसा चलाना पचास हज़ार round trip और उतने ही implicit commit है।

दो लाइनें दोनों समस्याएँ ठीक करती हैं — फ़ाइल को BEGIN और COMMIT में लपेट दीजिए। फ़ाइल भी उसमें मौजूद डेटा से बड़ी है, क्योंकि हर लाइन पर कॉलम सूची दोहराई जाती है।

CSV इसी पेज पर पढ़ी जाती है, और कहीं और नहीं जाती

फ़ाइल पढ़ना और statement लिखना दोनों सादा JavaScript है जो यहाँ चलता है, इसलिए कुछ अपलोड नहीं होता। इस जोड़ी पर यह ख़ासतौर पर मायने रखता है — डेटाबेस की ओर जाती CSV आम तौर पर ग्राहक रिकॉर्ड या transaction होती है।

सीमा है पूरी टेबल एक साथ मेमोरी में रखना, जो दसियों मेगाबाइट को आराम से समेट लेती है। उससे ऊपर जवाब bulk loader है, पहले सेक्शन से, और वह वैसे भी बेहतर जवाब है।

CSV को SQL में ऐसे बदलें

  1. अपनी CSV फ़ाइल इस पेज पर छोड़ें, या चुनने के लिए दबाएँ।
  2. लक्ष्य के रूप में SQL चुनें। कन्वर्ज़न आपके ब्राउज़र में होता है और फ़ाइल अपलोड नहीं होती।
  3. तैयार SQL फ़ाइल डाउनलोड कर लें।

CSV या SQL: क्या बदलता है

CSV और SQL की तुलना
CSVSQL
पूरा नामComma-Separated ValuesSQL INSERT कमांड
फ़ाइल एक्सटेंशन.csv.sql
मीडिया टाइपtext/csvapplication/sql
पहली बार प्रकाशित19721986
विनिर्देशRFC 4180ISO/IEC 9075
लाइसेंसखुला मानकखुला मानक
आज की स्थितिमौजूदामौजूदा
ब्राउज़र में खुलता हैकोई ब्राउज़र नहींकोई ब्राउज़र नहीं
इसकी जगह विचारणीयXLSX, JSON, ParquetParquet

नतीजा खोलना

दोनों तरफ़ के प्रोग्राम अलग हैं: CSV फ़ाइल Microsoft Excel, LibreOffice Calc और pandas में खुलती है और SQL फ़ाइल PostgreSQL, MySQL और DBeaver में — यानी नतीजा जिसके पास जाएगा, उसे दूसरी सूची में से कोई प्रोग्राम चाहिए होगा।

कौन-सा फ़ॉर्मेट किस काम के लिए है

CSV 1972 में आया। यह RFC 4180 में तय किया गया है, और अगर फ़ाइल को उस औज़ार से ज़्यादा जीना है जिसने उसे लिखा, तो यह बात क़ीमती है।

SQL 1986 से चला आ रहा है, और ISO/IEC 9075 में तय किया गया है। PostgreSQL, MySQL और DBeaver इस फ़ॉर्मेट को पढ़ लेते है।

CSV से SQL: आम सवाल

क्या मेरी CSV फ़ाइल कहीं अपलोड होती है?

नहीं। यह कन्वर्ज़न पूरी तरह आपके ब्राउज़र में होता है, इसलिए फ़ाइल आपके डिवाइस से बाहर नहीं जाती। आप ख़ुद जाँच सकते हैं: डेवलपर टूल्स का नेटवर्क टैब खोलिए और कुछ बदल कर देखिए। आपको पेज ख़ुद दिखेगा और आँकड़ों तथा विज्ञापन के वे अनुरोध दिखेंगे जिनसे इस सेवा का ख़र्च निकलता है — और एक भी ऐसा अनुरोध नहीं जो आपकी फ़ाइल साथ ले जा रहा हो।

क्या CSV को SQL में बदलना मुफ़्त है?

हाँ। न खाता, न वॉटरमार्क, और न कोई रोज़ का कोटा जो ख़त्म हो: यह आपकी अपनी मशीन पर चलता है, इसलिए आप जितनी बार चाहें लौट सकते हैं। ब्राउज़र 100 MB तक की फ़ाइलें सँभालता है, एक बार में 100।

CSV को SQL में बदलने पर क्या गुणवत्ता जाती है?

नहीं। SQL वही सामग्री बिना कुछ फेंके सँभालता है: नतीजा गुणवत्ता में असली फ़ाइल जैसा ही होता है।

SQL फ़ाइल खोलने के लिए क्या मुझे कुछ इंस्टॉल करना होगा?

कन्वर्ज़न के लिए नहीं: वह उसी ब्राउज़र में होता है जो आपने पहले से खोल रखा है। नतीजा खोलने के लिए उसके बाद वही प्रोग्राम चाहिए जिससे आपका डिवाइस SQL Insert Statements आम तौर पर दिखाता है।

इन फ़ॉर्मेट के बारे में और