EC2 Docker MariaDB CSV 파일 import

강혜성·2023년 3월 22일
0

분산처리

목록 보기
13/18
  • AWS EC2에 Docker로 설치된 MariaDB에 csv파일을 import 시킨다.

파일 옮기기

  • CyberDuck을 이용해서 윈도우 로컬에서 AWS EC2로 파일 옮기기
  • docker cp /home/ubuntu/stock_datas/. maria-db:/ 명령어로 stock_datas 디렉토리 안에 있는 모든 파일 옮기기

csv 파일 import

  • LOAD DATA LOCAL INFILE '/valid_company_list.csv' INTO TABLE comany FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'; 명령어를 이용해서 파일 임포트
# 실행결과
Query OK, 1012 rows affected, 1084 warnings (0.016 sec)
Records: 1156  Deleted: 0  Skipped: 144  Warnings: 1084

  • 한글이 전부 깨지는 문제가 발생
  • MariaDB에 status 명령어를 쳤을 때 UTF-8로 이상이 없었음

한글 깨짐 문제 해결

  1. Python Pandas Data Frame을 통해서 csv 파일을 생성했고, 저장할 때 EUC-KR로 지정
    -> utf-8로 저장 후 수행
    -> 동일한 결과
  2. maria-db에서 vim valid_company_list.csv 수행 시 한글 깨지는 현상 발생
    -> echo $LANG 입력시 C.UTF-8
    -> locale -a 입력 시 ko_KR.UTF-8 없음 확인
    -> apt-get install language-pack-ko 명령어로 ko_KR.UTF-8 설치
    -> locale-gen ko_KR.UTF-8 입력
    -> dpkg-reconfigure locales 입력 후 ko_KR.UTF-8에 맞는 번호 입력
    -> update-locale LANG=ko_KR.UTF-8 LC_MESSAGES=POSIX 입력
    -> echo $LANG 입력 후 확인
    -> 여전히 한글 깨지는 현상 발생
    -> Local(Window)에서 MySql Work bench를 이용해서 data import로 해결

csv 파일 import 2

  • csv 파일 import 결과
# 실행 결과
Query OK, 0 rows affected, 65535 warnings (6 min 19.771 sec)
Records: 5674070  Deleted: 0  Skipped: 5674070  Warnings: 34038565
  • csv 파일 매칭 순서가 달라서 발생한다고 판단
LOAD DATA LOCAL INFILE '/valid_company_list.csv' INTO TABLE company FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'

LOAD DATA LOCAL INFILE '/one_minute_price.csv' INTO TABLE historical_price_minute FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  (@id, @date, @open, @high, @low, @close, @volume, @symbol, @splits, @adjclose, @dividends) SET adjclose=@adjclose, close=@close, date_time=STR_TO_DATE(@date, "%Y-%m-%d %H:%i:%s"), dividends=@dividends, high=@high, low=@low, open=@open, volume=@volume, company_code=@symbol;

LOAD DATA LOCAL INFILE '/one_hour_price.csv' INTO TABLE historical_price_hour FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  (@date1, @open, @high, @low, @close, @volume, @date, @symbol) SET close=@close, date_time=STR_TO_DATE(@date, "%Y-%m-%d %H:%i:%s"), high=@high, low=@low, open=@open, volume=@volume, company_code=@symbol;

LOAD DATA LOCAL INFILE '/one_day_price.csv' INTO TABLE historical_price_day FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  (@date, @open, @high, @low, @close, @volume, @adjclose, @dividends, @splits, @symbol) SET adjclose=@adjclose, close=@close, date_time=STR_TO_DATE(@date, "%Y-%m-%d %H:%i:%s"), dividends=@dividends, high=@high, low=@low, open=@open, volume=@volume, company_code=@symbol;
  • csv 순서 매칭 후 정상 저장 확인 완료

  • Warnings 발생시 show warnings 명령어로 확인 가능

LOAD DATA LOCAL INFILE '/valid_company_list.csv' INTO TABLE company FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'

  • minute은 제대로 저장이 되었지만, hour, day 데이터는 제대로 저장되지 않았음
    | Warning | 1452 | Cannot add or update a child row: a foreign key constraint fails (`hs_db`.`historical_price_day`, CONSTRAINT `FKdbu19ap85vivlemmtrngwmm6m` FOREIGN KEY (`company_code`) REFERENCES `company` (`company_code`)) |
  • 해당 에러는 참조 외부키가 없어서 발생하는 에러, 참조 테이블 company key 데이터 확인, 문제 없음 확인 후 실행 -> 동일 Error 발생
  • .csv 파일의 저장 양식 문제일수도 있을것 같아서 양식 utf-8로 변환 후 명령어 수행 -> 동일 Error 발생
  • minute, hour, day 테이블 나눠서 명령어 실행 -> 동일 Error 발생...

Pandas to_sql 이용

  • 위와 같은 많은 에러 떄문에 pandas to_sql을 사용

0개의 댓글