헤더가있는 CSV 파일에서 테이블 만들기


12

지정된 CSV의 내용만을 기반으로 새 MySQL 테이블을 생성하는 방법을 찾고 있습니다. 사용할 CSV 파일에는 다음과 같은 속성이 있습니다.

  • "|" 구분.
  • 첫 번째 행은 열 이름 (헤더)을 지정하고 "|" 구분.
  • 열 이름 및 순서는 고정되어 있지 않습니다.
  • 열 수는 고정되어 있지 않습니다.
  • 파일 크기가 큽니다 (1 백만 행 / 50 열).

Excel에서 이것은 모두 간단하지만 MySQL에서는 그렇지 않습니다 (Google에서는 운이 좋지 않습니다). 내가 무엇을보고 해야하는지에 대한 제안?

답변:


10

당신은 사용할 수 있습니다 csvsql 의 일부 csvkit(로 변환 CSV 파일 작업을위한 유틸리티 모음을) :

  • 리눅스 또는 맥 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을 생성해야합니다.

그런 다음 LOAD DATA INFILE ... TERMINATED BY '|'를 사용하십시오. "\ n"으로 끝나는 줄 SKIP 1 LINE ...; (자세한 내용은 매뉴얼 페이지를 참조하십시오.)

각 csv-> 테이블에 대해서도 마찬가지입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.