Створіть таблицю з файлу 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 займає занадто багато часу, якщо кількість рядків велика. Для нас близько 36000 рядків зайняли близько 90 хвилин. Запрошення прямого навантаження було зроблено за 3 секунди.
mvinayakam

0

Вам потрібно створити CREATE TABLE на основі типів даних, розміру тощо з різних стовпців.

Тоді ви використовуєте ЗАВАНТАЖЕННЯ ДАНИХ INFILE ... ПОЛИ, ЗАВЕРШЕНІ '|' ЛІНІЇ, ЗАКРІТНІ "\ n" ЛІНКОЮ 1 ЛІНЮ ...; (Детальну інформацію див. На сторінці керівництва.)

Зробіть так само для кожної таблиці csv ->.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.