로컬DB 일배치로 S3에 파일 전송하기
문제
- 기존에는 MSSQL Server에 위치한 DB의 데이터를 가져오기 위하여 Glue를 사용했다. 그러나 쿼리 시간이 너무 오래걸려 비용문제가 발생.
과제
- 따라서 MSSQL Server DB에서 해당 데이터를 읽어서 파일로 생성 후, 그 파일을 S3로 전송한다. 그리고 Glue는 S3의 파일을 읽도록 한다.
- 이를 통해 Glue의 구동시간을 줄인다.
- sqlcmd, batch를 이용하여 MSSQL Server에서 1일 1회 동작하는 윈도우 잡 스케줄러를 작성한다
선행
- 로컬 서버에 aws credential 설정해야 S3로 접속이 가능하다.
코드
-
어제 06:00 부터 ~ 오늘 06:00까지의 데이터를 가져오는 배치 스크립트
-
bems-to-s3-daily.bat
@echo off for /f %%a in ('D:\bems-to-s3\yesterday.bat') do set "ystd=%%a" sqlcmd -S localhost -d iBems_SU -W -Q "SET NOCOUNT ON; SELECT * FROM iBems_SU.dbo.BemsMonitoringPointHistoryDaily WHERE SiteId=1 AND CreatedDateTime between CONCAT(CONVERT(char(10), dateadd(day, -1, getdate()), 23), ' 06:00') and CONCAT(CONVERT(char(10), dateadd(day, -0, getdate()), 23), ' 06:00')" -s ", " -o "C:\Users\Temp\%ystd%_BemsMonitoringPointHistoryDaily.csv" aws s3 cp "C:\Users\Temp\%ystd%_BemsMonitoringPointHistoryDaily.csv" s3://{여기에는 s3 arn 넣으시면 됩니다}
설정
- 위 배치스크립트를 1일 1회 실행하기 위해 윈도우 잡을 설정한다.
- 리눅스의 경우 crontab 사용하면 됨