Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.
- Új mintaraktár létrehozásához lásd: A mintaraktár létrehozása Microsoft Fabric.
- 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:
ZavaSalesWarehouseZavaMarketingWarehouse
Egy adatbázis-projekt a Visual Studio Code-ban:
Zava.Sales.WarehouseZava.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:
-
Salesaz ügyfél marketingbevonására van szükség. -
Marketingkampá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:
-
Salesaz elköteleződési adatoktólMarketingfügg. -
Marketingnem függSalesaz üzembe helyezéskor szükséges objektumoktól.
Gyakorlatilag:
Zava.Sales.Warehouse
adatbázis-hivatkozással rendelkezik.Zava.Marketing.Warehouse
- A T-SQL a
Salesraktárban három részből álló nevet használhat, például:SELECT * FROM ZavaMarketingWarehouse.Marketing.CampaignEngagement -
Zava.Marketing.Warehousenem 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 (Sales → Marketing). 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.CustomerRollupné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.CampaignAttributionné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:
-
CustomerRollupaz ÉrtékesítésCustomerEngagementfügg a marketingtől. -
CampaignAttributiona MarketingCustomerRollupa 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 helyezveZavaSalesWarehouse -
Zava.Marketing.Warehouse→ üzembe helyezveZavaMarketingWarehouse
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
.dacpacaMarketingraktá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étel
Zava.Marketing.Warehouseelső:- 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:
Salesprojekt:-
dbo.CustomerRevenueasztal -
dbo.SalesByCampaignnézet (csak helyi táblák használatával)
-
Marketingprojekt:-
dbo.Campaignsasztal -
dbo.CampaignStatsné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ával
IF 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- ésMarketingraktá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
Marketinghozza 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.