다음을 통해 공유


Azure Portal을 사용하여 SQL Server의 여러 테이블에서 Azure SQL Database의 데이터베이스로 데이터를 증분 로드

적용 대상: Azure Data Factory Azure Synapse Analytics

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

이 자습서에서는 SQL Server 데이터베이스의 여러 테이블에서 Azure SQL Database의 데이터베이스로 델타 데이터를 로드하는 파이프라인이 있는 Azure Data Factory를 만듭니다.

이 자습서에서 수행하는 단계는 다음과 같습니다.

  • 원본 및 대상 데이터 저장소를 준비합니다.
  • 데이터 팩터리를 만듭니다.
  • 자체 호스팅 통합 런타임 만들기
  • Integration Runtime을 설치합니다.
  • 연결된 서비스만들기.
  • 원본, 싱크 및 워터마크 데이터 세트를 만듭니다.
  • 파이프라인을 만들고 실행하고 모니터링합니다.
  • 결과를 검토합니다.
  • 원본 테이블의 데이터를 추가 또는 업데이트합니다.
  • 파이프라인을 다시 실행하고 모니터링합니다.
  • 최종 결과를 검토합니다.

개요

이 솔루션을 만드는 중요한 단계는 다음과 같습니다.

  1. 워터마크 열을 선택합니다.

    원본 데이터 저장소에서 각 테이블에 대해 하나의 열을 선택합니다. 이 열은 모든 실행에 대해 새 레코드 또는 업데이트된 레코드를 식별하는 데 사용할 수 있습니다. 선택한 이 열의 데이터(예: last_modify_time 또는 ID)는 일반적으로 행을 만들거나 업데이트할 때 계속 증가합니다. 이 열의 최대 값은 워터마크로 사용됩니다.

  2. 워터마크 값을 저장할 데이터 저장소를 준비합니다.

    이 자습서에서는 SQL 데이터베이스에 워터마크 값을 저장합니다.

  3. 다음 작업을 사용하여 파이프라인을 만듭니다.

    a. 파이프라인에 매개 변수로 전달되는 원본 테이블 이름 목록을 반복하는 ForEach 작업을 만듭니다. 각 원본 테이블에 해당 테이블에 대한 델타 로드를 수행하는 다음 작업을 호출합니다.

    b. 두 가지 조회 작업을 만듭니다. 첫 번째 조회 작업을 사용하여 마지막 워터마크 값을 검색합니다. 두 번째 조회 작업을 사용하여 새 워터마크 값을 검색합니다. 이러한 워터마크 값은 복사 작업에 전달됩니다.

    c. 이전 워터마크 값보다 크고, 새 워터마크 값보다 작은 워터마크 열 값으로 원본 데이터 저장소의 행을 복사하는 복사 작업을 만듭니다. 그런 다음 원본 데이터 스토리지의 델타 데이터를 새 파일로 Azure Blob Storage에 복사합니다.

    d. 다음에 실행되는 파이프라인에 대한 워터마크 값을 업데이트하는 StoredProcedure 작업을 만듭니다.

    대략적인 솔루션 다이어그램은 다음과 같습니다.

    데이터 증분 로드

Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

사전 요구 사항

  • SQL Server. 이 자습서에서는 SQL Server 데이터베이스를 원본 데이터 저장소로 사용합니다.
  • Azure SQL Database. Azure SQL Database의 데이터베이스를 싱크 데이터 저장소로 사용합니다. SQL Database에 데이터베이스가 없는 경우 Azure SQL Database에서 데이터베이스 만들기에서 만드는 단계를 참조하세요.

SQL Server 데이터베이스에 원본 테이블 만들기

  1. SQL Server Management Studio를 열고 SQL Server 데이터베이스에 연결합니다.

  2. 서버 탐색기에서 데이터베이스를 마우스 오른쪽 단추로 클릭하고 새 쿼리를 선택합니다.

  3. 데이터베이스에 대해 다음 SQL 명령을 실행하여 customer_tableproject_table(이)라는 테이블을 만듭니다.

    create table customer_table
    (
        PersonID int,
        Name varchar(255),
        LastModifytime datetime
    );
    
    create table project_table
    (
        Project varchar(255),
        Creationtime datetime
    );
    
    INSERT INTO customer_table
    (PersonID, Name, LastModifytime)
    VALUES
    (1, 'John','9/1/2017 12:56:00 AM'),
    (2, 'Mike','9/2/2017 5:23:00 AM'),
    (3, 'Alice','9/3/2017 2:36:00 AM'),
    (4, 'Andy','9/4/2017 3:21:00 AM'),
    (5, 'Anny','9/5/2017 8:06:00 AM');
    
    INSERT INTO project_table
    (Project, Creationtime)
    VALUES
    ('project1','1/1/2015 0:00:00 AM'),
    ('project2','2/2/2016 1:23:00 AM'),
    ('project3','3/4/2017 5:16:00 AM');
    
    

데이터베이스에 대상 테이블 만들기

  1. SQL Server Management Studio를 열고 Azure SQL Database의 데이터베이스에 연결합니다.

  2. 서버 탐색기에서 데이터베이스를 마우스 오른쪽 단추로 클릭하고 새 쿼리를 선택합니다.

  3. 데이터베이스에 대해 다음 SQL 명령을 실행하여 customer_tableproject_table(이)라는 테이블을 만듭니다.

    create table customer_table
    (
        PersonID int,
        Name varchar(255),
        LastModifytime datetime
    );
    
    create table project_table
    (
        Project varchar(255),
        Creationtime datetime
    );
    
    

데이터베이스에 상위 워터마크 값을 저장할 또 다른 테이블 만들기

  1. 데이터베이스에 대해 다음 SQL 명령을 실행하여 워터마크 값을 저장할 watermarktable 테이블을 만듭니다.

    create table watermarktable
    (
    
        TableName varchar(255),
        WatermarkValue datetime,
    );
    
  2. 두 원본 테이블의 초기 워터마크 값을 워터마크 테이블에 삽입합니다.

    
    INSERT INTO watermarktable
    VALUES 
    ('customer_table','1/1/2010 12:00:00 AM'),
    ('project_table','1/1/2010 12:00:00 AM');
    
    

데이터베이스에 저장 프로시저 만들기

다음 명령을 실행하여 데이터베이스에 저장 프로시저를 만듭니다. 이 저장 프로시저는 파이프라인의 실행이 끝날 때마다 워터마크 값을 업데이트합니다.

CREATE PROCEDURE usp_write_watermark @LastModifiedtime datetime, @TableName varchar(50)
AS

BEGIN

UPDATE watermarktable
SET [WatermarkValue] = @LastModifiedtime 
WHERE [TableName] = @TableName

END

데이터베이스에 데이터 형식 및 추가 저장 프로시저 만들기

다음 쿼리를 실행하여 데이터베이스에 두 개의 데이터 형식과 두 개의 저장 프로시저를 만듭니다. 원본 테이블의 데이터를 대상 테이블에 병합하는 데 사용됩니다.

여정을 쉽게 시작할 수 있도록 테이블 변수를 통해 델타 데이터를 전달하는 이러한 저장 프로시저를 직접 사용한 다음, 대상 저장소에 병합합니다. 테이블 변수에 "많은" 수(100개 초과)의 델타 행이 저장될 수 없으니 주의하세요.

많은 수의 델타 행을 대상 저장소에 병합해야 하는 경우, 먼저 복사 작업을 사용하여 모든 델타 데이터를 대상 저장소의 임시 "준비" 테이블에 복사한 다음, 테이블 변수를 사용하지 않고 저장 프로시저를 직접 빌드하여 “준비” 테이블에서 “최종” 테이블로 병합하는 것이 좋습니다.

CREATE TYPE DataTypeforCustomerTable AS TABLE(
    PersonID int,
    Name varchar(255),
    LastModifytime datetime
);

GO

CREATE PROCEDURE usp_upsert_customer_table @customer_table DataTypeforCustomerTable READONLY
AS

BEGIN
  MERGE customer_table AS target
  USING @customer_table AS source
  ON (target.PersonID = source.PersonID)
  WHEN MATCHED THEN
      UPDATE SET Name = source.Name,LastModifytime = source.LastModifytime
  WHEN NOT MATCHED THEN
      INSERT (PersonID, Name, LastModifytime)
      VALUES (source.PersonID, source.Name, source.LastModifytime);
END

GO

CREATE TYPE DataTypeforProjectTable AS TABLE(
    Project varchar(255),
    Creationtime datetime
);

GO

CREATE PROCEDURE usp_upsert_project_table @project_table DataTypeforProjectTable READONLY
AS

BEGIN
  MERGE project_table AS target
  USING @project_table AS source
  ON (target.Project = source.Project)
  WHEN MATCHED THEN
      UPDATE SET Creationtime = source.Creationtime
  WHEN NOT MATCHED THEN
      INSERT (Project, Creationtime)
      VALUES (source.Project, source.Creationtime);
END

데이터 팩터리 만들기

  1. Microsoft Edge 또는 Google Chrome 웹 브라우저를 시작합니다. 현재 Data Factory UI는 Microsoft Edge 및 Google Chrome 웹 브라우저에서만 지원됩니다.

  2. 왼쪽 메뉴에서 리소스 만들기>통합>Data Factory를 선택합니다.

    따옴표로 묶은 데이터 팩터리 선택 새 항목(&S) 창

  3. 새 데이터 팩터리 페이지에서 이름에 대해 ADFMultiIncCopyTutorialDF를 입력합니다.

    Azure Data Factory의 이름은 전역적으로 고유해야 합니다. 다음 오류와 함께 빨간색 느낌표가 표시되면, 데이터 팩터리 이름(예: yournameADFIncCopyTutorialDF)을 변경하고 다시 만듭니다. Data Factory 아티팩트에 대한 명명 규칙은 Data Factory - 명명 규칙 문서를 참조하세요.

    Data factory name "ADFIncCopyTutorialDF" is not available

  4. 데이터 팩터리를 만들려는 위치에 Azure 구독을 선택합니다.

  5. 리소스 그룹에 대해 다음 단계 중 하나를 수행합니다.

    • 기존 항목 사용을 선택하고 드롭다운 목록에서 기존 리소스 그룹을 선택합니다.
    • 새로 만들기를 선택하고, 리소스 그룹의 이름을 입력합니다.
      리소스 그룹에 대한 자세한 내용은 리소스 그룹을 사용하여 Azure 리소스 관리를 참조하세요.
  6. 버전에 대해 V2를 선택합니다.

  7. 데이터 팩터리의 위치 를 선택합니다. 지원되는 위치만 드롭다운 목록에 표시됩니다. 데이터 팩터리에서 사용되는 데이터 저장소(Azure Storage, Azure SQL Database 등) 및 계산(HDInsight 등)은 다른 지역에 있을 수 있습니다.

  8. 만들기를 클릭합니다.

  9. 만들기가 완료되면 이미지와 같은 Data Factory 페이지가 표시됩니다.

    Azure Data Factory Studio 열기 타일이 있는 Azure Data Factory 홈페이지

  10. Azure Data Factory Studio 열기 타일에서 열기를 선택하여 별도의 탭에서 Azure Data Factory UI(사용자 인터페이스)를 시작합니다.

자체 호스팅 통합 런타임 만들기

프라이빗 네트워크(온-프레미스)의 데이터 저장소에서 Azure 데이터 저장소로 데이터를 이동할 때 온-프레미스 환경에 자체 호스팅 IR(통합 런타임)을 설치합니다. 자체 호스팅 IR은 프라이빗 네트워크와 Azure 간에 데이터를 이동합니다.

  1. Azure Data Factory UI의 홈페이지에서 맨 왼쪽 창에 있는 관리 탭을 선택합니다.

    홈 페이지 관리 단추

  2. 왼쪽 창에서 통합 런타임을 선택한 다음, +새로 만들기를 선택합니다.

    Integration Runtime 만들기

  3. Integration Runtime 설정 창에서 데이터 이동을 수행하고 활동을 외부 계산으로 디스패치합니다를 선택하고, 계속을 클릭합니다.

  4. 자체 호스팅을 선택하고 계속을 클릭합니다.

  5. 이름에 대해 MySelfHostedIR을 입력하고 만들기를 클릭합니다.

  6. 옵션 1: 빠른 설치 섹션에서 Click here to launch the express setup for this computer(이 컴퓨터에 대한 빠른 설치를 시작하려면 여기를 클릭하세요.)를 클릭합니다.

    Express 설치 링크 클릭

  7. Integration Runtime(자체 호스팅) 빠른 설치 창에서 닫기를 클릭합니다.

    통합 런타임 설정 - 성공

  8. 웹 브라우저의 Integration Runtime 설정 창에서 마침을 클릭합니다.

  9. 통합 런타임 목록에 MySelfHostedIR이 표시되는지 확인합니다.

연결된 서비스 생성

데이터 팩터리에서 연결된 서비스를 만들어 데이터 저장소를 연결하고 컴퓨팅 서비스를 데이터 팩터리에 연결합니다. 이 섹션에서는 SQL Server 데이터베이스 및 Azure SQL Database의 데이터베이스에 연결된 서비스를 만듭니다.

SQL Server에 연결된 서비스 만들기

이 단계에서는 SQL Server 데이터베이스를 데이터 팩터리에 연결합니다.

  1. 연결 창의 통합 런타임 탭에서 연결된 서비스 탭으로 전환하고 + 새로 만들기를 클릭합니다.

    새 연결된 서비스.

  2. 새 연결된 서비스 창에서 SQL Server를 선택하고 계속을 클릭합니다.

  3. 새 연결된 서비스 창에서 다음 단계를 수행합니다.

    1. 이름에 대해 SqlServerLinkedService를 입력합니다.
    2. 통합 런타임을 통해 연결에 대해 MySelfHostedIR을 선택합니다. 이는 중요한 단계입니다. 기본 통합 런타임은 온-프레미스 데이터 저장소에 연결할 수 없습니다. 앞에서 만든 자체 호스팅 통합 런타임을 사용합니다.
    3. 서버 이름의 경우 SQL Server 데이터베이스가 있는 컴퓨터의 이름을 입력합니다.
    4. 데이터베이스 이름의 경우 원본 데이터가 있는 SQL Server에 데이터베이스의 이름을 입력합니다. 테이블을 만들었고 필수 구성 요소의 일부로 이 데이터베이스에 데이터를 삽입했습니다.
    5. 인증 유형의 경우 데이터베이스에 연결하는 데 사용하려는 인증 유형을 선택합니다.
    6. 사용자 이름의 경우 SQL Server 데이터베이스에 대한 액세스가 있는 사용자의 이름을 입력합니다. 슬래시 문자(\)를 사용자 계정 또는 서버 이름에 사용해야 할 경우 이스케이프 문자(\)를 사용합니다. 예제는 mydomain\\myuser입니다.
    7. 암호의 경우 사용자에 대한 암호를 입력합니다.
    8. 데이터 팩터리가 SQL Server 데이터베이스에 연결할 수 있는지를 테스트하려면 연결 테스트를 클릭합니다. 연결이 성공할 때까지 모든 오류를 수정합니다.
    9. 연결된 서비스를 저장하려면 마침을 클릭합니다.

Azure SQL Database 연결된 서비스 만들기

마지막 단계에서는 SQL Server 데이터베이스를 데이터 팩터리에 연결하기 위한 연결된 서비스를 만듭니다. 이 단계에서는 대상/싱크 데이터베이스를 데이터 팩터리에 연결합니다.

  1. 연결 창의 통합 런타임 탭에서 연결된 서비스 탭으로 전환하고 + 새로 만들기를 클릭합니다.

  2. 새 연결된 서비스 창에서 Azure SQL Database를 선택하고 계속을 클릭합니다.

  3. 새 연결된 서비스 창에서 다음 단계를 수행합니다.

    1. 이름에 대해 AzureSqlDatabaseLinkedService를 입력합니다.
    2. 서버 이름의 경우 드롭다운 목록에서 서버의 이름을 선택합니다.
    3. 데이터베이스 이름의 경우 필수 구성 요소의 일부로 customer_table 및 project_table을 만든 데이터베이스를 선택합니다.
    4. 사용자 이름의 경우 데이터베이스에 대한 액세스 권한이 있는 사용자의 이름을 입력합니다.
    5. 암호의 경우 사용자에 대한 암호를 입력합니다.
    6. 데이터 팩터리가 SQL Server 데이터베이스에 연결할 수 있는지를 테스트하려면 연결 테스트를 클릭합니다. 연결이 성공할 때까지 모든 오류를 수정합니다.
    7. 연결된 서비스를 저장하려면 마침을 클릭합니다.
  4. 두 개의 연결된 서비스가 목록에 표시되는지 확인합니다.

    두 개의 연결된 서비스

데이터 세트 생성

이 단계에서는 데이터 원본, 데이터 대상 및 워터마크를 저장할 위치를 나타내는 데이터 세트를 만듭니다.

원본 데이터 세트 만들기

  1. 왼쪽 창에서 +(더하기), 데이터 세트를 차례로 클릭합니다.

  2. 새 데이터 세트 창에서 SQL Server를 선택하고 계속을 클릭합니다.

  3. 웹 브라우저에 데이터 세트를 구성하기 위해 열린 새 탭이 표시됩니다. 또한 트리 뷰에도 데이터 세트가 표시됩니다. 아래쪽 속성 창의 일반 탭에서 이름에 대해 SourceDataset를 입력합니다.

  4. 속성 창에서 연결 탭으로 전환하고, 연결된 서비스에 대해 SqlServerLinkedService를 선택합니다. 여기에서 테이블을 선택하지 마십시오. 파이프라인의 복사 작업은 전체 테이블을 로드하는 대신 SQL 쿼리를 사용하여 데이터를 로드합니다.

    원본 데이터 세트 - 연결

싱크 데이터 세트 만들기

  1. 왼쪽 창에서 +(더하기), 데이터 세트를 차례로 클릭합니다.

  2. 새 데이터 세트 창에서 Azure SQL Database를 선택하고 계속을 클릭합니다.

  3. 웹 브라우저에 데이터 세트를 구성하기 위해 열린 새 탭이 표시됩니다. 또한 트리 뷰에도 데이터 세트가 표시됩니다. 아래쪽 속성 창의 일반 탭에서 이름에 대해 SinkDataset를 입력합니다.

  4. 속성 창에서 매개 변수 탭으로 전환하고 다음 단계를 수행합니다.

    1. Create/update 매개 변수 섹션에서 새로 만들기를 클릭합니다.

    2. 이름에 대해 SinkTableName을 입력하고 형식에 대해 문자열을 입력합니다. 이 데이터 세트는 매개 변수로 SinkTableName을 사용합니다. SinkTableName 매개 변수는 런타임에 동적으로 파이프라인에 의해 설정됩니다. 파이프라인의 ForEach 작업은 테이블 이름 목록을 반복하고 반복할 때마다 테이블 이름을 이 데이터 세트에 전달합니다.

      싱크 데이터 세트 - 속성

  5. 속성 창에서 연결 탭으로 전환하고, 연결된 서비스에 대해 AzureSqlDatabaseLinkedService를 선택합니다. 테이블 속성에서 동적 콘텐츠 추가를 클릭합니다.

  6. 동적 콘텐츠 추가 창의 매개 변수 섹션에서 SinkTableName를 선택 합니다.

  7. 마침을 클릭하면 “@dataset().SinkTableName”이 테이블 이름으로 표시됩니다.

    싱크 데이터 세트 - 연결

워터마크에 대한 데이터 세트 만들기

이 단계에서는 상위 워터마크 값을 저장하기 위한 데이터 세트를 만듭니다.

  1. 왼쪽 창에서 +(더하기), 데이터 세트를 차례로 클릭합니다.

  2. 새 데이터 세트 창에서 Azure SQL Database를 선택하고 계속을 클릭합니다.

  3. 아래쪽 속성 창의 일반 탭에서 이름에 대해 WatermarkDataset를 입력합니다.

  4. 연결 탭으로 전환하고 다음 단계를 수행합니다.

    1. 연결된 서비스에 대해 AzureSqlDatabaseLinkedService를 선택합니다.

    2. 테이블에 대해 [dbo].[watermarktable]을 선택합니다.

      워터마크 데이터 세트 - 연결

파이프라인을 만듭니다.

파이프라인에서는 테이블 이름 목록을 매개 변수로 사용합니다. ForEach 작업은 테이블 이름 목록을 반복하고 다음 작업을 수행합니다.

  1. 조회 작업을 사용하여 이전 워터마크 값(초기 값 또는 마지막 반복에서 사용된 값)을 검색합니다.

  2. 조회 작업을 사용하여 새로운 워터마크 값(원본 테이블의 워터마크 열의 최대값)을 검색합니다.

  3. 복사 작업을 사용하여 원본 데이터베이스에서 대상 데이터베이스로 2개의 워터마크 값 사이에 데이터를 복사합니다.

  4. StoredProcedure 작업을 사용하여 다음 반복의 첫 번째 단계에 사용할 이전 워터마크 값을 업데이트합니다.

파이프라인 만들기

  1. 왼쪽 창에서 +(더하기), 파이프라인을 차례로 클릭합니다.

  2. 속성 아래의 일반 패널에서 이름IncrementalCopyPipeline을 지정합니다. 그런 다음, 오른쪽 위에 있는 속성 아이콘을 클릭하여 패널을 축소합니다.

  3. 매개 변수 탭에서 다음 단계를 수행합니다.

    1. +새로 만들기를 클릭합니다.
    2. 매개 변수 이름에 대해 tableList를 입력합니다.
    3. 매개 변수 형식에 대해 Array를 선택합니다.
  4. 활동 도구 상자에서 반복 및 조건부를 펼치고, ForEach 활동을 파이프라인 디자이너 화면으로 끌어서 놓습니다. 속성 창의 일반 탭에서 IterateSQLTables를 입력합니다.

  5. 설정 탭으로 전환하고 항목에 대해 @pipeline().parameters.tableList를 입력합니다. ForEach 작업은 테이블 목록을 반복하고 증분 복사 작업을 수행합니다.

    ForEach 작업 - 설정

  6. 아직 선택되지 않은 경우 파이프라인에서 ForEach 활동을 선택합니다. 편집(연필 아이콘) 단추를 클릭합니다.

  7. 활동 도구 상자에서 일반을 펼치고, 조회 활동을 파이프라인 디자이너 화면으로 끌어서 놓고, Name에 대해 LookupOldWaterMarkActivity를 입력합니다.

  8. 속성 창에서 설정 탭으로 전환하고 다음 단계를 수행합니다.

    1. 원본 데이터 세트에 대해 WatermarkDataset을 선택합니다.

    2. 쿼리 사용에 대해 쿼리를 선택합니다.

    3. 쿼리에 대해 다음 SQL 쿼리를 입력합니다.

      select * from watermarktable where TableName  =  '@{item().TABLE_NAME}'
      

      첫 번째 조회 활동 - 설정

  9. 활동 도구 상자에서 조회 활동을 끌어서 놓고 이름에 대해 LookupNewWaterMarkActivity를 입력합니다.

  10. 설정 탭으로 전환합니다.

    1. 원본 데이터 세트에 대해 SourceDataset를 선택합니다.

    2. 쿼리 사용에 대해 쿼리를 선택합니다.

    3. 쿼리에 대해 다음 SQL 쿼리를 입력합니다.

      select MAX(@{item().WaterMark_Column}) as NewWatermarkvalue from @{item().TABLE_NAME}
      

      두 번째 조회 작업 - 설정

  11. 활동 도구 상자에서 복사 활동을 끌어서 놓고 이름에 대해 IncrementalCopyActivity를 입력합니다.

  12. 조회 활동을 하나씩 복사 활동에 연결합니다. 연결하려면 조회 활동에 연결된 녹색 상자를 끌어서 복사 활동에 놓습니다. 복사 활동의 테두리 색이 파란색으로 변경되면 마우스 단추를 놓습니다.

    조회 활동을 복사 작업 연결

  13. 파이프라인에서 복사 활동을 선택합니다. 속성 창의 원본 탭으로 전환합니다.

    1. 원본 데이터 세트에 대해 SourceDataset를 선택합니다.

    2. 쿼리 사용에 대해 쿼리를 선택합니다.

    3. 쿼리에 대해 다음 SQL 쿼리를 입력합니다.

      select * from @{item().TABLE_NAME} where @{item().WaterMark_Column} > '@{activity('LookupOldWaterMarkActivity').output.firstRow.WatermarkValue}' and @{item().WaterMark_Column} <= '@{activity('LookupNewWaterMarkActivity').output.firstRow.NewWatermarkvalue}'        
      

      복사 작업 - 원본 설정

  14. 싱크 탭으로 전환하고, 싱크 데이터 세트에 대해 SinkDataset을 선택합니다.

  15. 다음 단계를 수행합니다.

    1. 데이터 세트 속성에서 SinkTableName 매개 변수에 @{item().TABLE_NAME}을 입력합니다.

    2. 저장 프로시저 이름 속성에 @{item().StoredProcedureNameForMergeOperation}을 입력합니다.

    3. 테이블 형식 속성에 @{item().TableType}을 입력합니다.

    4. 테이블 형식 매개 변수 이름@{item().TABLE_NAME}을 입력합니다.

      복사 작업 - 매개 변수

  16. 저장 프로시저 활동을 활동 도구 상자에서 파이프라인 디자이너 화면으로 끌어서 놓습니다. 복사 활동을 저장 프로시저 활동에 연결합니다.

  17. 파이프라인에서 저장 프로시저 활동을 선택하고 속성 창의 일반 탭에서 이름에 대해 StoredProceduretoWriteWatermarkActivity를 입력합니다.

  18. SQL 계정 탭으로 전환하고, 연결된 서비스에 대해 AzureSqlDatabaseLinkedService를 선택합니다.

    저장 프로시저 작업 - SQL 계정

  19. 저장 프로시저 탭으로 전환하고 다음 단계를 수행합니다.

    1. 저장 프로시저 이름[dbo].[usp_write_watermark]를 입력합니다.

    2. 가져오기 매개 변수를 선택합니다.

    3. 매개 변수에 대해 다음 값을 지정합니다.

      이름 타입
      LastModifiedtime DateTime @{activity('LookupNewWaterMarkActivity').output.firstRow.NewWatermarkvalue}
      TableName 문자열 @{activity('LookupOldWaterMarkActivity').output.firstRow.TableName}

      저장 프로시저 활동 - 저장 프로시저 설정

  20. 만든 엔터티를 Data Factory에 게시하려면 모두 게시를 선택합니다.

  21. 게시됨 메시지가 표시될 때까지 기다립니다. 알림을 보려면 알림 표시 링크를 클릭합니다. X를 클릭하여 알림 창을 닫습니다.

파이프라인 실행

  1. 파이프라인에 대한 도구 모음에서 트리거 추가, 지금 트리거를 차례로 클릭합니다.

  2. 파이프라인 실행 창에서 tableList 매개 변수에 대해 다음 값을 입력하고 마침을 클릭합니다.

    [
        {
            "TABLE_NAME": "customer_table",
            "WaterMark_Column": "LastModifytime",
            "TableType": "DataTypeforCustomerTable",
            "StoredProcedureNameForMergeOperation": "usp_upsert_customer_table"
        },
        {
            "TABLE_NAME": "project_table",
            "WaterMark_Column": "Creationtime",
            "TableType": "DataTypeforProjectTable",
            "StoredProcedureNameForMergeOperation": "usp_upsert_project_table"
        }
    ]
    

    파이프라인 실행 인수

파이프라인 모니터링

  1. 왼쪽의 모니터 탭으로 전환합니다. 수동 트리거로 트리거된 파이프라인 실행이 표시됩니다. 파이프라인 이름 열 아래의 링크를 사용하여 활동 세부 정보를 보고 파이프라인을 다시 실행할 수 있습니다.

  2. 파이프라인 실행과 관련된 활동 실행을 보려면 파이프라인 이름 열에서 링크를 선택합니다. 활동 실행에 대한 자세한 내용을 보려면 활동 이름 열에서 세부 정보 링크(안경 아이콘)를 선택합니다.

  3. 파이프라인 실행 보기로 돌아가려면 위쪽에 있는 모든 파이프라인 실행을 선택합니다. 보기를 새로 고치려면 새로 고침을 선택합니다.

결과 검토

SQL Server Management Studio에서 대상 SQL 데이터베이스에 대해 다음 쿼리를 실행하여 데이터가 원본 테이블에서 대상 테이블로 복사되었는지 확인합니다.

쿼리

select * from customer_table

출력

===========================================
PersonID	Name	LastModifytime
===========================================
1	        John	2017-09-01 00:56:00.000
2	        Mike	2017-09-02 05:23:00.000
3	        Alice	2017-09-03 02:36:00.000
4	        Andy	2017-09-04 03:21:00.000
5	        Anny	2017-09-05 08:06:00.000

쿼리

select * from project_table

출력

===================================
Project	    Creationtime
===================================
project1	2015-01-01 00:00:00.000
project2	2016-02-02 01:23:00.000
project3	2017-03-04 05:16:00.000

쿼리

select * from watermarktable

출력

======================================
TableName	    WatermarkValue
======================================
customer_table	2017-09-05 08:06:00.000
project_table	2017-03-04 05:16:00.000

두 테이블의 워터마크 값이 업데이트되었습니다.

원본 테이블에 데이터 추가

원본 SQL Server 데이터베이스에 대해 다음 쿼리를 실행하여 customer_table의 기존 행을 업데이트합니다. project_table에 새 행을 삽입합니다.

UPDATE customer_table
SET [LastModifytime] = '2017-09-08T00:00:00Z', [name]='NewName' where [PersonID] = 3

INSERT INTO project_table
(Project, Creationtime)
VALUES
('NewProject','10/1/2017 0:00:00 AM');

파이프라인 다시 실행

  1. 웹 브라우저 창에서 왼쪽의 편집 탭으로 전환합니다.

  2. 파이프라인에 대한 도구 모음에서 트리거 추가, 지금 트리거를 차례로 클릭합니다.

  3. 파이프라인 실행 창에서 tableList 매개 변수에 대해 다음 값을 입력하고 마침을 클릭합니다.

    [
        {
            "TABLE_NAME": "customer_table",
            "WaterMark_Column": "LastModifytime",
            "TableType": "DataTypeforCustomerTable",
            "StoredProcedureNameForMergeOperation": "usp_upsert_customer_table"
        },
        {
            "TABLE_NAME": "project_table",
            "WaterMark_Column": "Creationtime",
            "TableType": "DataTypeforProjectTable",
            "StoredProcedureNameForMergeOperation": "usp_upsert_project_table"
        }
    ]
    

파이프라인 다시 모니터링

  1. 왼쪽의 모니터 탭으로 전환합니다. 수동 트리거로 트리거된 파이프라인 실행이 표시됩니다. 파이프라인 이름 열 아래의 링크를 사용하여 활동 세부 정보를 보고 파이프라인을 다시 실행할 수 있습니다.

  2. 파이프라인 실행과 관련된 활동 실행을 보려면 파이프라인 이름 열에서 링크를 선택합니다. 활동 실행에 대한 자세한 내용을 보려면 활동 이름 열에서 세부 정보 링크(안경 아이콘)를 선택합니다.

  3. 파이프라인 실행 보기로 돌아가려면 위쪽에 있는 모든 파이프라인 실행을 선택합니다. 보기를 새로 고치려면 새로 고침을 선택합니다.

최종 결과 검토

SQL Server Management Studio에서 대상 SQL 데이터베이스에 대해 다음 쿼리를 실행하여 업데이트된/새로운 데이터가 원본 테이블에서 대상 테이블로 복사되었는지 확인합니다.

쿼리

select * from customer_table

출력

===========================================
PersonID	Name	LastModifytime
===========================================
1	        John	2017-09-01 00:56:00.000
2	        Mike	2017-09-02 05:23:00.000
3	        NewName	2017-09-08 00:00:00.000
4	        Andy	2017-09-04 03:21:00.000
5	        Anny	2017-09-05 08:06:00.000

3번 PersonID에 대한 NameLastModifytime의 새 값을 확인합니다.

쿼리

select * from project_table

출력

===================================
Project	    Creationtime
===================================
project1	2015-01-01 00:00:00.000
project2	2016-02-02 01:23:00.000
project3	2017-03-04 05:16:00.000
NewProject	2017-10-01 00:00:00.000

NewProject 항목이 project_table에 추가되었습니다.

쿼리

select * from watermarktable

출력

======================================
TableName	    WatermarkValue
======================================
customer_table	2017-09-08 00:00:00.000
project_table	2017-10-01 00:00:00.000

두 테이블의 워터마크 값이 업데이트되었습니다.

이 자습서에서 다음 단계를 수행했습니다.

  • 원본 및 대상 데이터 저장소를 준비합니다.
  • 데이터 팩터리를 만듭니다.
  • 자체 호스팅 IR(통합 런타임)을 만듭니다.
  • Integration Runtime을 설치합니다.
  • 연결된 서비스만들기.
  • 원본, 싱크 및 워터마크 데이터 세트를 만듭니다.
  • 파이프라인을 만들고 실행하고 모니터링합니다.
  • 결과를 검토합니다.
  • 원본 테이블의 데이터를 추가 또는 업데이트합니다.
  • 파이프라인을 다시 실행하고 모니터링합니다.
  • 최종 결과를 검토합니다.

Azure에서 Spark 클러스터를 사용하여 데이터를 변환하는 방법을 알아보려면 다음 자습서로 진행하세요.