भार infile कमांड का उपयोग कर तालिका में विशाल डेटा लोड करने के बारे में

एक तालिका में अल्पविराम से अलग txt फ़ाइल लोड करते समय मुझे समस्या हो रही है। फाइल बहुत बड़ी है। इसका आकार 2 जीबी है और इसमें 65 कॉलम और 34 लाख पंक्तियां हैं। मैंने इस फ़ाइल को लोड करने के लिए सेटिंग का पालन किया:

  • क्वेरी-लोड डेटा में स्थानीय फ़ाइल फ़ाइल नाम 'तालिका' द्वारा समाप्त '' 'द्वारा समाप्त की गई लाइनें, \' \ '' IGNORE 1 LINES;

और फ़ाइल my.ini में मैंने निम्नलिखित चर जोड़े

  • [mysqld] max_allowed_packet = 60M
  • [myisamchk] key_buffer_size = 512M myisam_max_sort_file_size = 3 जी

मैं MySQL के लिए नया हूँ। क्या कोई मुझे इस फ़ाइल को लोड करने में मदद कर सकता है। जब मैं क्वेरी से ऊपर चला जाता हूं तो मुझे परिणाम 4-5 बार मिलता है।

Query OK,0 rows affected(25.09 sec)
Records:0 Deleted:0 Skipped:0 Warnings:0
0
जोड़ा संपादित
विचारों: 1

4 उत्तर

स्थानीय कीवर्ड का उपयोग न करने का प्रयास करें, यदि यह आपकी समस्या का समाधान नहीं करता है, तो टेक्स्ट फ़ाइल की कुछ पहली पंक्तियां पोस्ट करें ताकि हम देख सकें कि पैरामीटर में निर्दिष्ट पैटर्न से मेल नहीं खाए जाने के लिए सभी लाइनों को अनदेखा किया जा रहा है या नहीं।

Update 1: Now I see you are using the '\r\n' terminator in

LINES TERMINATED BY '\r\n'

क्या आपने केवल '\ n' का उपयोग करने के लिए इस पंक्ति को संशोधित करने का प्रयास किया है:

LINES TERMINATED BY '\n'

?

Update 2: Try specify the table columns in LOAD DATA command;

LOAD DATA INFILE filename
INTO TABLE tablename
FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'(
`tableColumn1` , `tableColumn2`, ..., `tableColumn65`
)

संभवतः फ़ाइल और तालिका के कॉलम की संख्या मेल नहीं खा रही है, या फ़ाइल कॉलम तालिका कॉलम के उसी क्रम में नहीं हैं।

1
जोड़ा
जेफरसन ओलिविरा को: जब मैं स्रोत फ़ाइल से 10000-15000 पंक्तियों को एक नई पाठ फ़ाइल में कॉपी करता हूं और उपरोक्त आदेश का उपयोग करता हूं तो यह मेरे मित्र को बिना किसी त्रुटि के उन मूल्यों को सम्मिलित करता है।
जोड़ा लेखक Shrikant, स्रोत
और yippe मैंने कोशिश की है लाइनों द्वारा नियंत्रित '\ n' भी
जोड़ा लेखक Shrikant, स्रोत
क्या आपने स्थानीय कीवर्ड का उपयोग किये बिना कोशिश की है? आप किस MySQL सर्वर संस्करण का उपयोग कर रहे हैं? विंडोज या लिनक्स सर्वर? क्या आप हमें एक वास्तविक "फ़ाइल नाम" दिखा सकते हैं? विंडोज सर्वर पर कुछ फ़ाइल नामों में समस्याएं हैं।
जोड़ा लेखक jfoliveira, स्रोत

बाहरी उलिल का प्रयोग करें

mysqlimport --ignore-lines=1 --fields-optionally-enclosed-by="\"" --fields-terminated-by=, --lines-terminated-by="\r\n" --user=YOUR_USERNAME --password YOUR_DATABASE tablename.txt
1
जोड़ा
Mysqlimport tablename को फायर करने के बाद मुझे यह मिल गया: रिकॉर्ड्स: 0 हटाया गया: 0 छोड़ा गया: 0 चेतावनी: 0
जोड़ा लेखक Shrikant, स्रोत
धन्यवाद मौत और ट्राइकलोसन का पीछा .. यह मुद्दा एक अवरोधक है कृपया मेरी मदद करें।
जोड़ा लेखक Shrikant, स्रोत

मुझे अपने प्रश्न का उत्तर मिला।

1.I gslipts सॉफ़्टवेयर के साथ मेरी फ़ाइल को विभाजित किया और प्रत्येक नई बनाई गई फ़ाइल के अनुसार बदल दिया।

2. उसके बाद मैंने इन फ़ाइलों को एक्सेल स्वरूपित में आधे घंटे के लिए सही ढंग से खोला और फिर प्रत्येक विभाजन ( बनाई गई सीएसवी फ़ाइल और निकाल दिया गया लोड डेटा कमांड

0
जोड़ा

जब आपका INFILE विशाल होता है, तो max_allowed_packet को 5.6 के लिए रिफमान में इस लिंक के अधिकतम 1 जी को समायोजित करने के लिए समायोजित किया जाना चाहिए। https://dev.mysql.com/ डॉक/RefMan/5.6/hi/सर्वर-प्रणाली-variables.html # sysvar_max_allowed_packet  तैयारी 'सत्र' एसईटी local_infile = 1 के लिए शामिल हो सकती है; एसईटी max_allowed_packet = 1073741824 (संभावित रूप से अधिक विकल्प आवश्यक) लोड डेटा इन्फ्लू फ़ाइल नाम से पहले टेबल टैबलेट ..... फ़ाइल नाम को पूर्ण पथ यानी आवश्यकता हो सकती है। C: \ फ़ोल्डर \ सबफ़ोल्डर \ myfilename.ext

आपके .ini/.cfg में 1 जी तक max_allowed_packet को बदलने से आपके दैनिक संचालन में अप्रत्याशित स्मृति तनाव हो सकता है। इस सत्र की अवधि के लिए इस 1 जी आवश्यकता को कवर करने के लिए अपने सत्र चर का प्रयोग करें। यदि आपके पास इस उद्देश्य के लिए 1 जी स्मृति उपलब्ध नहीं है, तो आप वैसे भी सफल नहीं हो सकते हैं।

0
जोड़ा