Raktárak közötti függőségek fejlesztése és üzembe helyezése

Ebből a cikkből megtudhatja, hogyan modellezheti és helyezheti üzembe a raktárak közötti függőségeket SQL Database-projektek használatával Visual Studio Code. Két meglévő raktárprojektből kiindulva egyirányú függőségeket konfigurálhat közöttük adatbázis-hivatkozások és szükség esetén az üzembe helyezés előtti és az üzembe helyezés utáni szkriptek használatával.

Ez a cikk a Visual Studio Code-ban fejlesztett raktárprojektek alapfogalmaira épít, és feltételezi, hogy már magabiztosan készít és publikál egyetlen raktárprojektet.

Előfeltételek

Mielőtt hozzákezdene, győződjön meg arról, hogy:

  • Hozzon létre két Fabric raktárat ugyanabban a munkahelyen.
  • Létrehozhat vagy kinyerhet egy adatbázis-projektet a Visual Studio Code minden egyes raktárához.
    • Ha adatbázisprojektet szeretne létrehozni a meglévő raktárhoz vagy egy új raktárhoz, tekintse meg a A Visual Studio Code-ben található raktárprojekteket.
  • Telepítse Visual Studio Code a munkaállomásra.
  • Telepítse a .NET SDK-t adatbázisprojektek létrehozásához és közzétételéhez.
  • Telepítsen két Visual Studio Code bővítményt: SQL-adatbázisprojektek és SQL Server (mssql).
    • A szükséges bővítményeket közvetlenül az Visual Studio Code piactérről telepítheti az "SQL Database Projects" vagy a "SQL Server (mssql)" kifejezéssel.
  • A raktárprojektek érvényesítik, összeállítják és közzétehetik a Visual Studio Code-ban.

Megjegyzés:

Ez a cikk a warehouse-projektekre, a Visual Studio Code környezetben való munkára és a Gitben szokásos kódprojektekként történő verziókezelésükre összpontosít. A munkaterületek és a raktárelemek fabric Git-integrációját külön-külön tárgyalják a Forrás-vezérlés a Fabric Data Warehouse és a Git integrációs dokumentációk. A cikk feltételezi, hogy a Fabric-munkaterület az üzembehelyezési cél, és a T-SQL-séma egy vagy több olyan Visual Studio Code projektben található, amelyet Gitben verziókövetéssel kezel.

Ez a cikk nem foglalkozik a Lakehouse SQL Analytics-végpontjának raktárközi fejlesztésével. A Lakehouse-táblák és az SQL Analytics-végpontobjektumok nem ugyanúgy követik nyomon a forrásvezérlő objektumait, mint a raktárprojektek. A Warehouse-elemek adatbázisprojektekkel való használata a Git-integráció és az üzembe helyezés teljes körű támogatásához a Fabric natív szolgáltatásaiban és ügyféleszközeiben.

Forgatókönyv: Zava Analytics tartományok közötti raktárak

A Zava Analytics két üzleti tartományt használ:

  • Értékesítés – ügyfélrendelések, bevételi és folyamatmetrikák.
  • Marketing – kampányok, csatornák és előjegyzési metrikák.

Minden tartomány a következő:

  • Fabric Warehouse ugyanabban a munkaterületen:

    • ZavaSalesWarehouse
    • ZavaMarketingWarehouse
  • Egy adatbázis-projekt a Visual Studio Code-ban:

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

A végpontok közötti ELT és a jelentéskészítés létrehozásához minden tartománynak írásvédett nézetekre van szüksége a másik tartomány adatainak eléréséhez:

  • Sales az ügyfél marketingbevonására van szükség.
  • Marketing kampányonkénti értékesítési teljesítményre van szükség.

A következőkre van szüksége:

  • Egyirányú, raktárközi függőségek létrehozása adatbázis-hivatkozásokon keresztül.
  • Kerülje a ciklikus függőségeket.
  • Üzembe helyezés előtti és utáni szkriptek használata olyan esetekben, amikor mindkét raktár objektumai egymástól függenek.

Győződjön meg arról, hogy a raktárak közötti függőségek egyirányúak

Minden egyes raktárpárhoz válasszon egy irányt a logikai függőséghez:

Példa:

  • Sales az elköteleződési adatoktól Marketing függ.
  • Marketing nem függ Sales az üzembe helyezéskor szükséges objektumoktól.

Gyakorlatilag:

Zava.Sales.Warehouse adatbázis-hivatkozással rendelkezik.Zava.Marketing.Warehouse

  • A T-SQL a Sales raktárban három részből álló nevet használhat, például:
    SELECT * FROM ZavaMarketingWarehouse.Marketing.CampaignEngagement
    
  • Zava.Marketing.Warehouse nem hivatkozik olyan objektumokraSales, amelyek üzembe helyezéskor függőségi ciklust kényszerítenének ki.

Jótanács

Minden egyes raktárpárhoz rajzoljon egy egyszerű nyíldiagramot (SalesMarketing). Ha azonos típusú objektum mindkét irányára mutató nyilakat talál, akkor valószínűleg újra kell bontania vagy át kell helyeznie néhány logikát az üzembe helyezés előtti és utáni szkriptekbe.

A ciklikus függőségek elkerülése

Ciklikus függőség akkor fordul elő, ha az A raktár és a B raktár is egymástól függ oly módon, hogy a motor nem oldható fel egyetlen üzembe helyezés során.

Példa a problémára (ne tegye ezt):

  • ZavaSalesWarehouse.dbo.CustomerRollup nézet:
    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 nézet:
    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;
    

Ebben az antimintában:

  • CustomerRollup az ÉrtékesítésCustomerEngagement függ a marketingtől.
  • CampaignAttribution a MarketingCustomerRollup a Sales-től függ.

Ez az antiminta létrehoz egy ciklust: Értékesítési nézet → Marketing nézet → Ismét értékesítési nézet.

Útmutató:

Ne modellezheti a raktárak közötti kölcsönös függőségeket normál sémaszintű objektumként. Ha valóban szüksége van erre a logikára, helyezze át a függőség egyik oldalát a következőbe:

  • Üzembe helyezés utáni szkript, vagy
  • Egy alsóbb rétegbeli szemantikai modell vagy jelentés , amely lekérdezéskor csatlakozik a két raktárhoz.

Üzembe helyezés előtti és utáni szkriptek használata az üzembe helyezésre érzékeny, raktárközi logikához

Mivel a raktártelepítések teljes sémadiffakciós műveletek (nem részleges objektumonkénti üzemelő példányok), gondosan kezelje a raktárak közötti elemeket:

Ha az A raktárnak és a B raktárnak is szüksége van egymástól függő objektumokra:

  • Tartsa meg az alapvető táblákat és az alapvető nézeteket az egyes raktárprojektekben.
  • Helyezze át a ciklusokat létrehozó hídnézeteket vagy segédprogramobjektumokat egy projekt üzembe helyezés előtti vagy utáni szkriptjeibe .
  • Győződjön meg arról, hogy ezek a szkriptek idempotensek, és biztonságosan újrafuttathatóak.

Példaminták:

  • Üzembe helyezés előtti szkript: ideiglenesen elvethet egy raktárközi nézetet, mielőtt olyan sémamódosításokat alkalmazna, amelyek megszakítanák azt.
  • Üzembe helyezés utáni szkript: hozza létre újra vagy frissítse a raktárak közötti nézetet mindkét raktár üzembe helyezése után.

1. minta: Közvetlen raktárközi hivatkozások adatbázis-hivatkozásokon keresztül

Ebben a mintában egyirányú függőségeket modellez közvetlenül az adatbázisprojektekben adatbázis-hivatkozások használatával.

1. lépés: Két meglévő raktárprojekt kezdése

Már rendelkeznie kell a következőkkel:

  • Zava.Sales.Warehouse → üzembe helyezve ZavaSalesWarehouse
  • Zava.Marketing.Warehouse → üzembe helyezve ZavaMarketingWarehouse

Minden projekt a Develop warehouse projects in Visual Studio Code lépéseivel lett létrehozva vagy kinyerve.

2. lépés: Adatbázis-referencia hozzáadása a Sales to Marketing szolgáltatásból

  • A Visual Studio Code nyissa meg a Adatbázis-projektek nézetet.
  • Kattintson a jobb gombbal a projektre Zava.Sales.Warehouse .
  • Válassza az Adatbázis-referenciák hozzáadása...lehetőséget.
  • Válasszon a következő lehetőségek közül:
    • Adatbázis-projekt az aktuális munkaterületen (Az erre hivatkozott adatbázisprojektnek Visual Studio Code is nyitva kell lennie), vagy
    • Adatrétegű alkalmazás (.dacpac) (Feltételezi, hogy létrehozott egy .dacpac a Marketing raktárhoz).
  • Adja meg a referenciabeállításokat:
    • Referencia típusa: Ugyanaz a kiszolgáló, más adatbázis.
    • Adatbázis neve vagy változója: Használjon például [$(MarketingWarehouseName)]SQLCMD-változót.
  • Mentse és építse újra a Sales projektet.

A fájlban .sqlproj a következőhöz hasonló bejegyzésnek kell megjelennie:

<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>

Jótanács

Ha SQLCMD-változót használ a távoli raktárnévhez , akkor ugyanazt a projektet újra felhasználhatja az összes környezetében, például a Dev/Test/Prod környezetben, ahol a raktárnevek eltérhetnek.

3. lépés: Raktárközi nézet létrehozása a Sales alkalmazásban

A Sales projektben adjon hozzá egy nézetet, amely a Marketing raktárból olvas:

-- 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;

Összefoglalás:

  • A háromrészes név [$(MarketingWarehouseName)].[dbo].[CustomerEngagement] megegyezik a Háló SQL-szerkesztőben a raktárközi lekérdezésekhez használt T-SQL-mintával.
  • A DacFx az adatbázis-referencián keresztül oldja fel a külső adatbázist.

A projektet úgy hozhatja létre, hogy ne SQL71501 megoldatlan referenciahibák legyenek.

4. lépés: A marketingraktár közzététele, majd a Sales

Az üzembe helyezési problémák elkerülése érdekében:

  • Létrehozás és közzétételZava.Marketing.Warehouse első:
    • Kattintson a jobb gombbal a project → Build elemre.
    • Kattintson a jobb gombbal a Project → Publish → ( Közzététel ) elemre ZavaMarketingWarehouse.
  • Az üzembe helyezés sikerességét követően Marketinghozza létre és tegye közzé a következőtZava.Sales.Warehouse:
    • Kattintson a jobb gombbal a project → Build elemre.
    • Kattintson a jobb gombbal a Project → Publish → ( Közzététel ) elemre ZavaSalesWarehouse.

Az eredményként kapott üzembehelyezési folyamat a következő:

Zava.Marketing.Warehouse (nincs külső függőség) → Zava.Sales.Warehouse (függ Marketing)

Mostantól bármelyik T-SQL-lekérdezés ZavaSalesWarehouse használhatja a dbo.CustomerEngagementFact nézetet, amely belsőleg beolvassa a raktárból a Marketing T-SQL-t.

2. minta: Az üzembe helyezés előtti és utáni szkriptekkel felügyelt, raktárközi függőségek

Egyes Zava Analytics-forgatókönyvekben mindkét tartománynak szüksége lehet az egymástól függő összesített objektumokra. Például:

  • Az értékesítés olyan nézetet szeretne, amely marketingkampány-adatokat használ az értékesítési bevétel marketingkampányonkénti biztosításához.
  • A marketing olyan nézetet szeretne, amely értékesítési bevételi adatokat használ a marketingkampány hatékonyságának biztosításához.

Nem szeretné, hogy mindkét objektum normál nézet legyen, amely részt vesz a teljes modell üzembe helyezésében, mert ez ciklikus függőséget vagy törékeny üzembe helyezési sorrendet kockáztat.

Ehelyett a következőt kell elvégeznie:

  • Tartsa függetlenként az egyes raktárak alapmodelljét .
  • Az üzembe helyezés utáni szkriptek használatával egy projektben több raktárközi nézetet hozhat létre a két séma létrehozása után.

1. lépés: Adatbázis-hivatkozások hozzáadása fordítási idő ellenőrzéséhez

Az 1. mintához hasonló hivatkozásokat állíthat be, de mindkét projekthez:

  • Ebben a fájlban Zava.Sales.Warehouseadjon meg egy hivatkozást a marketingre a következőn keresztül [$(MarketingWarehouseName)]:
  • A Zava.Marketing.Warehouse-ban (választhatóan) adjon meg egy hivatkozást a Salesre a [$(SalesWarehouseName)]-en keresztül, ha a szkriptekben használt raktárak közötti nézetek fordítási időbeli érvényesítésére van szüksége.

A fájlokban .sqlproj a következő beállításokat állíthatja be:

<SqlCmdVariable Include="SalesWarehouseName">
  <DefaultValue>ZavaSalesWarehouse</DefaultValue>
</SqlCmdVariable>

2. lépés: Alapobjektumok létrehozása normál projektobjektumként

Példa:

  • Sales projekt:

    • dbo.CustomerRevenue asztal
    • dbo.SalesByCampaign nézet (csak helyi táblák használatával)
  • Marketing projekt:

    • dbo.Campaigns asztal
    • dbo.CampaignStats nézet (csak helyi táblák használatával)

Ezek az objektumok nem használnak raktárközi lekérdezéseket. A következő lépésben raktárközi referenciákat vezetünk be.

3. lépés: Üzembe helyezés utáni szkript hozzáadása raktárközi hídnézetekhez

Válasszon ki egy raktárt a hídobjektumok üzemeltetéséhez; jellemzően az a tartomány, amely a legnagyobb mértékben használja fel a kombinált kimenetet. Tegyük fel, hogy Sales ez a tartomány.

  • A projektben Sales : Kattintson a jobb gombbal a projektre, majd adja hozzáüzembe helyezés utáni szkriptet.
  • Nevezze el a szkriptet PostDeployment_CrossWarehouse.sql.
  • A szkriptben hozzon létre vagy módosítsa a raktárak közötti nézeteket minták használatávalIF EXISTS / DROP / CREATE, hogy idempotensek maradjanak.

Példa egy szkriptre Sales, amely a raktárobjektumokra hivatkozik Marketing:

-- PostDeployment_CrossWarehouse.sql

-- Ensure object can be recreated safely
IF OBJECT_ID('dbo.CampaignRevenueBridge', 'V') IS NOT NULL
    DROP VIEW [dbo].[CampaignRevenueBridge];
GO

CREATE VIEW [dbo].[CampaignRevenueBridge] AS
SELECT
    c.CampaignId,
    c.CampaignName,
    m.Channel,
    SUM(s.TotalRevenue) AS Revenue
FROM [$(MarketingWarehouseName)].[dbo].[Campaigns] AS c
JOIN [$(MarketingWarehouseName)].[dbo].[CampaignEngagement] AS m
    ON c.CampaignId = m.CampaignId
JOIN dbo.SalesByCampaign AS s
    ON s.CampaignId = c.CampaignId
GROUP BY
    c.CampaignId,
    c.CampaignName,
    m.Channel;
GO

Itt:

  • Az alap Sales - és Marketing raktárprojektek önállóak és üzembe helyezhetők.
  • A hídnézet a séma üzembe helyezése után jön létre a telepítés utáni szkripttel.
  • Ha az üzembe helyezés többször is fut, az idempotens, mivel a szkript biztonságosan törli és újra létrehozza a nézetet.

4. lépés: (Nem kötelező) Üzembe helyezés előtti szkriptek használata a törékeny függőségek védelméhez

Speciálisabb forgatókönyvek esetén a következő megoldásokat használhatja:

  • Az üzembe helyezés előtti szkripttel elvetheti vagy letilthatja azokat a raktárak közötti nézeteket, amelyek blokkolhatják a sémamódosításokat (például oszlopok átnevezése esetén).
  • Hagyja, hogy a DacFx alkalmazza a séma-különbséget.
  • Az üzembe helyezés utáni szkripttel hozza létre vagy frissítse a raktárak közötti nézeteket.

Fontos

Az üzembe helyezés előtti és utáni szkriptek az üzembe helyezési terv részeként futnak, és a következőknek kell lenniük:

  • Idempotens, ami azt jelenti, hogy kockázatmentesen futtathatók többször.
  • Kompatibilis a DacFx által létrehozott végső sémával .
  • Mentes a romboló változásoktól, amelyek ütköznek az Ön szabályzatával BlockOnPossibleDataLoss.

5. lépés: A parancsfájl által kezelt függőségek közzétételi sorrendjének meghatározása

A Zava Analytics gyakori mintája:

  • Alapprojektek közzététele:
    • Zava.Marketing.Warehouse (alapséma)
    • Zava.Sales.Warehouse (alapséma + kereszt-raktározási telepítés utáni szkript)
  • Hagyja, hogy a Sales post-deployment szkript a saját sémája és a hivatkozott séma üzembe helyezése Marketing hozza létre a hídnézeteket.

Ha kétnál több raktárat vezet be, ismételje meg ezt a mintát rétegekben. Soha ne hozzon létre ciklikus függőségeket a szokásos projektobjektumokon keresztül.

Folytasd a tanulást

  • Kombinálja ezeket a mintákat a forrásvezérléssel és a CI/CD-útmutatóval az Forrásvezérlés a Fabric Data Warehouse valamint a Fabric git integrációs dokumentumokkal.
  • A Zava Analytics-forgatókönyv kiterjesztése Dev/Test/Prod környezetekre, üzembehelyezési folyamatok vagy külső CI/CD használatával a közzétételi sorrend több raktárban való vezénylésére.