MYSQL LOAD DATA INFILE का उपयोग करके सीएसवी से डेटा आयात करता है


106

मैं एक CSV फ़ाइल से 20000 पंक्तियों के कुछ डेटा को आयात कर रहा हूँ।

CSV में कॉलम MySQL टेबल के कॉलम की तुलना में एक अलग क्रम में हैं। स्वचालित रूप से मैसकल टेबल कॉलम के अनुरूप कॉलम कैसे असाइन करें?

जब मैं अमल करता हूं

LOAD DATA INFILE'abc.csv' INTO TABLE abc

यह क्वेरी सभी डेटा को पहले कॉलम में जोड़ती है।

कृपया डेटा आयात करने के लिए मैसूर को ऑटो सिंटैक्स सुझाएं


वहाँ में एक समान विषय है stackoverflow.com/questions/11077801/import-csv-to-mysql-table/...
marciomolusco

यह मेरे लिए हुआ, मुझे पता चला है कि पाठ फ़ाइल द्वारा समाप्त लाइनों के साथ '\ r' लिखा गया था और मैं डेटा लाइनों की उम्मीद कर समाप्त करने का आयात करने के लिए '\ n' का उपयोग कर कोशिश कर रहा था
जानवरों का शिक्षक

2
मैंने एक्सेल में एक सिंटैक्स जनरेटर टूल के साथ सीएसवी डेटा को mysql में लोड करने के लिए व्यापक ट्यूटोरियल लिखा । यह पाठकों के लिए उपयोगी होना चाहिए।
mysql_user

जवाबों:


169

टेबल में csv फ़ाइल आयात करने के लिए आप LOAD DATA INFILE कमांड का उपयोग कर सकते हैं ।

इस लिंक को देखें MySQL - LOAD DATA INFILE

LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE abc
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(col1, col2, col3, col4, col5...);

MySQL 8.0 उपयोगकर्ताओं के लिए:

का उपयोग करते हुए LOCALकीवर्ड पकड़ सुरक्षा जोखिम और MySQL 8.0 के रूप में LOCALक्षमता के लिए निर्धारित है Falseडिफ़ॉल्ट रूप से। आप त्रुटि देख सकते हैं:

त्रुटि 1148: इस MySQL संस्करण के साथ प्रयुक्त कमांड की अनुमति नहीं है

आप डॉक्स में दिए गए निर्देशों का पालन करके इसे ओवरराइट कर सकते हैं । इस बात से सावधान रहें कि इस तरह के ओवरराइट सुरक्षा के मुद्दे को हल नहीं करते हैं, बल्कि सिर्फ एक स्वीकार करते हैं कि आप जागरूक हैं और जोखिम लेने के लिए तैयार हैं।


1
क्या मुझे पता है कि IGNORE 1 LINESयहाँ वास्तव में क्या होता है? अग्रिम में धन्यवाद।
कौशिक दास

5
@ कौशिकदास यह पहली पंक्ति को नजरअंदाज करेगा जो स्तंभ नामों को परिभाषित करती है
सहर्ष शाह

28
सावधानी: LINES TERMINATED BY '\ r \ n' खंड विंडोज़ फाइलों के लिए काम करता है, लेकिन लिनक्स फाइलों में '\ n' ही होना चाहिए।
23 अक्टूबर को ChuckCottrill

1
आगे के स्लैश का उपयोग करने के लिए याद रखना महत्वपूर्ण है: stackoverflow.com/a/42878067/470749
रयान

3
बस ध्यान दें कि (col1, col2, col3 ....) की आवश्यकता नहीं है। उपयोगी यदि आप डेटा डालने के लिए उपयोग करने से पहले मक्खी पर एक तालिका बना रहे हैं।
कीरन क्विन

51

आपको शायद FIELDS TERMINATED BY ','या जो भी परिसीमन होना है, उसे सेट करने की आवश्यकता है।

CSV फ़ाइल के लिए, आपका कथन इस तरह दिखना चाहिए:

LOAD DATA INFILE 'data.csv' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

1
लोड डेटा लोकल इंस्क्राइबर ... लॉकल के बिना इसे एक्सेस नहीं किया गया।
केतंक

49

फ़ाइल आयात करने से पहले, आपको निम्न तैयार करने की आवश्यकता होगी:

  • एक डेटाबेस तालिका जिसमें फ़ाइल से डेटा आयात किया जाएगा।
  • डेटा के साथ एक CSV फ़ाइल जो तालिका के स्तंभों की संख्या और प्रत्येक स्तंभ में डेटा के प्रकार से मेल खाती है।
  • खाता, जो MySQL डेटाबेस सर्वर से जुड़ता है, में FILE और INSERT विशेषाधिकार हैं।

मान लें कि हमारे पास निम्नलिखित तालिका है:

यहां छवि विवरण दर्ज करें

बनाने के लिए स्थायी उपयोग की तारीख:

CREATE TABLE IF NOT EXISTS `survey` (
  `projectId` bigint(20) NOT NULL,
  `surveyId` bigint(20) NOT NULL,
  `views` bigint(20) NOT NULL,
  `dateTime` datetime NOT NULL
);

आपका CSV फ़ाइल पूरी तरह से जारी किए गए उदाहरण के लिए पूरी तरह से तैयार होना चाहिए:

यहां छवि विवरण दर्ज करें

अगर हर बात ठीक है .. तो कृपया CSV से लोड डेटा के लिए क्वेरी का पालन करें:

नोट: कृपया अपनी CSV फ़ाइल का पूर्ण पथ जोड़ें

LOAD DATA INFILE '/var/www/csv/data.csv' 
INTO TABLE survey 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

अगर सब कुछ किया है। आपने सफलतापूर्वक CSV से तालिका में डेटा निर्यात किया है


यदि CSV फ़ाइल में प्रत्येक कॉलम के लिए उचित डेटाटाइप है, तो हम इसे कैसे मान्य कर सकते हैं क्योंकि डिफ़ॉल्ट रूप से यह अमान्य डेटाटाइप को अनदेखा करता है।
उमर अब्बास '

2
इतने पुराने उत्तर पर विचलित करने के लिए क्षमा करें। यह बहुत ठोस है लेकिन मैं कुछ क्षेत्र कैसे छोड़ सकता हूं। मान लीजिए कि मेरी तालिका में प्रोजेक्टआईडी, सर्वेआईड और डेटटाइम है, मैं "विचार" क्षेत्र को कैसे छोड़ सकता हूं?
दानिश अंसारी

@MD डेनिश अंसारी, एक पुराने प्रश्न का उत्तर देने के लिए क्षमा करें, लेकिन आप तालिका कॉलम निर्दिष्ट कर सकते हैं। मैंने निम्नलिखित कार्य किया, जहां मुझे पहले फ़ील्ड (एक ऑटोइन्क्रिमेंट प्राइमरी की) को छोड़ने की आवश्यकता है, साथ ही कुछ अन्य फ़ील्ड: LOAD डेटा लॉकल इनरलाइन C: \\ xampp \\ htdocs \\ \ _piles \\ 2018-10_statistics। CSv 'INTO TABLE my_log_tbl FIELDS TERMINATED BY', 'ENCLOSED BY' "" LINES TERMINATED BY '\ r \ n' (UserId, CustomerId, Institutiondd, ApplicationId, FullURL, AccessTimeStamp, IPaddress); तालिका का नाम, लेकिन यह काम नहीं किया। वे अंत में दिखाई देनी चाहिए।
कलिनमा

17

वाक्य - विन्यास:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL]
INFILE 'file_name' INTO TABLE `tbl_name`
CHARACTER SET [CHARACTER SET charset_name]
FIELDS [{FIELDS | COLUMNS}[TERMINATED BY 'string']] 
[LINES[TERMINATED BY 'string']] 
[IGNORE number {LINES | ROWS}]

इस उदाहरण को देखें:

LOAD DATA LOCAL INFILE
'E:\\wamp\\tmp\\customer.csv' INTO TABLE `customer`
CHARACTER SET 'utf8'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

10

डेटाबेस में 1 मिनट में 7000000 से अधिक रिकॉर्ड डालें (गणना के साथ सुपरफास्ट क्वेरी)

mysqli_query($cons, '
    LOAD DATA LOCAL INFILE "'.$file.'"
    INTO TABLE tablename
    FIELDS TERMINATED by \',\'
    LINES TERMINATED BY \'\n\'
    IGNORE 1 LINES
    (isbn10,isbn13,price,discount,free_stock,report,report_date)
     SET RRP = IF(discount = 0.00,price-price * 45/100,IF(discount = 0.01,price,IF(discount != 0.00,price-price * discount/100,@RRP))),
         RRP_nl = RRP * 1.44 + 8,
         RRP_bl = RRP * 1.44 + 8,
         ID = NULL
    ');
$affected = (int) (mysqli_affected_rows($cons))-1; 
$log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');

RRP और RRP_nl और RRP_bl csv में नहीं है, लेकिन हमारी गणना है कि और डालने के बाद।


2

यदि आप LOAD DATA LOCAL INFILEविंडोज़ शेल से भाग रहे हैं , और आपको उपयोग करने की आवश्यकता है OPTIONALLY ENCLOSED BY '"', तो आपको ठीक से वर्णों से बचने के लिए ऐसा कुछ करना होगा:

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql" -u root --password=%password% -e "LOAD DATA LOCAL INFILE '!file!' INTO TABLE !table! FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"^""' LINES TERMINATED BY '\n' IGNORE 1 LINES" --verbose --show-warnings > mysql_!fname!.out

2

मान लीजिए कि आप xampp और phpmyadmin का उपयोग कर रहे हैं

आपके पास फ़ाइल का नाम 'Rating.txt' तालिका का नाम 'रेटिंग' और डेटाबेस का नाम 'फिल्में' है

यदि आपका xampp "C: \ xampp \" में स्थापित है

"C: \ xampp \ mysql \ data \ Movies" फ़ोल्डर में अपनी "Rating.txt" फ़ाइल की प्रतिलिपि बनाएँ

LOAD DATA INFILE 'ratings.txt' INTO TABLE ratings FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;

आशा है कि यदि आप लोकलहोस्ट पर ऐसा कर रहे हैं तो यह आपकी त्रुटि को दूर करने में आपकी मदद कर सकता है


0

आप एक सीएसवी या पाठ फ़ाइल से डेटा लोड कर सकते हैं। यदि आपके पास तालिका से रिकॉर्ड के साथ एक पाठ फ़ाइल है, तो आप उन रिकॉर्डों को तालिका के भीतर लोड कर सकते हैं। उदाहरण के लिए यदि आपके पास एक पाठ फ़ाइल है, जहां प्रत्येक पंक्ति प्रत्येक कॉलम के मानों के साथ एक रिकॉर्ड है, तो आप इस तरह से रिकॉर्ड लोड कर सकते हैं।

table.sql

id //field 1

name //field2

table.txt

1,peter

2,daniel

...

- खिड़कियों पर नमूना

LOAD DATA LOCAL INFILE 'C:\\directory_example\\table.txt'
INTO TABLE Table
CHARACTER SET UTF8
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'; 

0

मुझे त्रुटि कोड मिल रहा था: 1290. MySQL सर्वर --secure-file-private विकल्प के साथ चल रहा है, इसलिए यह इस कथन को स्वीकार नहीं कर सकता

यह मेरे लिए विंडोज 8.1 64 बिट पर wampserver 3.0.6 64bit का उपयोग करके काम किया।

C: \ wamp64 \ bin \ mysql \ mysql5.7.14 से my.ini फ़ाइल संपादित की गई

प्रविष्टि सुरक्षित करें_फ़िले_प्राइव c: \ wamp64 \ tmp \ (या जो कुछ भी आपके यहाँ है उसे हटाएं)

सब कुछ बंद कर दिया -Mit आदि - और सब कुछ पुनः आरंभ; फिर C: \ wamp64 \ bin \ mysql \ mysql5.7.14 \4 \ data \ u242349266_recur (मेरा अंतिम नाम मेरा डेटाबेस नाम है) पर मेरी cvs फ़ाइल को पॉंट करें

निष्पादित किए गए लोड डेटा इनरवेयर 'myfile.csv'

TO पूर्व छात्रों में

FIELDS द्वारा लिखित, '

इसके द्वारा संलग्न '"'

LINES '\ r \ n' द्वारा लिखित

IGNORE 1 लाइन

... और VOILA !!!


0

आप इस तरह डालने की कोशिश कर सकते हैं:

LOAD DATA INFILE '/tmp/filename.csv' replace INTO TABLE [table name] FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (field1,field2,field3);

0

इन दिनों तक (2019 के अंत तक) मैं http://www.convertcsv.com/csv-to-sql.htm जैसे टूल का उपयोग करना पसंद करता हूं। आपको बहुत सी पंक्तियां मिलीं जिन्हें आप csv से आने पर उपयोगकर्ता की गलतियों से बचाने वाले विभाजन को चला सकते हैं। एक अंतिम उपयोगकर्ता स्प्रेडशीट।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.