로컬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 사용하면 됨

카테고리: ,

업데이트: