हेडर के साथ एक CSV फ़ाइल से एक तालिका बनाएँ


12

मैं एक नई MySQL तालिका बनाने के लिए पूरी तरह से एक निर्दिष्ट CSV की सामग्री के आधार पर रास्ता खोजने की कोशिश कर रहा हूं। मैं जिन CSV फ़ाइलों का उपयोग कर रहा हूँ उनमें निम्नलिखित गुण हैं;

  • "|" सीमांकित।
  • पहली पंक्ति कॉलम नामों (हेडर) को निर्दिष्ट करती है, "" | सीमांकित।
  • कॉलम के नाम और क्रम तय नहीं हैं।
  • स्तंभों की संख्या निश्चित नहीं है।
  • फाइलें एक बड़े आकार की होती हैं (1 मिलिट्री रो / 50 कॉलम)।

एक्सेल में यह सब बल्कि सरल है, हालांकि MySQL के साथ ऐसा प्रतीत नहीं होता (Google के साथ कोई भाग्य नहीं)। मुझे क्या देखना चाहिए पर कोई सुझाव?

जवाबों:


10

आप csvsql का उपयोग कर सकते हैं , जो csvkit(CSV फ़ाइलों के साथ कनवर्ट करने और काम करने के लिए उपयोगिताओं का एक सूट) का हिस्सा है:

  • लिनक्स या मैक ओएस एक्स
  • स्वतंत्र और खुला स्रोत
  • sudo pip install csvkit
  • उदाहरण: csvsql --dialect mysql --snifflimit 100000 datatwithheaders.csv > mytabledef.sql
  • यह CREATE TABLEफ़ाइल सामग्री के आधार पर एक स्टेटमेंट बनाता है। कॉलम नाम CSV फ़ाइल की पहली पंक्ति से लिए गए हैं।

2

यदि आप पायथन का उपयोग करने के साथ ठीक हैं, तो पंडों ने मेरे लिए बहुत अच्छा काम किया (csvsql हमेशा के लिए लटका दिया गया और आपके मामले में कम कॉल और पंक्तियों)। कुछ इस तरह:

from sqlalchemy import create_engine
import pandas as pd

df = pd.read_csv('/PATH/TO/FILE.csv', sep='|')
# Optional, set your indexes to get Primary Keys
df = df.set_index(['COL A', 'COL B'])

engine = create_engine('mysql://user:pass@host/db', echo=False)

df.to_sql(table_name, engine, index=False)

आप कहां परिभाषित करते हैं dwh_engine? क्या यह एक टाइपो है और आपका मतलब है engine?
जोनलो

हाँ यह होना चाहिए engine! जवाब देने के लिए धन्यवाद को सही किया
ivansabik

पंक्तियों की संख्या अधिक होने पर tossl को बहुत अधिक समय लगता है। हमारे लिए, लगभग 36000 पंक्तियों में लगभग 90 मिनट लगे। एक सीधा लोड स्टेटमेंट 3 सेकंड में किया गया था।
मविनायकम

0

आपको विभिन्न कॉलम के डेटाटाइप्स, आकार आदि के आधार पर एक क्रिएट टेबल जेनरेट करना होगा।

फिर आप LOAD DATA INFILE का उपयोग करें ... FIELDS TERMINATED BY '| LINES TERMINATED BY "\ n" SKIP 1 लाइन ...; (विवरण के लिए मैनुअल पेज देखें।)

इसी तरह प्रत्येक csv -> टेबल के लिए करें।

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