웨어하우스 간 종속성 개발 및 배포

이 문서에서는 Visual Studio Code SQL 데이터베이스 프로젝트를 사용하여 웨어하우스 간 종속성을 모델링하고 배포하는 방법을 알아봅니다. 두 개의 기존 웨어하우스 프로젝트에서 시작하여 데이터베이스 참조 및 필요한 경우 배포 전 및 배포 후 스크립트를 사용하여 해당 프로젝트 간에 단방향 종속성을 구성합니다.

이 문서는 Visual Studio Code 개념을 기반으로 하며, 단일 웨어하우스 프로젝트를 빌드하고 게시하는 것이 이미 편안하다고 가정합니다.

필수 조건

시작하기 전에 다음을 확인합니다.

  • 동일한 작업 영역에 두 개의 패브릭 웨어하우스 를 만듭니다.
    • 새 샘플 웨어하우스를 만들려면 Microsoft Fabric 참조하세요.
  • Visual Studio Code 각 웨어하우스에 대해 데이타베이스 프로젝트 만들거나 추출합니다.
    • 기존 데이터 웨어하우스나 새 웨어하우스용 데이터베이스 프로젝트를 만들려면 Visual Studio Code의 웨어하우스 프로젝트 개발을 참조하세요.
  • 워크스테이션에 Visual Studio Code 설치합니다.
  • .NET SDK를 설치하여 데이터베이스 프로젝트를 빌드하고 게시합니다.
  • SQL 데이터베이스 프로젝트 및 SQL Server(mssql) 두 개의 Visual Studio Code 확장을 설치합니다.
    • "SQL Database 프로젝트" 또는 "SQL Server(mssql)"를 검색하여 Visual Studio Code 마켓플레이스 내에서 직접 필요한 확장을 설치할 수 있습니다.
  • 웨어하우스 프로젝트는 유효성을 검사하고 빌드하며 Visual Studio Code 게시할 수 있습니다.

비고

이 문서에서는 Visual Studio Code warehouse 프로젝트 및 Git에서 일반 코드 프로젝트로 버전을 지정하는 방법에 중점을 둡니다. 작업 공간과 창고 아이템을 위한 Fabric Git 통합은 개발 및 배포와 Git 통합에서 별도로 다루고 있습니다. 이 글은 Fabric 작업 공간이 배포 대상이고 T-SQL 스키마가 하나 이상의 Visual Studio Code 프로젝트에 존재하며, Git에서 버전 관리를 한다고 가정합니다.

이 문서에서는 Lakehouse의 SQL 분석 엔드포인트에 대한 웨어하우스 간 개발을 다루지 않습니다. Lakehouse 테이블 및 SQL 분석 엔드포인트 개체는 웨어하우스 프로젝트와 동일한 방식으로 소스 제어에서 추적되는 개체가 아닙니다. Fabric 네이티브 환경 및 클라이언트 도구에서 완전한 git 통합 및 배포 지원을 위해 데이터베이스 프로젝트와 함께 Warehouse 항목을 사용합니다.

시나리오: Zava Analytics 교차 도메인 창고

Zava Analytics는 다음 두 개의 비즈니스 도메인을 사용합니다.

  • 판매 – 고객 주문, 수익 및 파이프라인 메트릭.
  • 마케팅 – 캠페인, 채널 및 참여 메트릭.

각 도메인에는 다음이 있습니다.

  • 동일한 작업 영역의 패브릭 웨어하우스 :

    • ZavaSalesWarehouse
    • ZavaMarketingWarehouse
  • Visual Studio Code 데이타베이스 프로젝트:

    • Zava.Sales.Warehouse
    • Zava.Marketing.Warehouse

엔드투엔드 ELT 및 보고를 빌드하려면 각 도메인에 다른 도메인의 데이터에 액세스하기 위한 읽기 전용 보기 가 필요합니다.

  • Sales 에는 고객의 마케팅 참여가 필요합니다.
  • Marketing 에는 캠페인별 판매 성과가 필요합니다.

다음을 수행해야 합니다.

  • 데이터베이스 참조 를 통해 단방향 웨어하우스 간 종속성을 설정합니다.
  • 순환 종속성을 방지합니다.

웨어하우스 간의 종속성이 단방향인지 확인

각 웨어하우스 쌍에 대해 논리적 종속성의 방향을 선택합니다.

예제:

  • Sales은 Marketing에 참여 데이터를 의존합니다.
  • Marketing Sales 필요한 개체에 의존하지 않습니다.

실제로:

Zava.Sales.Warehouse는 에 대한 Zava.Marketing.Warehouse를 가지고 있습니다.

  • 웨어하우스의 T-SQL은 Sales 다음과 같은 세 부분으로 구성된 이름을 사용할 수 있습니다.
    SELECT * FROM ZavaMarketingWarehouse.Marketing.CampaignEngagement
    
  • Zava.Marketing.Warehouse는 배포 시 종속성 주기를 강제로 적용하는 개체를 참조 Sales.

팁 (조언)

각 웨어하우스 쌍에 대해 간단한 화살표 다이어그램(Sales → Marketing)을 그립니다. 같은 유형의 객체에 대해 양방향을 가리키는 화살표를 발견하면, 설계를 리팩터링하여 일방향 의존성을 복원하세요.

순환 종속성 방지

웨어하우스 A와 웨어하우스 B가 엔진이 단일 배포에서 확인할 수 없는 방식으로 서로 종속될 때 순환 종속성이 발생합니다.

문제 예제(이 작업을 수행하지 않음):

  • ZavaSalesWarehouse.dbo.CustomerRollup 보기:
    CREATE VIEW dbo.CustomerRollup AS
    SELECT  c.CustomerId,
            c.TotalRevenue,
            m.LastCampaignId
    FROM    dbo.CustomerRevenue AS c
    LEFT OUTER JOIN   
            ZavaMarketingWarehouse.dbo.CustomerEngagement AS m
            ON c.CustomerId = m.CustomerId;
    
  • ZavaMarketingWarehouse.dbo.CampaignAttribution 보기:
    CREATE VIEW dbo.CampaignAttribution AS
    SELECT  m.CampaignId,
            SUM(s.TotalRevenue) AS RevenueAttributed
    FROM    dbo.Campaigns AS m
    LEFT OUTER JOIN    
            ZavaSalesWarehouse.dbo.CustomerRollup AS s
            ON m.CampaignId = s.LastCampaignId
    GROUP BY m.CampaignId;
    

이 안티패턴에서:

  • CustomerRollup 의 판매는 CustomerEngagement마케팅에 따라 달라집니다.
  • CampaignAttribution 마케팅은 CustomerRollup영업에 따라 달라집니다.

이 안티패턴으로 인해 영업 보기 → 마케팅 보기 → 영업 보기가 다시 생성됩니다.

지침:

웨어하우스 간의 상호 종속성을 일반 스키마 수준 개체로 모델링하지 마세요. 이러한 종류의 논리가 진정으로 필요한 경우, 종속성의 한 부분을 다음으로 이동하십시오.

  • 배포 후 스크립트 또는
  • 쿼리 시 두 웨어하우스를 조인하는 다운스트림 의미 체계 모델 또는 보고서 입니다.

배포 전 및 배포 후 스크립트를 사용하여 배포에 민감한 교차 창고 로직을 실행하세요

웨어하우스 배포는 개체별 부분 배포가 아닌 전체 스키마 차이에 기반한 작업이므로, 창고 간 항목은 신중하게 처리합니다.

웨어하우스 A와 웨어하우스 B에 서로 의존하는 개체가 모두 필요한 경우:

  • 각 웨어하우스 프로젝트에서 핵심 테이블 및 핵심 뷰 를 유지합니다.
  • 순환을 초래하는 브리지 뷰 또는 유틸리티 개체를 하나의 프로젝트로 배포 전 또는 배포 후 스크립트로 이동합니다.
  • 이러한 스크립트가 idempotent 이고 다시 실행해도 안전한지 확인합니다.

예제 패턴:

  • 배포 전 스크립트: 스키마 변경으로 인해 중단될 수 있는 문제를 방지하기 위해 데이터 웨어하우스 간 보기를 일시적으로 삭제합니다.
  • 배포 후 스크립트: 두 웨어하우스가 모두 배포된 후 웨어하우스 간 보기를 다시 만들거나 업데이트합니다.

자세한 내용 및 예제는 Fabric Data Warehouse 대한 배포 전 및 배포 후 스크립트를 참조하세요.

패턴 1: 데이터베이스 참조를 통한 직접 웨어하우스 간 참조

이 패턴에서는 데이터베이스 참조를 사용하여 데이터베이스 프로젝트에서 일방향 의존성을 직접 모델링합니다.

1단계: 두 개의 기존 웨어하우스 프로젝트에서 시작

다음이 이미 있어야 합니다.

  • Zava.Sales.Warehouse 에서 ZavaSalesWarehouse로 배포됨
  • Zava.Marketing.Warehouse 에서 ZavaMarketingWarehouse로 배포됨

Visual Studio Code의 창고 프로젝트 개발 단계를 사용하여 각 프로젝트를 생성하거나 추출할 수 있습니다.

2단계: 영업에서 마케팅에 데이터베이스 참조 추가

  • Visual Studio Code 데이타베이스 프로젝트 보기를 엽니다.
  • 프로젝트를 마우스 오른쪽 단추로 Zava.Sales.Warehouse 클릭합니다.
  • 데이터베이스 참조 추가를 선택합니다...
  • 다음 옵션 중 하나를 선택합니다.
    • 현재 작업 공간의 데이터베이스 프로젝트(참조된 데이터베이스 프로젝트도 Visual Studio Code에서 열어보세요), 또는
    • 데이터 계층 애플리케이션 (.dacpac)(.dacpac 웨어하우스용 Marketing를 빌드한 경우 이 옵션을 사용하세요).
  • 참조 옵션을 설정합니다.
    • 참조 형식: 동일한 서버, 다른 데이터베이스.
    • 데이터베이스 이름 또는 변수: 예를 들어 [$(MarketingWarehouseName)]SQLCMD 변수를 사용합니다.
  • Sales 프로젝트를 저장하고 다시 빌드합니다.

.sqlproj 파일에 다음과 유사한 항목이 표시됩니다.

<ItemGroup>
  <ArtifactReference Include="..\Zava.Marketing.Warehouse\bin\Debug\Zava.Marketing.Warehouse.dacpac">
    <DatabaseVariableLiteralValue>$(MarketingWarehouseName)</DatabaseVariableLiteralValue>
  </ArtifactReference>
</ItemGroup>
<ItemGroup>
  <SqlCmdVariable Include="MarketingWarehouseName">
    <DefaultValue>ZavaMarketingWarehouse</DefaultValue>
  </SqlCmdVariable>
</ItemGroup>

팁 (조언)

원격 웨어하우스 이름에 SQLCMD 변수를 사용하면, 개발, 테스트, 운영 등 모든 환경에서 동일한 프로젝트를 재사용할 수 있습니다.

3단계: Sales 모듈에서 웨어하우스 간 뷰 만들기

Sales 프로젝트에, Marketing 웨어하우스에서 읽는 뷰를 추가합니다.

-- schema/Views/dbo.CustomerEngagementFact.sql
CREATE VIEW [dbo].[CustomerEngagementFact] AS
SELECT
    s.CustomerId,
    s.TotalRevenue,
    m.LatestChannel,
    m.LastEngagementDate
FROM dbo.CustomerRevenue AS s
JOIN [$(MarketingWarehouseName)].[dbo].[CustomerEngagement] AS m
    ON s.CustomerId = m.CustomerId;

주요 정보:

  • 세 부분으로 구성된 이름은 [$(MarketingWarehouseName)].[dbo].[CustomerEngagement]패브릭 SQL 편집기에서 웨어하우스 간 쿼리에 사용되는 T-SQL 패턴과 일치합니다.
  • DacFx는 데이터베이스 참조를 통해 외부 데이터베이스를 해결합니다.

SQL71501 해결되지 않은 참조 오류가 없 도록 프로젝트를 빌드합니다.

4단계: 마케팅 웨어하우스를 게시한 다음 영업을 게시하십시오.

배포 문제를 방지하려면 다음을 수행합니다.

  • 먼저 빌드 및 게시Zava.Marketing.Warehouse
    • 프로젝트 → 빌드를 마우스 오른쪽 단추로 클릭합니다.
    • 프로젝트를 마우스 오른쪽 단추로 → 게시 → 선택합니다 ZavaMarketingWarehouse.
  • 배포가 성공하면 Marketing다음을 빌드하고 게시Zava.Sales.Warehouse합니다.
    • 프로젝트 → 빌드를 마우스 오른쪽 단추로 클릭합니다.
    • 프로젝트를 마우스 오른쪽 단추로 → 게시 → 선택합니다 ZavaSalesWarehouse.

결과 배포 흐름은 다음과 같습니다.

Zava.Marketing.Warehouse (외부 종속성 없음) → Zava.Sales.Warehouse (Marketing에 종속됨)

이제 ZavaSalesWarehouse의 모든 T-SQL 쿼리는 dbo.CustomerEngagementFact 보기를 사용할 수 있으며, 이 보기는 내부적으로 웨어하우스 간 T-SQL을 사용하여 Marketing 웨어하우스에서 데이터를 읽습니다.

학습 계속

  • 이 패턴을 소스 관리 및 CI/CD 개발및 배포 지침, Fabric git 통합 문서와 결합하세요.
  • 배포 파이프라인 또는 외부 CI/CD를 사용하여 여러 웨어하우스에서 게시 순서를 오케스트레이션하여 개발/테스트/Prod 환경을 포함하도록 Zava Analytics 시나리오를 확장합니다.