데이터 엔지니어 기술 블로그

[Redshift] Federated Query(연합 쿼리)란? 본문

데이터 엔지니어링

[Redshift] Federated Query(연합 쿼리)란?

jun_yeong_park 2021. 10. 14. 15:57
반응형

개요

Redshift는 데이터 웨어하우스를 만들 수 있게 도와준다. AWS에서 제공하는 서비스이며, 다양한 소스와 쉽게 결합할 수 있는 기능이 있는데, 연합 쿼리라고 하며 하나의 쿼리 안에 S3, Athena, RDS, Redshift에 있는 데이터를 이용할 수 있다.

 

레드시프트는 비용이 비싸서 모든 데이터를 여기에 넣을 수 없어서 큰 데이터들은 S3에 넣는 경우가 많으며, 서비스는 RDS를 사용하는데 이 기능을 사용하면 쉽게 결합할 수 있다. 

 

S3에서 데이터를 가져올 경우 Redshift 인스턴스는 사용하지 않고 독립적인 인스턴스를 사용하는 Redshift Spectrum을 이용하게 되는데 비용은 1TB에 5$정도 된다.

 

사용 방법:

https://docs.aws.amazon.com/redshift/latest/dg/federated-overview.html

 

 

 

사용하면서 생겼던 이슈

Athena, RDS(Error=column name "oid" conflicts with a system column name)

[XX000] ERROR: Failed to incorporate external table "db"."table" into local catalog. Error=column name "oid" conflicts with a system column name
  • RDS, Athena에서 사용할 수 있었던 컬럼명인데 Redshift에서는 예약어인 경우 사용이 불가능하다.
  • 이런 경우에는 파일 자체를 수정해주지 않으면 사용할 수 없다.

 

S3

  • 테이블을 직접 만들어줘야하는 불편함이 있다.

 

S3(Unsupported implicit cast)

[2021-10-14 01:26:14] -----------------------------------------------
[2021-10-14 01:26:14] error:  Spectrum Scan Error
[2021-10-14 01:26:14] code:      15007
[2021-10-14 01:26:14] context:   Unsupported implicit cast: Column ('data'), FromType: STRUCT, ToType: VARCHAR, File: -
[2021-10-14 01:26:14] query:     11699342
[2021-10-14 01:26:14] location:  dory_util.cpp:1136
[2021-10-14 01:26:14] process:   worker_thread [pid=21264]
[2021-10-14 01:26:14] -----------------------------------------------
  • STRUCT타입을 VARCHAR로 읽을 수 없다. 이런 경우에는 STRUCT를 풀어서 지원해주는 데이터 형식으로 바꿔주어야 한다.

 

S3(incompatible Parquet schema)

[2021-10-14 01:39:51] -----------------------------------------------
[2021-10-14 01:39:51] error:  Spectrum Scan Error
[2021-10-14 01:39:51] code:      15007
[2021-10-14 01:39:51] context:   File '<<file>>  has an incompatible Parquet schema for column ...'
[2021-10-14 01:39:51] query:     11700580
[2021-10-14 01:39:51] location:  dory_util.cpp:1136
[2021-10-14 01:39:51] process:   worker_thread [pid=22929]
[2021-10-14 01:39:51] -----------------------------------------------
  • parquet파일을 읽어야 할 경우 스키마를 정확하게 매치시켜주어야 한다.
  • glue crawler를 사용하여 테이블로 만든 후 읽는 편이 훨씬 나을 듯 하다.

 

 

반응형
Comments