Utwórz tabelę z pliku CSV z nagłówkami


12

Szukam sposobu na wygenerowanie nowej tabeli MySQL wyłącznie na podstawie zawartości określonego pliku CSV. Pliki CSV, których będę używał, mają następujące właściwości;

  • „|” rozdzielony.
  • Pierwszy wiersz określa nazwy kolumn (nagłówki), a także „|” rozdzielony.
  • Nazwy kolumn i kolejność nie są ustalone.
  • Liczba kolumn nie jest stała.
  • Pliki mają duży rozmiar (1 milion wierszy / 50 kolumn).

W programie Excel jest to dość proste, jednak w przypadku MySQL tak się nie dzieje (nie ma szczęścia w Google). Wszelkie sugestie dotyczące tego, na co powinienem patrzeć?

Odpowiedzi:


10

Możesz użyć csvsql , który jest częścią csvkit(pakiet narzędzi do konwersji i pracy z plikami CSV):

  • Linux lub Mac OS X
  • wolne i otwarte źródło
  • sudo pip install csvkit
  • Przykład: csvsql --dialect mysql --snifflimit 100000 datatwithheaders.csv > mytabledef.sql
  • Tworzy CREATE TABLEoświadczenie na podstawie zawartości pliku. Nazwy kolumn pochodzą z pierwszego wiersza pliku CSV.

2

Jeśli nie masz nic przeciwko używaniu Pythona, Pandas działał świetnie dla mnie (csvsql wisiał na zawsze i mniej cols i wierszy niż w twoim przypadku). Coś jak:

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)

Gdzie można określić dwh_engine? Czy to literówka i miałeś na myśli engine?
joanolo

Tak, powinno być engine! Poprawiono odpowiedź dzięki za
wykrycie

to_sql zajmuje zbyt dużo czasu, jeśli liczba wierszy jest wysoka. Dla nas około 36000 rzędów zajęło około 90 minut. Instrukcja obciążenia bezpośredniego została wykonana w ciągu 3 sekund.
mvinayakam

0

Musisz wygenerować UTWÓRZ TABELĘ na podstawie typów danych, wielkości itp. Różnych kolumn.

Następnie używasz ŁADUJ DANE INFILE ... POLA ZAKOŃCZONE PRZEZ „|” LINIE ZAKOŃCZONE PRZEZ "\ n" POMIŃ 1 LINIA ...; (Szczegółowe informacje można znaleźć na stronie podręcznika).

Zrób to samo dla każdej tabeli csv ->.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.