query editor v2를 사용하여 데이터를 S3에서 간단하게 Redshift로 로드하기

Redshift query editor v2를 사용하여 간단하게 파일을 S3에서 Redshift로 로드하는 방법을 설명합니다.
2023.01.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

안녕하세요 DA사업본부 송영진입니다.

오늘은 파일에서 Redshift에 데이터를 로드하는 방법에 대한 초간단 블로그입니다.

어떤 방법으로 로드를 할 것인가?

Redshift 클러스터에 테이블에 데이터를 삽입하는 방법은 여러가지가 있습니다.

  • 빈 테이블을 생성한 뒤 직접 INSERT문으로 데이터를 삽입
  • COPY 명령어를 사용한 SQL문으로 파일에서 테이블로 데이터를 삽입
  • Glue Job을 사용하여 테이블에 데이터를 삽입하는 작업을 만들기
  • Redshift Spectrum을 사용하여 외부 테이블 참조를 만들기
  • JDBC를 사용하여 외부 툴을 Redshift에 연결하여 로드하기 등등...

위와 같은 다양한 방법이 있지만 저는 query editor v2가 나온 뒤 부터는 간단한 테이블을 로드할 때 쿼리 편집기 v2에 내장되어 있는 로드 기능을 사용하게 되었습니다. 그만큼 사용하기가 쉽습니다!

준비물

준비물은 간단합니다

  1. Redshift 클러스터
  2. S3에 접근할 권한을 가진 클러스터에 연결할 IAM Role
  3. 로드할 데이터 파일(csv, tsv, json, parquet등등)

당연히 읽어들여야 할 대상인 파일과 Redshift 클러스터를 준비해야겠죠? 저는 데이터 파일로 Redshift의 공식문서에 등록되어있는 ticketdb를 사용하였습니다.

ticketdb가 어떤 데이터인지에 대한 정보는 링크에서 참조바랍니다.

그리고 IAM 역할에는 최소한의 권한인 s3:GetObject와 s3:ListBucket에 대한 권한만 있으면 됩니다.

저는 역할에 다음과 같은 정책을 생성하였습니다

ticketdb파일을 S3에 업로드합니다.

로드를 해보자

AWS 콘솔에서 Redshift의 query editor v2에 들어가면 다음과 같은 화면이 나옵니다.

좌측에 클러스터들이 나오고 중앙부터는 SQL을 작성 할 수 있는 공간과 그 위쪽에는 어떤 클러스터에 접속해서 쿼리를 날릴 것인지 설정할 수도 있죠.

위의 Create버튼에서 어떤 로드를 하기 위한 테이블을 생성하겠습니다.

테이블 작성은 다음과 같이 어렵지 않게 되어있습니다. 헤더가 포함된 csv파일인 경우, Load from CSV버튼으로 파일을 업로드 함으로써 더욱 간단하게 작성이 가능합니다.

다음으로 로드를 하기 위해, 빨간색으로 동그라미 친 Load data를 누르면 다음과 같은 화면이 나옵니다.

S3에 있는 파일을 로드할 것인지 로컬에 갖고있는 파일을 로드할 것인지 선택 할 수 있습니다.

저는 S3에 있는 파일을 로드하기 위해 오브젝트가 있는 URI를 지정했습니다.

그 뒤에 파일 형식을 지정 할 수 있는데요, 이 부분에서 파일의 확장자를 결정 가능합니다 대표적으로 csv와 JSON, parquet등이 있으며 그 외에도 직접 구분자를 설정하여 로드를 할 수도 있습니다.

이번에 사용할 데이터는 다음과 같은 형식이기 때문에 구분자를 |로 지정해서 로드를 진행합니다.

파일 옵션과 압축 지정에서 암호화가 되어있는지 gzip과 같은 압축이 되어있는지도 설정이 가능하며, 고급 설정에서는 날짜, 시간의 형식을 지정도 가능하고, Escape문자나 첫줄을 헤더로서 무시하고 로드 등 여러가지 다양한 옵션을 제공합니다. 이 부분이 굉장히 편합니다!

로드를 할 옵션을 지정한 뒤에 로드를 할 타겟 테이블과 어떤 IAM 역할을 사용할지 지정한 후 Load data 버튼을 누르면 다음과 같은 쿼리가 자동으로 생성되며 실행이 됩니다.

다음과 같이 깔끔하게 로드가 되었습니다!

마지막으로

그렇습니다 결과적으로는 처음에 설명했던 COPY 명령어를 사용한 SQL문으로 파일에서 테이블로 데이터를 삽입 방법이 되겠습니다.

이러한 SQL문을 만들어주는 UI를 Redshift query editor v2에서 구현한 것입니다. 저는 직접 SQL을 작성할 때에는 어떤 옵션이 있었지? 하면서 공식문서를 찾아보면서 지금 필요한 옵션에 대한 정보를 얻는데요, 이런 옵션들이 UI로 구현되어있기 때문에 어떤 옵션이 있는지 직관적으로 알 수 있고 간편하게 쓸 수 있었습니다.

간단한 방법이지만 효과적이죠? 이렇게 SQL에 익숙하지 않은 분들도 결과로 얻는 SQL문에 익숙해지면 더욱 빠른 작업이 가능하게 될 거라 생각합니다.