[MySQL] csv파일 테이블에 import 하기

Miri Kim·2023년 7월 17일
0

DataBase

목록 보기
1/2

csv파일

  • 캐글에서 제공하는 이커머스 고객 행동 데이터셋
  • 데이터셋 예시

    • 2019-Oct : 42,448,764 (약 4천2백만 행)
    • 2019-Nov : 67,501,979 (약 6천7백만 행)
  • 파이썬 환경에서 데이터 로드, 용량 축소 방법
    • 방법1) chunksize를 1G로 지정, pandas로 csv파일을 쪼개서 로딩하고 데이터프레임 합치기 -> downcast, parquet
    • 방법2) Dask로 csv파일 로드하고 downcast, parquet

그렇다면 DB에 적재해서 SQL로 분석하는 방법을 시도해보자.

데이터베이스 생성

CREATE DATABASE ConsumerBehavior
    DEFAULT CHARACTER SET utf8;

참고 : Database 명명 규칙 (Naming Rule)

테이블 생성

ChatGPT에게 테이블 스키마를 생성해달라고 요청

CREATE TABLE Users (
  event_time TIMESTAMP,
  event_type VARCHAR(20),
  product_id INT,
  category_id INT,
  category_code VARCHAR(100),
  brand VARCHAR(100),
  price FLOAT,
  user_id INT,
  user_session VARCHAR(100)
);

데이터프레임에서 dtype이 object인 칼럼들은 VARCHAR()에 최대 길이를 어느 정도로 설정해야 되는지에 대한 도움을 받음.
참고 : MySQL Docs

데이터 적재

  • LOAD DATA LOCAL INFILE 쿼리 사용
LOAD DATA LOCAL INFILE '/path/to/users.csv'
INTO TABLE Users
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
  • 쿼리 설명
IGNORE 1 ROWS (첫번째 행은 컬럼명이므로 무시)

출처 : https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html

  • 오류가 발생함
    Loading local data is disabled; this must be enabled on both the client and server sides

(오류 메세지를 해결하는 과정에서 배우는 것이 많으니까,,, 다시 차근차근 구글링과 ChatGPT의 도움을 받았습니다 ㅠㅠ)

참고자료 : 스택오버플로

  • 다시 실행한 결과

2019-10월 csv파일은 약 4분 정도, 2019-11월은 약 6분 정도 소요로 데이터 적재가 완료 되었다 !

  • select 쿼리 실행

user_id 고유값만 5백만개...
본격적으로 데이터 분석과 지표 생성을 진행해보겠습니다 !

참고자료

https://moonlighting.tistory.com/140

profile
Data Scientist로 나아가는 기록들

2개의 댓글

comment-user-thumbnail
2023년 7월 17일

저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!

1개의 답글