다음을 통해 공유


Netezza 마이그레이션에 대한 SQL 문제 최소화

이 문서는 Netezza에서 Azure Synapse Analytics로 마이그레이션하는 방법에 대한 지침을 제공하는 7부 시리즈 중 5부입니다. 이 문서는 SQL 문제를 최소화하기 위한 모범 사례에 중점을 두고 있습니다.

개요

Netezza 환경의 특징

Netezza는 2000년대 초에 "데이터 웨어하우스 어플라이언스"라는 개념을 제창했습니다.

2003년에 Netezza는 처음으로 데이터 웨어하우스 어플라이언스 제품을 출시했습니다. 진입 비용을 줄이고 MPP(대규모 병렬 처리) 기술의 사용 편의성을 개선하여 당시 사용 가능했던 기존 메인프레임 또는 기타 MPP 기술보다 대규모 데이터를 보다 효율적으로 처리할 수 있도록 했습니다. 그 후로 제품은 진화했으며 대규모 금융 기관, 통신 회사 및 소매 회사에 많이 설치되었습니다. 원래 구현에서는 필드 프로그래머블 게이트 어레이, 즉 FPGA를 비롯한 독점 하드웨어를 사용했으며 TCP/IP를 통한 ODBC 또는 JDBC 네트워크 연결을 통해 액세스할 수 있었습니다.

대부분의 기존 Netezza 설치는 온-프레미스에 있으므로 많은 사용자가 최신 클라우드 환경으로 이동하여 이점을 얻기 위해 Netezza 데이터의 일부 또는 전부를 Azure Synapse Analytics로 마이그레이션하는 것을 고려하고 있습니다.

대부분의 기존 Netezza 설치는 차원 데이터 모델을 사용하는 데이터 웨어하우스입니다.

Netezza 기술은 데이터 웨어하우스를 구현하는 데 자주 사용되며, SQL을 사용하여 대규모 데이터 볼륨에 대한 복잡한 분석 쿼리를 지원합니다. 별모양 또는 눈송이 스키마와 같은 차원 데이터 모델이 일반적이며, 개별 부서에 대한 데이터 마트의 구현도 일반적입니다.

이러한 SQL 및 차원 데이터 모델의 조합은 기본 개념과 SQL 기술을 전송할 수 있으므로 Azure Synapse로의 마이그레이션을 간소화합니다. 권장되는 방법은 기존 데이터 모델을 있는 그대로 마이그레이션하여 위험 및 소요 시간을 줄이는 것입니다. 데이터 모델 변경(예: 데이터 자격 증명 모음 모델로 이동)이 궁극적인 목적인 경우에도 초기에 있는 그대로 마이그레이션을 수행한 다음, Azure 클라우드 환경 내에서 변경 작업을 수행하여 성능, 탄력적 확장성 및 비용 이점을 활용합니다.

SQL 언어는 표준화되었지만 독점 확장을 구현한 개별 공급업체도 있습니다. 이 문서에서는 레거시 Netezza 환경에서 마이그레이션하는 동안 발생할 수 있는 잠재적인 SQL 차이점을 중점적으로 설명하고 해결 방법을 제시합니다.

Azure Data Factory를 사용하여 메타데이터 기반 마이그레이션 구현

Azure Data Factory 기능을 사용하여 마이그레이션 프로세스를 자동화합니다.

Azure 환경의 기능을 사용하여 마이그레이션 프로세스를 자동화하고 오케스트레이션합니다. 또한 이 방법은 이미 전체 용량에 가깝게 실행되고 있을 수 있는 기존 Netezza 환경에 마이그레이션이 미치는 영향을 최소화합니다.

Azure Data Factory는 데이터 이동 및 데이터 변환을 오케스트레이션하고 자동화하기 위해 클라우드에서 데이터 기반 워크플로를 만들 수 있게 해주는 클라우드 기반 데이터 통합 서비스입니다. Data Factory를 사용하여 서로 다른 데이터 저장소의 데이터를 수집할 수 있는 데이터 기반 워크플로(파이프라인이라고 함)를 만들고 예약할 수 있습니다. Azure HDInsight Hadoop, Spark, Azure Data Lake Analytics 및 Azure Machine Learning과 같은 컴퓨팅 서비스를 사용하여 데이터를 처리하고 변환할 수 있습니다.

마이그레이션할 데이터 테이블과 해당 위치를 나열하는 메타데이터를 만들면 Data Factory 기능을 사용하여 마이그레이션 프로세스의 일부를 관리하고 자동화할 수 있습니다. Azure Synapse Pipelines를 사용할 수도 있습니다.

Netezza와 Azure Synapse의 SQL DDL 차이점

SQL DDL(데이터 정의 언어)

SQL DDL 명령 CREATE TABLECREATE VIEW는 표준 핵심 요소를 가지고 있을 뿐만 아니라 구현 관련 옵션을 정의하는 데도 사용됩니다.

ANSI SQL 표준은 CREATE TABLECREATE VIEW 같은 DDL 명령에 대한 기본 구문을 정의합니다. 이러한 명령은 Netezza 및 Azure Synapse 둘 다에서 사용될 뿐만 아니라 인덱싱, 테이블 배포, 분할 옵션과 같은 구현 관련 기능의 정의를 허용하도록 확장되었습니다.

다음 섹션에서는 Azure Synapse로 마이그레이션하는 동안 고려해야 할 Netezza 관련 옵션에 대해 설명합니다.

테이블 고려 사항

기존 인덱스를 사용하여 마이그레이션된 웨어하우스의 인덱싱 후보 표시를 제공합니다.

서로 다른 기술 간에 테이블을 마이그레이션하는 경우 두 환경 간에 원시 데이터와 설명 메타데이터만 실제로 이동합니다. 원본 시스템의 다른 데이터베이스 요소(예: 인덱스 및 로그 파일)는 필요하지 않거나 새 대상 환경 내에서 다르게 구현될 수 있으므로 직접 마이그레이션되지 않습니다. 예를 들어 Netezza CREATE TABLE 구문 내의 TEMPORARY 옵션은 Azure Synapse에서 테이블 이름 접두사에 "#" 문자를 지정하는 것과 같습니다.

원본 환경에서 성능 최적화(예: 인덱스)가 사용된 위치를 이해하는 것이 중요합니다. 이는 새 대상 환경에서 성능 최적화를 추가할 수 있는 위치를 나타냅니다. 예를 들어 영역 맵이 원본 Netezza 환경에서 생성된 경우 클러스터되지 않은 인덱스가 마이그레이션된 Azure Synapse 데이터베이스에서 생성되어야 할 수 있습니다. 직선적인 “동가” 인덱스 생성보다 테이블 복제와 같은 다른 네이티브 성능 최적화 기술이 더 적합할 수 있습니다.

지원되지 않는 Netezza 데이터베이스 개체 형식

Netezza 관련 기능은 Azure Synapse 기능으로 대체할 수 있습니다.

Netezza는 Azure Synapse에서 직접 지원되지 않는 일부 데이터베이스 개체를 구현하지만 새 환경 내에서 동일한 기능을 구현하는 방법이 있습니다.

  • 영역 맵: Netezza에서 영역 맵은 일부 열 형식에 대해 자동으로 생성 및 유지 관리되며 쿼리 시 검사할 데이터의 양을 제한하는 데 사용됩니다. 영역 맵은 다음 열 형식에 생성됩니다.

    • 길이가 8바이트 이하인 INTEGER 열.
    • 임시 열. 예를 들면 DATE, TIMETIMESTAMP입니다.
    • CHAR 열, 구체화된 뷰의 일부이고 ORDER BY 절에 언급된 경우.

    NZ Toolkit에 포함된 nz_zonemap 유틸리티를 사용하여 영역 맵이 있는 열을 확인할 수 있습니다. Azure Synapse는 영역 맵을 포함하지 않지만 다른 사용자 정의 인덱스 유형 및/또는 분할을 사용하여 유사한 결과를 얻을 수 있습니다.

  • CBT(클러스터형 기본 테이블): Netezza에서 CBT는 일반적으로 수십억 개의 레코드를 포함할 수 있는 팩트 테이블에 사용됩니다. 이러한 거대한 테이블을 검사하려면 관련 레코드를 가져오기 위해 전체 테이블 검색이 필요할 수 있기 때문에 처리 시간이 오래 걸립니다. 제한적인 CBT에 대한 레코드를 구성하면 Netezza에서 동일하거나 가까운 범위에서 레코드를 그룹화할 수 있습니다. 이 프로세스는 검사할 데이터의 양을 줄여 성능을 개선시키는 영역 맵도 만듭니다.

    Azure Synapse에서 분할 및/또는 다른 인덱스를 사용하여 비슷한 효과를 얻을 수 있습니다.

  • 구체화된 뷰: Netezza는 구체화된 뷰를 지원하며, 많은 열 중 몇 개만 쿼리에서 정기적으로 사용되는 대형 테이블을 하나 이상 만들 것을 권장합니다. 시스템은 기본 테이블의 데이터가 업데이트될 때 구체화된 뷰를 자동으로 유지 관리합니다.

    Azure Synapse는 Netezza와 동일한 기능을 제공하는 구체화된 보기를 지원합니다.

Netezza 데이터 형식 매핑

지원되지 않는 데이터 형식이 준비 단계의 일부로 미치는 영향을 평가합니다.

대부분의 Netezza 데이터 형식은 Azure Synapse에 직접 대응되는 형식이 있습니다. 다음 표는 이러한 데이터 형식과 이러한 데이터 형식을 매핑하는 데 권장하는 방법을 보여줍니다.

Netezza 데이터 형식 Azure Synapse 데이터 형식
BIGINT BIGINT
BINARY VARYING(n) VARBINARY(n)
BOOLEAN BIT
BYTEINT TINYINT
CHARACTER VARYING(n) VARCHAR(n)
CHARACTER(n) CHAR(n)
DATE DATE(날짜)
DECIMAL(p,s) DECIMAL(p,s)
DOUBLE PRECISION FLOAT
FLOAT(n) FLOAT(n)
INTEGER INT
INTERVAL INTERVAL 데이터 형식은 현재 Azure Synapse에서 직접 지원되지 않지만 DATEDIFF와 같은 임시 함수를 사용하여 계산할 수 있습니다.
MONEY MONEY
NATIONAL CHARACTER VARYING(n) NVARCHAR(n)
NATIONAL CHARACTER(n) NCHAR(n)
NUMERIC(p,s) NUMERIC(p,s)
REAL REAL
SMALLINT SMALLINT
ST_GEOMETRY(n) ST_GEOMETRY와 같은 공간 데이터 형식은 현재 Azure Synapse에서 지원되지 않지만, 그 데이터는 VARCHAR 또는 VARBINARY로 저장할 수 있습니다.
TIME TIME
TIME WITH TIME ZONE DATETIMEOFFSET
timestamp DATETIME

DDL(데이터 정의 언어) 생성

기존 Netezza 메타데이터를 사용하여 Azure Synapse의 CREATE TABLECREATE VIEW DDL 생성을 자동화합니다.

필요한 경우 앞에서 설명한 대로 수정된 데이터 형식으로 기존 Netezza CREATE TABLECREATE VIEW 스크립트를 편집하여 해당 정의를 만듭니다. 일반적으로 여기에는 ORGANIZE ON 같은 추가 Netezza 관련 절을 제거하거나 수정하는 작업이 포함됩니다.

그러나 기존 Netezza 환경 내에서 테이블 및 뷰의 현재 정의를 지정하는 모든 정보는 시스템 카탈로그 테이블 내에서 유지 관리됩니다. 이는 최신 상태이고 완전하다는 보장이 있으므로 이 정보의 가장 좋은 소스입니다. 사용자 유지 설명서는 현재 테이블 정의와 동기화되지 않을 수 있습니다.

nz_ddl_table 같은 유틸리티를 사용하여 이 정보에 액세스하고 CREATE TABLE DDL 문을 생성합니다. Azure Synapse에서 해당하는 테이블에 대해 이러한 문을 편집합니다.

타사 도구 및 서비스는 데이터 매핑 작업을 자동화할 수 있습니다.

데이터 형식 매핑을 포함하여 마이그레이션을 자동화하는 도구와 서비스를 제공하는 Microsoft 파트너가 있습니다. 또한 Informatica 또는 Talend와 같은 타사 ETL 도구를 Netezza 환경에서 이미 사용 중인 경우 필요한 모든 데이터 변환을 구현할 수 있습니다.

Netezza와 Azure Synapse의 SQL DML 차이점

SQL DML(데이터 조작 언어)

SQL DML 명령 SELECT, INSERT, UPDATE는 표준 핵심 요소를 가지고 있지만 여러 구문 옵션을 구현할 수도 있습니다.

ANSI SQL 표준은 SELECT, INSERT, UPDATEDELETE 같은 DML 명령에 대한 기본 구문을 정의합니다. Netezza와 Azure Synapse 모두 이러한 명령을 사용하지만 구현에 차이가 있는 경우도 있습니다.

다음 섹션에서는 Azure Synapse로 마이그레이션하는 동안 고려해야 하는 Netezza 관련 DML 명령에 대해 설명합니다.

SQL DML 구문 차이점

마이그레이션할 때 Netezza SQL과 Azure Synapse 간에 SQL DML(데이터 조작 언어) 구문의 이러한 차이점을 알고 있어야 합니다.

  • STRPOS: Netezza에서 STRPOS 함수는 문자열 내에서 하위 문자열의 위치를 반환합니다. Azure Synapse에서 이에 해당하는 함수는 CHARINDEX이며 인수의 순서는 반대입니다. 예를 들어 Netezza의 SELECT STRPOS('abcdef','def')...는 Azure Synapse의 SELECT CHARINDEX('def','abcdef')...와 동일합니다.

  • AGE: Netezza는 AGE 연산자를 지원하여 두 temporal 값(예: 타임스탬프 또는 날짜) 사이의 간격을 제공합니다. 예: SELECT AGE('23-03-1956','01-01-2019') FROM.... Azure Synapse에서 DATEDIFF는 간격을 제공합니다. 예: SELECT DATEDIFF(day, '1956-03-26','2019-01-01') FROM.... 날짜 표현 시퀀스를 확인합니다.

  • NOW(): Netezza는 NOW()를 사용하여 Azure Synapse에서 CURRENT_TIMESTAMP를 나타냅니다.

함수, 저장 프로시저 및 시퀀스

준비 단계의 일부로 마이그레이션되는 비데이터 개체의 수와 형식을 평가합니다.

Netezza와 같은 성숙한 레거시 데이터 웨어하우스 환경에서 마이그레이션할 때 간단한 테이블 및 뷰 이외의 요소를 새 대상 환경으로 마이그레이션해야 하는 경우가 많습니다. 이에 대한 예로는 함수, 저장 프로시저 및 시퀀스가 있습니다.

준비 단계의 일부로 마이그레이션해야 하는 개체의 인벤토리를 만들고 이를 처리하는 방법을 정의합니다. 그런 다음, 프로젝트 계획에 적절한 리소스를 할당합니다.

Netezza 환경의 함수 또는 저장 프로시저로 구현된 기능을 대체하는 기능이 Azure 환경에 있을 수 있습니다. 이 경우 Netezza 함수를 다시 코딩하는 대신 기본 제공 Azure 기능을 사용하는 것이 더 효율적인 경우가 많습니다.

타사 제품 및 서비스로 비데이터 요소의 마이그레이션을 자동화할 수 있습니다.

Microsoft 파트너는 데이터 형식의 매핑을 포함하여 마이그레이션을 자동화할 수 있는 도구와 서비스를 제공합니다. 또한 IBM Netezza 환경에서 이미 사용 중인 Informatica 또는 Talend와 같은 타사 ETL 도구는 필요한 모든 데이터 변환을 구현할 수 있습니다.

이러한 각 요소에 대한 자세한 내용은 다음 섹션을 참조하세요.

함수

대부분의 데이터베이스 제품과 마찬가지로 Netezza는 SQL 구현 내에서 시스템 함수 및 사용자 정의 함수를 지원합니다. Azure Synapse 같은 다른 데이터베이스 플랫폼으로 마이그레이션하는 경우 일반적인 시스템 함수를 사용할 수 있으며 변경 없이 마이그레이션할 수 있습니다. 일부 시스템 함수는 구문이 약간 다를 수 있지만 필요한 변경을 자동화할 수 있습니다. 임의의 사용자 정의 함수와 같이 상응하는 항목이 없는 시스템 함수는 대상 환경에서 사용할 수 있는 언어를 사용하여 다시 코딩해야 할 수 있습니다. Azure Synapse는 널리 사용되는 Transact-SQL 언어를 사용하여 사용자 정의 함수를 구현합니다. Netezza 사용자 정의 함수는 nzlua 또는 C++ 언어를 사용하여 코딩됩니다.

저장 프로시저

대부분의 최신 데이터베이스 제품은 프로시저를 데이터베이스 내에 저장하도록 허용합니다. Netezza는 Postgres PL/pgSQL을 기반으로 하는 NZPLSQL 언어를 제공합니다. 저장 프로시저는 일반적으로 SQL 문과 일부 절차 논리를 포함하며 데이터 또는 상태를 반환할 수 있습니다.

Azure Synapse Analytics도 T-SQL을 사용하는 저장 프로시저를 지원하므로 저장 프로시저를 마이그레이션해야 하는 경우 적절히 다시 코딩합니다.

시퀀스

Netezza에서 시퀀스는 NEXT VALUE FOR 메서드를 통해 고유한 값을 제공할 수 있는 CREATE SEQUENCE를 통해 생성되는 명명된 데이터베이스 개체입니다. 이를 사용하여 기본 키 값에 대한 대리 키 값으로 사용할 고유 번호를 생성합니다.

Azure Synapse에는 CREATE SEQUENCE가 없습니다. 시퀀스는 계열의 다음 시퀀스 번호를 만드는 SQL 코드를 사용하여 서로게이트 키를 만드는 IDENTITY 또는 관리 ID를 통해 처리됩니다.

EXPLAIN을 사용하여 레거시 SQL 유효성 검사

기존 시스템 쿼리 로그에서 실제 쿼리를 사용하여 잠재적인 마이그레이션 문제를 찾습니다.

레거시 쿼리 기록 로그에서 일부 대표적인 SQL 문을 캡처하여 레거시 Netezza SQL의 Azure Synapse 호환성을 평가합니다. 그런 다음, 이러한 쿼리에 EXPLAIN 접두사를 지정하고(동일한 테이블 및 열에 Azure Synapse의 “동가” 마이그레이션 데이터 모델 가정) Azure Synapse에서 해당 EXPLAIN 문을 실행합니다. 호환되지 않는 모든 SQL은 오류를 반환합니다. 이 정보를 사용하여 재코딩 작업의 크기를 결정합니다. 이 방법을 사용하면 관련 테이블과 뷰만 생성되므로 데이터를 Azure 환경에 로드할 필요가 없습니다.

IBM Netezza와 T-SQL 매핑

Azure Synapse SQL 데이터 형식을 준수하는 T-SQL과 IBM Netezza의 매핑은 다음 표에 있습니다.

IBM Netezza 데이터 형식 Azure Synapse SQL 데이터 형식
array 지원되지 않음
bigint bigint
binary large object [(n[K|M|G])] nvarchar [(n|max)]
 blob [(n[K|M|G])] nvarchar [(n|max)]
 byte [(n)] binary [(n)]|varbinary(max)
 byteint smallint
 char varying [(n)] varchar [(n|max)]
character varying [(n)] varchar [(n|max)]
 char [(n)] char [(n)]|varchar(max)
character [(n)] char [(n)]|varchar(max)
 character large object [(n[K|M|G])] varchar [(n|max)
 clob [(n[K|M|G])] varchar [(n|max)
 데이터 세트 지원되지 않음 
 date date
 dec [(p[,s])] decimal [(p[,s])]
 decimal [(p[,s])] decimal [(p[,s])]
 double precision float(53)
 float [(n)] float [(n)]
 graphic [(n)] nchar [(n)]| varchar(max)
 interval 지원되지 않음 
 json [(n)] nvarchar [(n|max)]
 long varchar nvarchar(max)
 long vargraphic nvarchar(max)
 mbb 지원되지 않음 
 mbr 지원되지 않음 
 number [((p|*)[,s])] numeric [(p[,s])]
 numeric [(p [,s])]  numeric [(p[,s])]
 period 지원되지 않음 
 real  real
 smallint smallint
 st_geometry 지원되지 않음 
 time time
 time with time zone datetimeoffset
 timestamp  datetime2
 timestamp with time zone datetimeoffset
 varbyte varbinary [(n|max)]
 varchar [(n)]  varchar [(n)]
 vargraphic [(n)] nvarchar [(n|max)]
 varray 지원되지 않음 
 Xml 지원되지 않음 
 xmltype 지원되지 않음 

요약

일반적인 기존 레거시 Netezza 설치는 Azure Synapse로 쉽게 마이그레이션할 수 있는 방식으로 구현됩니다. 이는 대용량 데이터 볼륨에 대한 분석 쿼리에 SQL을 사용하며 차원 데이터 모델 형식입니다. 이러한 요인으로 인해 Azure Synapse로 마이그레이션하는 데 적합한 후보입니다.

실제 SQL 코드를 마이그레이션하는 작업을 최소화하려면 다음 권장 사항을 따르세요.

  • 최종 환경에서 데이터 자격 증명 모음과 같은 다른 데이터 모델을 통합하더라도 데이터 웨어하우스의 초기 마이그레이션은 위험과 소요 시간을 최소화하기 위해 있는 그대로 수행되어야 합니다.

  • Netezza SQL 구현과 Azure Synapse 간의 차이점을 이해합니다.

  • 기존 Netezza 구현의 메타데이터 및 쿼리 로그를 사용하여 차이점의 영향을 평가하고 완화할 방법을 계획합니다.

  • 가능한 경우 마이그레이션의 오류, 위험 및 시간을 최소화하기 위해 프로세스를 자동화합니다.

  • 전문 Microsoft 파트너 및 서비스를 사용하여 마이그레이션을 간소화하는 것이 좋습니다.

다음 단계

Microsoft 및 타사 도구에 대한 자세한 내용은 이 시리즈의 다음 문서인 Netezza 데이터 웨어하우스를 Azure Synapse Analytics로 마이그레이션하기 위한 도구를 참조하세요.