

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# Amazon Redshift에서 복제된 데이터 쿼리
<a name="zero-etl-using.querying-and-creating-materialized-views"></a>

소스에 데이터를 추가하면 거의 실시간으로 Amazon Redshift 데이터 웨어하우스에 데이터가 복제되어 바로 쿼리할 수 있습니다. 통합 지표 및 테이블 통계에 대한 자세한 내용은 [제로 ETL 통합의 지표](zero-etl-using.metrics.md) 섹션을 참조하세요.

**참고**  
데이터베이스는 MySQL의 스키마와 동일하므로, MySQL 데이터베이스 수준은 Amazon Redshift 스키마 수준에 매핑됩니다. Aurora MySQL 또는 RDS for MySQL에서 복제된 데이터를 쿼리할 때는 이 매핑 차이에 유의하세요.

**복제된 데이터를 쿼리하려면**

1. Amazon Redshift 콘솔로 이동하여 **쿼리 편집기 v2**를 선택합니다.

1. Amazon Redshift Serverless 작업 그룹 또는 Amazon Redshift 프로비저닝된 클러스터에 연결하고 드롭다운 목록에서 데이터베이스를 선택합니다.

1. SELECT 문을 사용하여 소스에서 생성한 스키마 및 테이블에서 복제된 데이터를 모두 선택합니다. 대/소문자를 구분하려면 스키마, 테이블 및 열 이름에 큰따옴표(" ")를 사용합니다. 예제:

   ```
   SELECT * FROM "schema_name"."table_name";
   ```

   Amazon Redshift Data API를 사용하여 데이터를 쿼리할 수도 있습니다.

## 구체화된 뷰로 복제된 데이터 쿼리
<a name="zero-etl-using.transforming"></a>

로컬 Amazon Redshift 데이터베이스에서 구체화된 뷰를 생성하여 제로 ETL 통합을 통해 복제된 데이터를 변환할 수 있습니다. 로컬 데이터베이스에 연결하고 데이터베이스 간 쿼리를 사용하여 대상 데이터베이스에 액세스합니다. 세 부분으로 구성된 표기법(대상-데이터베이스-이름.스키마-이름.테이블-이름)으로 정규화된 객체 이름을 사용하거나, 대상 데이터베이스-스키마 쌍을 참조하는 외부 스키마를 만들고 두 부분으로 구성된 표기법(외부-스키마-이름.테이블-이름)을 사용할 수 있습니다. 데이터베이스 간 쿼리에 대한 자세한 내용은 [데이터베이스 간 데이터 쿼리](https://docs.aws.amazon.com/redshift/latest/dg/cross-database-overview.html)를 참조하세요.

다음 예시를 사용하여 소스 *tickit\$1zetl*에서 샘플 데이터를 만들어 *sales\$1zetl* 및 *event\$1zetl* 테이블에 삽입할 수 있습니다. 테이블은 Amazon Redshift 데이터베이스 *zetl\$1int\$1db*에 복제됩니다.

```
CREATE TABLE sales_zetl (
        salesid integer NOT NULL primary key,
        eventid integer NOT NULL,
        pricepaid decimal(8, 2)
);
 
CREATE TABLE event_zetl (
        eventid integer NOT NULL PRIMARY KEY,
        eventname varchar(200)
);
       
INSERT INTO sales_zetl VALUES(1, 1, 3.33);
INSERT INTO sales_zetl VALUES(2, 2, 4.44);
INSERT INTO sales_zetl VALUES(3, 2, 5.55);
 
INSERT INTO event_zetl VALUES(1, "Event 1");
INSERT INTO event_zetl VALUES(2, "Event 2");
```

다음 세 부분으로 구성된 표기법을 사용하여 이벤트당 총 매출을 구하는 구체화된 뷰를 생성할 수 있습니다.

```
--three part notation zetl-database-name.schema-name.table-name 
CREATE MATERIALIZED VIEW mv_transformed_sales_per_event_3p 
AUTO REFRESH YES
AS
(SELECT eventname, sum(pricepaid) as total_price
FROM  zetl_int_db.tickit_zetl.sales_zetl S, zetl_int_db.tickit_zetl.event_zetl E
WHERE S.eventid = E.eventid
GROUP BY 1);
```

다음 두 부분으로 구성된 표기법을 사용하여 이벤트당 총 매출을 구하는 구체화된 뷰를 생성할 수 있습니다.

```
--two part notation external-schema-name.table-name notation
CREATE EXTERNAL schema ext_tickit_zetl
FROM REDSHIFT
DATABASE zetl_int_db
SCHEMA tickit_zetl;
 
CREATE MATERIALIZED VIEW mv_transformed_sales_per_event_2p
AUTO REFRESH YES
AS
(
    SELECT eventname, sum(pricepaid) as total_price
    FROM  ext_tickit_zetl.sales_zetl S, ext_tickit_zetl.event_zetl E
    WHERE S.eventid = E.eventid
    GROUP BY 1  
);
```

생성한 구체화된 뷰를 보려면 다음 예시를 사용하세요.

```
SELECT * FROM mv_transformed_sales_per_event_3p;
 
+-----------+-------------+
| eventname | total_price |
+-----------+-------------+
| Event 1   | 3.33        |
| Event 2   | 9.99        |
+-----------+-------------+
 
SELECT * FROM mv_transformed_sales_per_event_2p;
 
+-----------+-------------+
| eventname | total_price |
+-----------+-------------+
| Event 1   | 3.33        |
| Event 2   | 9.99        |
+-----------+-------------+
```

## DynamoDB에서 복제된 데이터 쿼리
<a name="zero-etl-using.querying-ddb"></a>

Amazon DynamoDB에서 Amazon Redshift 데이터베이스로 데이터를 복제하면 SUPER 데이터 유형의 열에 구체화된 뷰에 저장됩니다.

이 예제에서는 다음 데이터가 DynamoDB에 저장됩니다.

```
{
    "key1": {
        "S": "key_1"
    },
    "key2": {
        "N": 0
    },
    "payload": {
        "L": [
            {
                "S": "sale1"
            },
            {
                "S": "sale2"
            },
        ]
    },
}
```

Amazon Redshift 구체화된 뷰는 다음과 같이 정의됩니다.

```
CREATE MATERIALIZED VIEW mv_sales
                    BACKUP NO
                    AUTO REFRESH YES
                    AS
                    SELECT "value"."payload"."L"[0]."S"::VARCHAR AS first_payload
                    FROM public.sales;
```

구체화된 뷰에서 데이터를 보려면 SQL 명령을 실행합니다.

```
SELECT first_payload FROM mv_sales;
```