🕰️ 작성일 : 2025.08.07

Q : 현재 Amazon Aurora Mysql의 한 테이블에서 DECIMAL(49,30) 을 사용하고 있으나 이 타입이 Amazon Redshift에서 지원되지 않아 테이블 Sync가 실패합니다. 이를 우회 할 수 있는 방법이 있을까요? A : Amazon Aurora에서 원본 테이블에 대한 View을 생성하고, Amazon Redshift에서 Federated Query 방식으로 해당 View을 조회하여 문제를 우회 할 수 있습니다. Amazon Redshift에서 Mysql을 대상으로 Federated Query을 사용하기 위한 AWS의 공식 문서는 아래에서 확인하세요***.***

MySQL에 대한 연합 쿼리 사용 시작하기 - Amazon Redshift


1. 문제 상황

image.png


2. 문제 해결 방식

image.png

  1. 원본 Aurora 데이터베이스에서 Amazon Redshift에서 지원이 되는 View을 생성합니다. 여기 예제에서는 DECIMAL(38,18) 을 사용합니다.

CREATE VIEW decimal_table_view AS
SELECT 
    id,
    CASE 
        WHEN number IS NULL THEN NULL
        WHEN ABS(number) >= POWER(10, 19) THEN NULL  -- 오버플로우 방지
        ELSE CAST(number AS DECIMAL(38,18))
    END AS number
FROM decimal_table;
  1. Amazon Redshift에서 Amazon Aurora의 데이터베이스를 대상으로 External Schema을 생성합니다. 여기서 사용하는 IAM Role은 Amazon Redshift가 AWS Secret Manager에 접근 할 수 있는 Role이여야하며, Secret Manager에는 Mysql에 접근 할 수 있는 ID/PW 정보가 포함되어있어야 합니다.
CREATE EXTERNAL SCHEMA aurora_schema
FROM MYSQL
DATABASE 'zeroetl'
URI 'aurora-instance-1.*******.ap-northeast-2.rds.amazonaws.com'
IAM_ROLE 'arn:aws:iam::*******82095:role/AmazonRedshift_FederatedQuery'
SECRET_ARN 'arn:aws:secretsmanager:ap-northeast-2:*******82095:secret:aurora1_secretmanager-xLHRN8';
  1. Amazon Redshift에서 해당 스키마를 대상으로 View을 조회합니다.
SELECT     *
FROM aurora_schema.decimal_table_view;
  1. 아래와 같이 정상적으로 조회 할 수 있습니다.

image.png

3. 그 외 적용 가능한 방안

  1. 만약 원본 테이블의 컬럼 타입 변경이 가능하다면 원본 테이블 컬럼 타입을 Amazon Redshift에서 지원이 가능한 타입으로 변경하여 문제를 해결 할 수 있습니다.