Создать таблицу из файла CSV с заголовками

12

Я ищу способ создания новой таблицы MySQL исключительно на основе содержимого указанного CSV. Файлы CSV, которые я буду использовать, имеют следующие свойства;

  • "|" разграничены.
  • В первой строке указываются имена столбцов (заголовки), а также "|" разграничены.
  • Имена столбцов и порядок не фиксированы.
  • Количество столбцов не фиксировано.
  • Файлы имеют большой размер (1 мил строк / 50 столбцов).

В Excel это все довольно просто, однако с MySQL это не так (не везет с Google). Любые предложения о том, что я должен смотреть?

user58602
источник

Ответы:

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)
ivansabik
источник
Где вы определяете dwh_engine? Это опечатка, и вы имели в виду engine?
Joanolo
Да, это должно быть engine! Исправил ответ спасибо за споттинг
ivansabik
to_sql занимает слишком много времени, если количество строк велико. Для нас около 36000 строк заняло около 90 минут. Оператор прямой загрузки был сделан за 3 секунды.
Мвинаякам
0

Вам необходимо сгенерировать CREATE TABLE на основе типов данных, размера и т. Д. Различных столбцов.

Затем вы используете LOAD DATA INFILE ... FIELDS TERMINATED BY '|' ЛИНИИ, ПРЕКРАЩАЕМЫЕ "\ n" ПРОПУСТИТЬ 1 ЛИНИЮ ...; (См. Страницу руководства для деталей.)

Сделайте аналогично для каждой таблицы csv ->.

Рик Джеймс
источник