2010-01-26 14 views
48

मुझे 11 कॉलम के साथ एक CSV फ़ाइल मिली है और मेरे पास 9 कॉलम के साथ एक MySQL तालिका है।लोड डेटा INFILE का उपयोग कर MySQL तालिका में आयात करते समय CSV फ़ाइल में कॉलम को कैसे छोड़ें?

CSV फ़ाइल लगता है:

col1, col2, col3, col4, col5, col6, col7, col8, col9 

मैं सीएसवी के 1-8 के पहले 8 कॉलम के लिए सीधे फाइल कॉलम मैप करने की आवश्यकता: MySQL तालिका

col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11 

और की तरह दिखता है MySQL तालिका। मुझे फिर CSV फ़ाइल में अगले दो कॉलम छोड़ने की आवश्यकता है और फिर CSV फ़ाइल के कॉलम 11 को MySQL तालिका के कॉलम 9 पर मैप करें।

फिलहाल मैं निम्नलिखित एसक्यूएल आदेश का उपयोग कर रहा हूँ:

LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '' 
LINES TERMINATED BY '\n' 

लेकिन इसके बाद के संस्करण कोड सीएसवी के पहले 9 कॉलम MySQL तालिका में 9 कॉलम के लिए दायर करें।

+0

यह मदद कर सकता है: http://stackoverflow.com/questions/22988337/csv-file- skip-column-in-import-db/22988896 # 22988896 –

उत्तर

70

From Mysql docs:

तुम भी एक उपयोगकर्ता चर को यह बताए और द्वारा एक इनपुट मूल्य त्यागने एक मेज स्तंभ के लिए चर बताए नहीं कर सकते हैं:

LOAD DATA INFILE 'file.txt' 
INTO TABLE t1 (column1, @dummy, column2, @dummy, column3); 
+9

FYI: मुझे अपने उदाहरण एसक्यूएल के अंत में '(कॉलम 1, @ डमी, कॉलम 2 ... 'फ़ील्ड कथन जोड़ना पड़ा। प्रारंभ में मैंने इसे सीधे जोड़ा था उपरोक्त उदाहरण के रूप में तालिका का नाम दिखाया गया है लेकिन मुझे एक MySQL त्रुटि मिल रही है। – Camsoft

+0

क्या कोई मुझे बता सकता है कि मैं @dummy – deemi

+0

को कैसे अनदेखा कर सकता हूं संपादित करें 'कम से कम' फ़ील्ड ',' से बचने के लिए "पंक्ति 1 में सभी कॉलम के लिए डेटा नहीं है" –

4

चरण 1 पर। अजीब के साथ सौदा।

cat file.txt |awk '{print $1,$2,$5...}'>new_file.txt 

mysql में step2.load। नीचे

load data local infile 'new_file' into table t1(...) 

विधि सरल है, लेकिन mysql के निचले संस्करण में अनुमति नहीं है।

LOAD DATA INFILE 'file.txt' 
INTO TABLE t1 (column1, @dummy, column2, @dummy, column3); 
+0

मुझे कई उपकरणों को एक साथ जोड़ने की सुंदरता दिखाने में अजीब के उपयोग को पसंद है। – Paul

+0

क्या कोई मुझे बता सकता है कि मैं @ डमी को कैसे नजरअंदाज कर सकता हूं – deemi

0

@deemi:

@dummy की अनदेखी करने के लिए एक ही रास्ता AUTO INCREMENT के लिए क्षेत्र के डिफ़ॉल्ट सेटिंग के द्वारा है। तो तुम इस तरह क्षेत्र और बस कोड को छोड़ सकते हैं,

LOAD DATA INFILE 'file.txt' 
INTO TABLE t1 (column2, column3, column4, column5); 

// मानता है कि FIELDNAME column1 डिफ़ॉल्ट रूप से AUTO INCREMENT को तैयार है।

0

मुझे लगता है कि कोड में एक और बदलाव नहीं आया है:

निम्नलिखित एसक्यूएल आदेश:

LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '' 
LINES TERMINATED BY '\n' 

शायद एक डेटा काट-छांट त्रुटि हो -will।

तो यह LINES TERMINATED BY '\n'

के बजाय LINES TERMINATED BY '\r\n' उपयोग करने के लिए बेहतर है अतः कोड होगा:

LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '' 
LINES TERMINATED BY '\r\n' 
संबंधित मुद्दे