쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

Teradata NORMALIZE 임시 기능을 Amazon Redshift SQL로 변환 - 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Teradata NORMALIZE 임시 기능을 Amazon Redshift SQL로 변환

작성자: Po Hong(AWS)

요약

정규화는 ANSI SQL 표준의 테라데이타 확장입니다. SQL 테이블에 기간 데이터 유형의 열이 포함된 경우 정규화는 해당 열과 일치하거나 겹치는 값을 결합하여 여러 개별 기간 값을 통합하는 단일 기간을 형성합니다. 정규화를 사용하려면 SQL 선택 목록에서 하나 이상의 열이 Teradata의 임시 기간 데이터 유형이어야 합니다. 정규화에 대한 자세한 내용은 Teradata 설명서를 참조하세요. 

Amazon Redshift는 정규화를 지원하지 않지만 Amazon Redshift의 네이티브 SQL 구문과 LAG 윈도우 함수를 사용하여 이 기능을 구현할 수 있습니다. 이 패턴은 가장 많이 사용되는 형식인 ON MEETS 또는 OVERLAPS 조건과 함께 테라데이타 정규화 확장 프로그램을 사용하는 데 중점을 둡니다. 테라데이타에서 이 기능이 작동하는 방식과 이 기능을 Amazon Redshift 네이티브 SQL 구문으로 변환하는 방법을 설명합니다.

사전 조건 및 제한 사항

사전 조건 

  • 테라데이타 SQL에 대한 기본 지식 및 경험

  • Amazon Redshift에 대한 지식과 경험

아키텍처

소스 기술 스택

  • Teradata 데이터 웨어하우스

대상 기술 스택

  • Amazon Redshift

대상 아키텍처

Teradata 데이터베이스를 Amazon Redshift로 마이그레이션하기 위한 전체적인 아키텍처는 AWS SCT 데이터 추출 에이전트를 사용하여 Teradata 데이터베이스를 Amazon Redshift로 마이그레이션 패턴을 참조하세요. 마이그레이션은 테라데이타 정규화 구문을 Amazon Redshift SQL로 자동으로 변환하지 않습니다. 이 패턴의 지침에 따라 이 테라데이타 확장을 변환할 수 있습니다.

도구

코드

정규화의 개념과 기능을 설명하려면 Teradata에 있는 다음 테이블 정의를 살펴보세요.

CREATE TABLE systest.project      (    emp_id        INTEGER,           project_name  VARCHAR(20),           dept_id       INTEGER,           duration      PERIOD(DATE)      );

다음 SQL 코드를 실행하여 샘플 데이터를 테이블에 삽입합니다.

BEGIN TRANSACTION; INSERT INTO systest.project VALUES (10, 'First Phase', 1000, PERIOD(DATE '2010-01-10', DATE '2010-03-20') ); INSERT INTO systest.project VALUES (10, 'First Phase', 2000, PERIOD(DATE '2010-03-20', DATE '2010-07-15') ); INSERT INTO systest.project VALUES (10, 'Second Phase', 2000, PERIOD(DATE '2010-06-15', DATE '2010-08-18') ); INSERT INTO systest.project VALUES (20, 'First Phase', 2000, PERIOD(DATE '2010-03-10', DATE '2010-07-20') ); INSERT INTO systest.project VALUES (20, 'Second Phase', 1000, PERIOD(DATE '2020-05-10', DATE '2020-09-20') ); END TRANSACTION;

결과:

select * from systest.project order by 1,2,3;    *** Query completed. 4 rows found. 4 columns returned.  *** Total elapsed time was 1 second.        emp_id  project_name              dept_id  duration -----------  --------------------  -----------  ------------------------          10  First Phase                  1000  ('10/01/10', '10/03/20')                  10  First Phase                  2000  ('10/03/20', '10/07/15')          10  Second Phase                 2000  ('10/06/15', '10/08/18')          20  First Phase                  2000  ('10/03/10', '10/07/20')          20  Second Phase                 1000  ('20/05/10', '20/09/20')

테라데이타 정규화 사용 사례

이제 선택 문에 테라데이타 정규화 SQL 절을 추가합니다.

SELECT NORMALIZE ON MEETS OR OVERLAPS emp_id, duration  FROM systest.project  ORDER BY 1,2;

정규화 작업은 단일 열(emp_id)에서 수행됩니다. emp_id=10의 경우 다음과 같이 기간에서 겹치는 세 개의 기간 값이 단일 기간 값으로 합쳐집니다. 

    emp_id  duration -----------  ------------------------          10  ('10/01/10', '10/08/18')          20  ('10/03/10', '10/07/20')          20  ('20/05/10', '20/09/20')

다음 선택 문은 project_name 및 dept_id.에 대해 정규화 작업을 수행합니다. 참고로 선택 목록에는 기간 열인 기간 하나만 포함되어 있습니다.

SELECT NORMALIZE project_name, dept_id, duration  FROM systest.project;

출력:

project_name              dept_id  duration --------------------  -----------  ------------------------ First Phase                  1000  ('10/01/10', '10/03/20') Second Phase                 1000  ('20/05/10', '20/09/20') First Phase                  2000  ('10/03/10', '10/07/20') Second Phase                 2000  ('10/06/15', '10/08/18')

Amazon Redshift에 해당하는 SQL

Amazon Redshift는 현재 테이블의 기간 데이터 유형을 지원하지 않습니다. 대신 다음과 같이 테라데이타 기간 데이터 필드를 start_date, end_date의 두 부분으로 나누어야 합니다. 

CREATE TABLE systest.project      (    emp_id        INTEGER,           project_name  VARCHAR(20),           dept_id       INTEGER,           start_date  DATE,           end_date    DATE      );

다음 테이블에 샘플 데이터를 삽입합니다.

BEGIN TRANSACTION;   INSERT INTO systest.project VALUES (10, 'First Phase', 1000,  DATE '2010-01-10', DATE '2010-03-20' ); INSERT INTO systest.project VALUES (10, 'First Phase', 2000,  DATE '2010-03-20', DATE '2010-07-15');   INSERT INTO systest.project VALUES (10, 'Second Phase', 2000,  DATE '2010-06-15', DATE '2010-08-18' ); INSERT INTO systest.project VALUES (20, 'First Phase', 2000,  DATE '2010-03-10', DATE '2010-07-20' );   INSERT INTO systest.project VALUES (20, 'Second Phase', 1000,  DATE '2020-05-10', DATE '2020-09-20' );   END TRANSACTION;

출력:

emp_id | project_name | dept_id | start_date |  end_date --------+--------------+---------+------------+------------      10 | First Phase  |    1000 | 2010-01-10 | 2010-03-20      10 | First Phase  |    2000 | 2010-03-20 | 2010-07-15      10 | Second Phase |    2000 | 2010-06-15 | 2010-08-18      20 | First Phase  |    2000 | 2010-03-10 | 2010-07-20      20 | Second Phase |    1000 | 2020-05-10 | 2020-09-20 (5 rows)

테라데이타의 정규화 절을 다시 작성하려면 Amazon Redshift의 LAG 윈도우 함수를 사용하시면 됩니다. 이 함수는 파티션에서 현재 행 위(앞)의 지정 오프셋에 위치한 행의 값을 반환합니다.

LAG 함수를 사용하면 기간이 이전 기간과 일치하거나 겹치는지를 판단하여 새 기간을 시작하는 각 행을 식별할 수 있습니다(예인 경우 0, 아니요인 경우 1). 이 플래그를 누적하여 합산하면 Amazon Redshift에서 원하는 결과에 도달하기 위해 외부 그룹별 절에서 사용할 수 있는 그룹 식별자가 제공됩니다. 

LAG()를 사용하는 Amazon Redshift SQL 문 샘플은 다음과 같습니다.

SELECT emp_id, start_date, end_date,              (CASE WHEN start_date <= LAG(end_date) OVER (PARTITION BY emp_id ORDER BY start_date, end_date) THEN 0 ELSE 1 END) AS GroupStartFlag FROM systest.project  ORDER BY 1,2;

출력:

emp_id | start_date |  end_date  | groupstartflag --------+------------+------------+----------------      10 | 2010-01-10 | 2010-03-20 |              1      10 | 2010-03-20 | 2010-07-15 |              0      10 | 2010-06-15 | 2010-08-18 |              0      20 | 2010-03-10 | 2010-07-20 |              1      20 | 2020-05-10 | 2020-09-20 |              1 (5 rows)

다음 Amazon Redshift SQL 문은 emp_id 열에서만 정규화됩니다.

SELECT T2.emp_id, MIN(T2.start_date) as new_start_date, MAX(T2.end_date) as new_end_date FROM  ( SELECT T1.*, SUM(GroupStartFlag) OVER (PARTITION BY emp_id ORDER BY start_date ROWS UNBOUNDED PRECEDING) As GroupID FROM ( SELECT emp_id, start_date, end_date,              (CASE WHEN start_date <= LAG(end_date) OVER (PARTITION BY emp_id ORDER BY start_date, end_date) THEN 0 ELSE 1 END) AS GroupStartFlag FROM systest.project ) T1 ) T2 GROUP BY T2.emp_id, T2.GroupID ORDER BY 1,2;

출력:  

emp_id | new_start_date | new_end_date --------+----------------+------------------------------------      10 | 2010-01-10     | 2010-08-18      20 | 2010-03-10     | 2010-07-20      20 | 2020-05-10     | 2020-09-20 (3 rows)

 

다음 Amazon Redshift SQL 문은 project_name 열과 dept_id 열 모두에서 정규화됩니다.

SELECT T2.project_name, T2.dept_id, MIN(T2.start_date) as new_start_date, MAX(T2.end_date) as new_end_date FROM  ( SELECT T1.*, SUM(GroupStartFlag) OVER (PARTITION BY project_name, dept_id ORDER BY start_date ROWS UNBOUNDED PRECEDING) As GroupID FROM ( SELECT project_name, dept_id, start_date, end_date,              (CASE WHEN start_date <= LAG(end_date) OVER (PARTITION BY project_name, dept_id ORDER BY start_date, end_date) THEN 0 ELSE 1 END) AS GroupStartFlag FROM systest.project ) T1 ) T2 GROUP BY T2.project_name, T2.dept_id, T2.GroupID ORDER BY 1,2,3;

출력:

project_name | dept_id | new_start_date | new_end_date --------------+---------+----------------+--------------  First Phase  |    1000 | 2010-01-10     | 2010-03-20  First Phase  |    2000 | 2010-03-10     | 2010-07-20  Second Phase |    1000 | 2020-05-10     | 2020-09-20  Second Phase |    2000 | 2010-06-15     | 2010-08-18 (4 rows)

에픽

작업설명필요한 기술
테라데이타 SQL 코드를 생성합니다.

필요에 따라 Normalize 문구를 사용합니다.

SQL Developer
코드를 Amazon Redshift SQL로 변환합니다.

코드를 변환하려면 이 패턴의 ‘도구’ 섹션에 있는 지침을 따르세요.

SQL Developer
Amazon Redshift에서 코드를 실행합니다.

테이블을 생성하고, 테이블에 데이터를 로드하고, Amazon Redshift에서 코드를 실행합니다.

SQL Developer

정규화를 Amazon Redshift SQL로 변환

작업설명필요한 기술
테라데이타 SQL 코드를 생성합니다.

필요에 따라 Normalize 문구를 사용합니다.

SQL Developer
코드를 Amazon Redshift SQL로 변환합니다.

코드를 변환하려면 이 패턴의 ‘도구’ 섹션에 있는 지침을 따르세요.

SQL Developer
Amazon Redshift에서 코드를 실행합니다.

테이블을 생성하고, 테이블에 데이터를 로드하고, Amazon Redshift에서 코드를 실행합니다.

SQL Developer

참조

도구

파트너

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.