매핑 데이터 흐름의 행 변경 변환

적용 대상: Azure Data Factory Azure Synapse Analytics

기업용 올인원 분석 솔루션인 Microsoft Fabric의 Data Factory를 사용해 보세요. Microsoft Fabric은 데이터 이동부터 데이터 과학, 실시간 분석, 비즈니스 인텔리전스 및 보고에 이르기까지 모든 것을 다룹니다. 무료로 새 평가판을 시작하는 방법을 알아봅니다!

데이터 흐름은 Azure Data Factory 및 Azure Synapse Pipelines 모두에서 사용할 수 있습니다. 이 문서는 매핑 데이터 흐름에 적용됩니다. 변환을 처음 사용하는 경우 매핑 데이터 흐름을 사용하여 데이터 변환 소개 문서를 참조하세요.

행에 대한 삽입, 삭제, 업데이트, upsert 정책을 설정하려면 행 변경 변환을 사용합니다. 일대다 조건을 식으로 추가할 수 있습니다. 각 행은 처음 일치 식에 해당하는 정책으로 표시되므로 이러한 조건을 우선 순위에 따라 지정해야 합니다. 각 조건으로 인해 하나의 행(또는 여러 행)이 삽입, 업데이트, 삭제 또는 upsert될 수 있습니다. 행 변경은 데이터베이스에 대해 DDL 작업과 DML 작업을 모두 생성할 수 있습니다.

행 변경 설정

행 변경 변환은 데이터 흐름의 데이터베이스, REST 또는 Azure CosmosDB 싱크에 대해서만 작동합니다. 행에 할당하는 작업(삽입, 업데이트, 삭제, upsert)은 디버그 세션 중에 발생하지 않습니다. 데이터베이스 테이블에서 행 변경 정책을 적용하려면 파이프라인에서 데이터 흐름 실행 작업을 실행합니다.

참고 항목

SQL Server 또는 SAP와 같은 기본 CDC 원본을 사용하는 변경 데이터 캡처 데이터 흐름에는 행 변경 변환이 필요하지 않습니다. 이러한 경우 ADF는 행 표식을 자동으로 감지하므로 행 변경 정책이 필요하지 않습니다.

기본 행 정책 지정

행 변경 변환을 만들고 조건이 true()인 행 정책을 지정합니다. 이전에 정의된 식과 일치하지 않는 각 행은 지정된 행 정책에 대해 표시됩니다. 기본적으로 조건 식과 일치하지 않는 각 행은 Insert에 대해 표시됩니다.

행 변경 정책

참고 항목

모든 행을 하나의 정책으로 표시하려면 해당 정책에 대한 조건을 만들고 조건을 true()로 지정할 수 있습니다.

데이터 미리 보기에서 정책 보기

디버그 모드를 사용하여 데이터 미리 보기 창에서 행 변경 정책의 결과를 볼 수 있습니다. 행 변경 변환의 데이터 미리 보기는 대상에 대해 DDL 또는 DML 작업을 생성하지 않습니다.

행 변경 정책

각 행 변경 정책의 아이콘은 삽입, 업데이트, upsert 또는 삭제 작업이 발생하는지 여부를 나타냅니다. 상단 헤더는 미리 보기에서 각 정책의 영향을 받는 행의 수를 보여 줍니다.

싱크에서 행 변경 정책 허용

행 변경 정책을 준수하려면 데이터 스트림을 데이터베이스 또는 Azure Cosmos DB 싱크에 작성해야 합니다. 싱크의 설정 탭에서 해당 싱크에 대해 허용되는 행 변경 정책을 사용하도록 설정합니다.

행 변경 싱크

기본 동작은 삽입만 허용하는 것입니다. 업데이트, upsert 또는 삭제를 허용하려면 해당 조건에 대해 싱크에 있는 상자를 선택합니다. 업데이트, upsert 또는 삭제를 사용하도록 설정한 경우 싱크에 일치시킬 키 열을 지정해야 합니다.

참고 항목

삽입, 업데이트 또는 upsert가 싱크에 있는 대상 테이블의 스키마를 수정하는 경우 데이터 흐름은 실패합니다. 데이터베이스의 대상 스키마를 수정하려면 테이블 다시 만들기를 테이블 동작으로 선택합니다. 그러면 새 스키마 정의를 사용하여 테이블을 삭제하고 다시 만듭니다.

싱크 변환에는 대상 데이터베이스의 고유한 행 ID에 대한 단일 키 또는 일련의 키가 필요합니다. SQL 싱크의 경우 싱크 설정 탭에서 키를 설정합니다. Azure Cosmos DB의 경우 설정에서 파티션 키를 설정하고 싱크 매핑에서 Azure Cosmos DB 시스템 필드 "ID"도 설정합니다. Azure Cosmos DB의 경우 업데이트, upsert, 삭제에 대한 시스템 열 "ID"를 반드시 포함해야 합니다.

Azure SQL Database 및 Azure Synapse를 사용하여 병합 및 upsert

데이터 흐름은 upsert 옵션을 사용하여 Azure SQL Database 및 Azure Synapse 데이터베이스 풀(데이터 웨어하우스)에 대한 병합을 지원합니다.

그러나 대상 데이터베이스 스키마가 키 열의 ID 속성을 사용하는 시나리오가 발생할 수 있습니다. 이 서비스를 사용하려면 업데이트 및 upsert에 대한 행 값을 일치시키는 데 사용하는 키를 식별해야 합니다. 그러나 대상 열에 ID 속성 집합이 있고 upsert 정책을 사용하고 있는 경우 대상 데이터베이스에서 열에 쓰기를 허용하지 않습니다. 분산 테이블의 배포 열에 대해 upsert를 시도하는 경우 오류가 발생할 수도 있습니다.

다음과 같은 방법으로 이를 해결할 수 있습니다.

  1. 싱크 변환 설정으로 이동하고 “키 열 쓰기 건너뛰기”를 설정합니다. 그러면 서비스에서 사용자가 매핑에 대한 키 값으로 선택한 열을 쓰지 않습니다.

  2. 해당 키 열이 ID 열에 문제를 일으키는 열이 아닌 경우 싱크 변환 전처리 SQL 옵션인 SET IDENTITY_INSERT tbl_content ON을 사용할 수 있습니다. 그런 다음 사후 처리 SQL 속성인 SET IDENTITY_INSERT tbl_content OFF를 사용하여 이를 해제합니다.

  3. ID 사례와 배포 열 사례 모두 upsert에서 조건부 분할 변환을 통해 별도의 삽입 조건과 별도의 업데이트 조건을 사용하는 것으로 논리를 전환할 수 있습니다. 이러한 방식으로 키 열 매핑을 무시하도록 업데이트 경로에 대한 매핑을 설정할 수 있습니다.

데이터 흐름 스크립트

구문

<incomingStream>
    alterRow(
           insertIf(<condition>?),
           updateIf(<condition>?),
           deleteIf(<condition>?),
           upsertIf(<condition>?),
        ) ~> <alterRowTransformationName>

예시

아래 예제는 들어오는 스트림 CleanData를 사용하여 3개의 행 변경 조건을 만드는 SpecifyUpsertConditions이라는 행 변경 변환입니다. 이전 변환에서 행이 데이터베이스에서 삽입, 업데이트 또는 삭제되는지 여부를 결정하는 alterRowCondition이라는 이름의 열이 계산됩니다. 열 값에 행 변경 규칙과 일치하는 문자열 값이 있으면 해당 정책이 할당됩니다.

UI에서 이 변환은 아래 이미지와 같습니다.

행 변경 예제

이 변환에 대한 데이터 흐름 스크립트는 아래 코드 조각에 있습니다.

SpecifyUpsertConditions alterRow(insertIf(alterRowCondition == 'insert'),
	updateIf(alterRowCondition == 'update'),
	deleteIf(alterRowCondition == 'delete')) ~> AlterRow

행 변경 변환 후에는 데이터를 대상 데이터 저장소로 싱크할 수 있습니다.