สร้างตารางจากไฟล์ CSV พร้อมส่วนหัว


12

ฉันกำลังหาวิธีในการสร้างตาราง MySQL ใหม่โดยอิงจากเนื้อหาของ CSV ที่ระบุเท่านั้น ไฟล์ CSV ที่ฉันจะใช้มีคุณสมบัติดังต่อไปนี้

  • "|" คั่น
  • แถวแรกระบุชื่อคอลัมน์ (ส่วนหัว) เช่นกัน "|" คั่น
  • ชื่อคอลัมน์และคำสั่งซื้อไม่ได้รับการแก้ไข
  • จำนวนคอลัมน์ไม่คงที่
  • ไฟล์มีขนาดใหญ่ (1 ล้านแถว / 50 คอลัมน์)

ใน Excel ทั้งหมดนี้ค่อนข้างง่าย แต่ด้วย MySQL มันดูเหมือนจะไม่ (ไม่มีโชคกับ Google) ข้อเสนอแนะใด ๆ เกี่ยวกับสิ่งที่ฉันควรจะดู?

คำตอบ:


10

คุณสามารถใช้csvsqlซึ่งเป็นส่วนหนึ่งของcsvkit(ชุดเครื่องมือสำหรับการแปลงและทำงานกับไฟล์ CSV):

  • Linux หรือ Mac OS X
  • ฟรีและโอเพนซอร์ส
  • sudo pip install csvkit
  • ตัวอย่าง: csvsql --dialect mysql --snifflimit 100000 datatwithheaders.csv > mytabledef.sql
  • มันสร้างCREATE TABLEคำสั่งตามเนื้อหาของไฟล์ ชื่อคอลัมน์ถูกนำมาจากบรรทัดแรกของไฟล์ CSV

2

หากคุณตกลงกับการใช้ Python Pandas ก็ทำงานได้ดีสำหรับฉัน (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อะไร
joanolo

ใช่มันควรจะเป็นengine! แก้ไขคำตอบขอบคุณสำหรับการจำ
ivansabik

to_sql ใช้เวลานานเกินไปถ้าจำนวนแถวสูง สำหรับเราแถว 36,000 แถวใช้เวลาประมาณ 90 นาที คำสั่งโหลดโดยตรงเสร็จใน 3 วินาที
mvinayakam

0

คุณต้องสร้าง CREATE TABLE ขึ้นอยู่กับประเภทข้อมูลขนาดและอื่น ๆ ของคอลัมน์ต่างๆ

จากนั้นคุณใช้โหลดข้อมูล INFILE สิ้นสุดลงโดย '|' LINES สิ้นสุดโดย "\ n" ข้าม 1 บรรทัด ... ; (ดูหน้าคู่มือสำหรับรายละเอียด)

ทำเช่นเดียวกันสำหรับแต่ละตาราง csv ->

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.