Tạo bảng từ tệp CSV có tiêu đề


12

Tôi đang tìm cách tạo một bảng MySQL mới chỉ dựa trên nội dung của một CSV được chỉ định. Các tệp CSV tôi sẽ sử dụng có các thuộc tính sau;

  • "|" phân định
  • Hàng đầu tiên chỉ định tên cột (tiêu đề), cũng "|" phân định
  • Tên cột và thứ tự không cố định.
  • Số lượng cột không cố định.
  • Các tệp có kích thước lớn (1 triệu hàng / 50 cột).

Trong Excel, điều này khá đơn giản, tuy nhiên với MySQL thì điều đó dường như không xảy ra (không may mắn với Google). Bất kỳ đề nghị về những gì tôi nên xem xét?

Câu trả lời:


10

Bạn có thể sử dụng csvsql , một phần của csvkit(bộ tiện ích để chuyển đổi và làm việc với các tệp CSV):

  • Linux hoặc Mac OS X
  • nguồn mở và miễn phí
  • sudo pip install csvkit
  • Thí dụ: csvsql --dialect mysql --snifflimit 100000 datatwithheaders.csv > mytabledef.sql
  • Nó tạo ra một CREATE TABLEtuyên bố dựa trên nội dung tập tin. Tên cột được lấy từ dòng đầu tiên của tệp CSV.

2

Nếu bạn ổn với việc sử dụng Python, Pandas hoạt động rất tốt với tôi (csvsql bị treo mãi mãi và ít cols và hàng hơn trong trường hợp của bạn). Cái gì đó như:

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)

Bạn định nghĩa ở dwh_engineđâu? Đây có phải là một lỗi đánh máy và bạn có nghĩa là engine?
joanolo

Có nó nên được engine! Sửa câu trả lời cảm ơn vì đã phát hiện ra
ivansabik

to_sql chiếm quá nhiều thời gian nếu số lượng hàng cao. Đối với chúng tôi, khoảng 36000 hàng mất khoảng 90 phút. Một tuyên bố tải trực tiếp đã được thực hiện trong 3 giây.
mvinayakam

0

Bạn cần tạo BẢNG TẠO dựa trên kiểu dữ liệu, kích thước, v.v. của các cột khác nhau.

Sau đó, bạn sử dụng LOAD DATA INFILE ... CÁC L FINH VỰC KẾT THÚC B'NG '|' CÁC DÒNG KẾT THÚC B "NG" \ n "SKIP 1 LINE ...; (Xem trang hướng dẫn để biết chi tiết.)

Làm tương tự cho mỗi csv -> bảng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.