호기심 많은 분석가

[Linux] File 옮기기 본문

Coding/Information

[Linux] File 옮기기

DA Hun 2021. 5. 25. 23:04

 일전에 포스팅했던 2021.05.04 - [Machine Learning] - [SQL] DB(데이터베이스)의 data를 csv로 추출하는 법이 Local에서는 별 무리 없이 돌아갔는데 서버에서 하나의 문제점이 발생했다.

 

[SQL] DB(데이터베이스)의 data를 csv로 추출하는 법

포스팅 개요  보통의 공모전이나 캐글은 csv 형태의 파일을 제공하고 시작하기에 데이터를 추출하는 역량이 필요해 보이지 않을 수 있습니다. 하지만 현업에서는 그런 편한 상황은 주어지지 않

herjh0405.tistory.com

 서버에서 작업을 편하게 하기 위해 VS code로 연결해서 사용하고 있었는데 /var/lib/mysql-files/라는 폴더를 가시화시킬 수 없었다. 데이터를 모두가 편하게 쓸 수 있도록 보기 쉬운 곳으로 데이터를 옮겨보자.


 저번에 포스팅 했던 대로 우리의 데이터는 /var/lib/mysql-files 폴더에 0511_17.csv라는 이름으로 저장해주었다.

( WINDOW에서 MySQL을 설치하고 다른 설정을 건드리지 않는다면 기본적으로 /var/lib/mysql-files 폴더에 저장된다.)

SELECT * FROM WDS_ROW_PROCESS
WHERE DAY BETWEEN 11 AND 17
INTO OUTFILE '/var/lib/mysql-files/0511_17.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n';

 Workbench나 phpMyAdmin 같은 다른 Tool을 사용하지 않고 Ubuntu 자체에서 저장을 해주니 천만 건의 query가 30초 만에 저장이 되었다. 이제 이 데이터를 옮겨보자. 나는 /home/ubuntu/ 경로에 data_csv라는 폴더를 만들어두었다.

 Linux의 mv 문법을 사용하겠다.

mv [이동할 파일명] [이동할 위치]
mv /var/lib/mysql-files/0511_17.csv /home/ubuntu/data_csv/0511_17.csv

 위와 같이 실행해주면 우리가 원하는 목표를 이루어냈다.!

참고. 서버 상에서 데이터를 저장하면 column의 이름들이 지정되어 있지 않으므로,
import pandas as pd
col_name = ['IDX', 'AP_ADDR', 'MAC_ADDR', 'IN_TIME','DURATION',
'DISTANCE', 'COLLECT_DATE', 'YEAR', 'MONTH', 'DAY', 'HOUR', 'WEEK', 'WEEKOFYEAR']
df = pd.read_csv(data, header=None, usecols=range(13), names=col_name)
df.to_csv(data, index=False)​

 위의 코드를 참조하여 평소에 사용하던 모습으로 변화시켜줄 수 있다.

 


 점점 데이터의 용량이 커지고 있다. 다음번에는 SAS를 통해 대용량 데이터를 처리하는 포스팅이 올라갈지도 모른다.