CSS फ़ाइल को MySQL तालिका में कैसे आयात करें


Answers

डेटाबेस में तालिका लोड करने के लिए mysqlimport का उपयोग करें:

mysqlimport --ignore-lines=1 \
            --fields-terminated-by=, \
            --local -u root \
            -p Database \
             TableName.csv

मैंने इसे http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/ पर पाया

डिलीमीटर को एक टैब बनाने के लिए, --fields-terminated-by='\t'

Question

मेरे पास एक असामान्य घटनाएं हैं- एक क्लाइंट से डायरी सीएसवी जो कि मैं एक MySQL तालिका में लोड करने की कोशिश कर रहा हूं ताकि मैं एक सेन प्रारूप में दोबारा प्रतिक्रिया कर सकूं। मैंने 'CSVImport' नामक एक टेबल बनाई है जिसमें CSV फ़ाइल के प्रत्येक कॉलम के लिए एक फ़ील्ड है। सीएसवी में 99 कॉलम हैं, इसलिए यह अपने आप में एक कठिन कार्य था:

CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);

तालिका में कोई बाधा नहीं है, और सभी फ़ील्ड VARCHAR (256) मान रखते हैं, जिसमें कॉलम (आईएनटी द्वारा प्रतिनिधित्व), हां / नहीं (बीआईटी द्वारा प्रतिनिधित्व), कीमतें (DECIMAL द्वारा प्रतिनिधित्व), और टेक्स्ट ब्लर्ब्स ( टेक्स्ट द्वारा प्रतिनिधित्व)।

मैंने फ़ाइल में डेटा लोड करने का प्रयास किया:

LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023  Deleted: 0  Skipped: 0  Warnings: 198256
SELECT * FROM CSVImport;
| NULL             | NULL        | NULL           | NULL | NULL               | 
...

पूरी तालिका NULL से भरा NULL

मुझे लगता है कि समस्या यह है कि टेक्स्ट ब्लर्ब्स में एक से अधिक पंक्तियां होती हैं, और MySQL फ़ाइल को पार्स कर रहा है जैसे कि प्रत्येक नई लाइन एक डाटाबेस पंक्ति से मेल खाती है। मैं फ़ाइल को ओपनऑफिस में बिना किसी समस्या के लोड कर सकता हूं।

Clientdata.csv फ़ाइल में 25 9 3 लाइनें और 570 रिकॉर्ड हैं। पहली पंक्ति में कॉलम नाम हैं। मुझे लगता है कि यह अल्पविराम सीमित है, और पाठ को डबलक्वाइट के साथ स्पष्ट रूप से सीमित किया गया है।

अद्यतन करें:

संदेह में, मैन्युअल पढ़ें: http://dev.mysql.com/doc/refman/5.0/en/load-data.html

मैंने LOAD DATA स्टेटमेंट में कुछ जानकारी दी है कि ओपनऑफिस अनुमान लगाने के लिए पर्याप्त स्मार्ट था, और अब यह रिकॉर्ड्स की सही संख्या लोड करता है:

LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

लेकिन अभी भी बहुत सारे पूर्ण रिकॉर्ड हैं, और लोड किए गए डेटा में से कोई भी सही जगह पर नहीं लगता है।




मुझे पता है कि सवाल पुराना है , लेकिन मैं इसे साझा करना चाहता हूं

मैंने 0.046sec में 100K से अधिक रिकॉर्ड ( ~ 5MB ) आयात करने के लिए इस विधि का उपयोग किया

यहां बताया गया है कि आप इसे कैसे करते हैं:

LOAD DATA LOCAL INFILE  
'c:/temp/some-file.csv'
INTO TABLE your_awesome_table  
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(field_1,field_2 , field_3);

अंतिम पंक्ति को शामिल करना बहुत महत्वपूर्ण है, यदि आपके पास एक से अधिक फ़ील्ड हैं यानी सामान्यतः यह अंतिम फ़ील्ड छोड़ देता है (MySQL 5.6.17)

LINES TERMINATED BY '\n'
(field_1,field_2 , field_3);

फिर, मान लें कि आपके पास अपने फ़ील्ड के शीर्षक के रूप में पहली पंक्ति है , तो आप इस लाइन को भी शामिल करना चाहेंगे

IGNORE 1 ROWS

ऐसा लगता है कि आपकी फ़ाइल में हेडर पंक्ति है या नहीं।

LOAD DATA LOCAL INFILE  
'c:/temp/some-file.csv'
INTO TABLE your_awesome_table  
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(field_1,field_2 , field_3);



Mysql डेटाबेस में आयात csv फ़ाइल के लिए PHP क्वेरी

$query = <<<EOF
            LOAD DATA LOCAL INFILE '$file'
             INTO TABLE users
             FIELDS TERMINATED BY ','
             LINES TERMINATED BY '\n'
             IGNORE 1 LINES
            (name,mobile,email)
    EOF;
if (!$result = mysqli_query($this->db, $query))
   {
        exit(mysqli_error($this->db));
   }

** नमूना सीएसवी फ़ाइल डेटा **

name,mobile,email
Christopher Gritton,570-686-3439,ChristopherKGritton@inbound.plus
Brandon Wilson,541-309-5149,BrandonMWilson@inbound.plus
Craig White,516-795-8065,CraigJWhite@inbound.plus
David Whitney,713-214-3966,DavidCWhitney@inbound.plus



आप लोड डेटा स्टेटमेंट में कॉलम सूचीबद्ध करके इसे ठीक कर सकते हैं। manual :

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);

... इसलिए आपके मामले में आपको उस क्रम में 99 कॉलम सूचीबद्ध करने की आवश्यकता है जिसमें वे सीएसवी फ़ाइल में दिखाई देते हैं।




यदि आप एक्सेल स्प्रेडशीट के साथ एक विंडोज मशीन का उपयोग कर रहे हैं, तो Excel में नया mySql प्लगइन असाधारण है। ओरेकल के लोगों ने वास्तव में उस सॉफ्टवेयर पर एक अच्छा काम किया। आप Excel से सीधे डेटाबेस कनेक्शन बना सकते हैं। वह प्लगइन आपके डेटा का विश्लेषण करेगा, और डेटा के अनुरूप प्रारूप में आपके लिए टेबल सेट करेगा। मेरे पास कनवर्ट करने के लिए डेटा की कुछ राक्षस बड़ी सीएसवी फाइलें थीं। यह उपकरण एक बड़ा समय बचाने वाला था।

http://dev.mysql.com/downloads/windows/excel/

आप एक्सेल के भीतर से अपडेट कर सकते हैं जो डेटाबेस को ऑनलाइन पॉप्युलेट करेगा। यह अल्ट्रा सस्ती गोडाडी साझा होस्टिंग पर बनाई गई MySQL फ़ाइलों के साथ बहुत अच्छी तरह से काम किया। (ध्यान दें जब आप गोडाडी में टेबल बनाते हैं, तो आपको डेटाबेस की साइट एक्सेस को सक्षम करने के लिए कुछ ऑफ-स्टैंडर्ड सेटिंग्स चुननी होंगी ...)

इस प्लगइन के साथ आपके एक्सएल स्प्रेडशीट और ऑनलाइन mySql डेटा स्टोरेज के बीच शुद्ध अंतःक्रियाशीलता है।




आप अपने सीएसवी के आधार पर एसक्यूएल बनाने / सम्मिलित कथन उत्पन्न करने के लिए इस ऑनलाइन टूल को भी आजमा सकते हैं। http://www.convertcsvtomysql.com/

मुझे इस उपकरण के बारे में क्या पसंद है:

  • सरल
  • यह न केवल INSERT कथन उत्पन्न करता है, बल्कि एक तालिका उत्पन्न करने के लिए बयान भी बनाता है
  • CREATE स्टेटमेंट जेनरेट करते समय, यह टूल न केवल सभी फ़ील्ड VARCHAR बनाता है - यह आपके सीएसवी में डेटा का विश्लेषण करता है, और उस विश्लेषण के आधार पर, यह उचित डेटा प्रकार चुनता है।

नुकसान

  • इनपुट फ़ाइल का आकार 3 एमबी तक सीमित है
  • हो सकता है कि आप अपने डेटा को किसी तीसरे पक्ष को देने को तैयार न हों



Links