Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku se dozvíte, jak modelovat a nasazovat závislosti mezi sklady pomocí projektů databáze SQL v editoru Visual Studio Code. Začnete ze dvou existujících projektů skladu a nakonfigurujete mezi nimi jednosměrné závislosti pomocí odkazů na databáze a v případě potřeby skriptů před nasazením a po nasazení.
Tento článek navazuje na koncepty v článku Vývoj skladových projektů ve Visual Studio Code a předpokládá, že jste již obeznámeni se sestavováním a publikováním jednoho skladového projektu.
Požadavky
Než začnete, ujistěte se, že:
- Ve stejném pracovním prostoru vytvořte dva sklady Fabric .
- Pokud chcete vytvořit nový ukázkový sklad, přečtěte si téma Vytvoření ukázkového skladu v Microsoft Fabric.
- Vytvořte nebo extrahujte databázový projekt pro každý sklad v editoru Visual Studio Code.
- Pokud chcete vytvořit databázový projekt pro existující sklad nebo nový sklad, přečtěte si téma Vývoj projektů skladu v editoru Visual Studio Code.
- Nainstalujte visual Studio Code na pracovní stanici.
- Nainstalujte sadu .NET SDK pro sestavení a publikování databázových projektů.
- Nainstalujte dvě rozšíření editoru Visual Studio Code: SQL Database Projects a SQL Server (mssql).
- Požadovaná rozšíření můžete nainstalovat přímo z marketplace editoru Visual Studio Code tak, že vyhledáte "projekty SQL Database" nebo "SQL Server (mssql)".
- Projekty datového skladu ověřují, sestavují a lze je publikovat v editoru Visual Studio Code.
Poznámka:
Tento článek se zaměřuje na projekty skladu v editoru Visual Studio Code a jejich verzi v Gitu jako běžné projekty kódu. Integrace Gitu pro pracovní prostory a položky skladu v rámci Fabric je samostatně pokryta v dokumentaci Správa verzí zdrojového kódu s Fabric Data Warehouse a dokumentaci o integraci Gitu. Tento článek předpokládá, že váš pracovní prostor v rámci Fabric je cílem nasazení a schéma T-SQL je uloženo v jednom nebo více projektech ve Visual Studio Code, které spravujete pro jejich kontrolu verzí v Gitu.
Tento článek se nezabývá vývojem napříč sklady pro koncový bod analýzy SQL ve službě Lakehouse. Tabulky Lakehouse a objekty SQL koncových bodů nejsou sledovanými objekty ve správě zdrojového kódu stejným způsobem jako projekty datového skladu. Položky skladu můžete používat s databázovými projekty k úplné integraci Gitu a podpoře nasazení v nativních prostředích Fabric a klientských nástrojích.
Scénář: Mezidoménové sklady Zava Analytics
Zava Analytics používá dvě obchodní domény:
- Sales – zákaznické objednávky, výnosy a metriky obchodního potrubí.
- Marketing – kampaně, kanály a metriky zapojení
Každá doména má:
Sklad fabricu ve stejném pracovním prostoru:
ZavaSalesWarehouseZavaMarketingWarehouse
Databázový projekt v editoru Visual Studio Code:
Zava.Sales.WarehouseZava.Marketing.Warehouse
Pro vytvoření kompletního end-to-end ELT a reportování potřebuje každá doména zobrazení jen pro čtení pro přístup k datům z druhého prostředí.
-
Salespotřebuje zapojení zákazníka do marketingu. -
Marketingpotřebuje výkonnost prodeje pro jednotlivé kampaně.
Budete muset:
- Vytvořte jednosměrné meziskladové závislosti pomocí referencí databáze.
- Vyhněte se cyklickým závislostem.
- V případech, kdy objekty v obou skladech závisejí na sobě, použijte skripty před nasazením a po nasazení .
Zajištění jednosměrných závislostí mezi sklady
Pro každou dvojici skladů zvolte směr logické závislosti:
Příklad:
-
Saleszávisí na údajích o zapojeníMarketing. -
Marketingnezávisí naSalesobjektech, které jsou potřeba v době nasazení.
V praxi:
Zava.Sales.Warehouse obsahuje odkaz naZava.Marketing.Warehouse databázi.
- T-SQL ve
Salesskladu může používat názvy tří částí, například:SELECT * FROM ZavaMarketingWarehouse.Marketing.CampaignEngagement -
Zava.Marketing.Warehouseneodkazuje naSalesobjekty, které by vynutily cyklus závislostí v době nasazení.
Návod
Pro každou dvojici skladů nakreslete jednoduchý šipkový diagram (Sales → Marketing). Pokud najdete šipky ukazující v obou směrech pro stejný typ objektu, budete pravděpodobně muset refaktorovat nebo přesunout logiku do skriptů před nasazením a po nasazení.
Vyhněte se cyklickým závislostem
K cyklické závislosti dochází, když sklad A a Sklad B vzájemně závisejí způsobem, který modul nedokáže vyřešit v jednom nasazení.
Příklad problému (nedělejte to):
-
ZavaSalesWarehouse.dbo.CustomerRolluppohled: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.CampaignAttributionpohled: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;
V tomto antivzoru:
-
CustomerRollupv prodeji závisí naCustomerEngagementmarketingu. -
CampaignAttributionv marketingu závisí naCustomerRollupprodeji.
Tento antivzor vytváří cyklus: Zobrazení prodeje → Zobrazení marketingu → Zobrazení prodeje znovu.
Pokyny:
Nemodelujte vzájemné závislosti mezi sklady jako běžné objekty schématové úrovně. Pokud skutečně potřebujete tento druh logiky, přesuňte jednu stranu závislosti do:
- Skript po nasazení nebo
- Následný sémantický model nebo sestava, která spojuje tyto dva sklady v době dotazu.
Použijte skripty před a po nasazení pro logiku nasazení citlivou na napříč sklady.
Vzhledem k tomu, že nasazení skladu jsou úplné operace rozdílu schématu (nikoli částečné nasazení pro jednotlivé objekty), pečlivě zacházejte s položkami napříč sklady:
Pokud sklad A i Sklad B potřebují objekty, které jsou na sobě závislé:
- Udržujte základní tabulky a základní zobrazení v jednotlivých projektech skladu.
- Přesuňte mostní zobrazení nebo nástroje, které vytvářejí cykly, do skriptů před nebo po nasazení v jednom projektu.
- Ujistěte se, že tyto skripty jsou idempotentní a bezpečné pro opětovné spuštění.
Příklady vzorů:
- Skript před nasazením: Dočasně vyřaďte zobrazení v rámci několika skladů před úpravami schématu, které by je mohly narušit.
- Skript po nasazení: po nasazení obou skladů znovu vytvořte nebo aktualizujte pohled napříč sklady.
Vzorec 1: Přímé křížové odkazy mezi sklady prostřednictvím databázových referencí
V tomto modelu modelujete jednosměrné závislosti přímo v databázových projektech pomocí databázových odkazů.
Krok 1: Začněte ze dvou existujících projektů skladu
Měli byste už mít:
-
Zava.Sales.Warehouse→ nasazeno doZavaSalesWarehouse -
Zava.Marketing.Warehouse→ nasazeno doZavaMarketingWarehouse
Každý projekt byl vytvořen nebo extrahován pomocí kroků v Vývoj projektů datového skladu ve Visual Studio Code.
Krok 2: Přidání odkazu na databázi z prodeje na marketing
- V editoru Visual Studio Code otevřete zobrazení Databázové projekty .
- Klikněte pravým tlačítkem myši na
Zava.Sales.Warehouseprojekt. - Vyberte Přidat referenční informace k databázi....
- Zvolte jednu z těchto možností:
- Databázový projekt v aktuálním pracovním prostoru (databázový projekt odkazovaný tímto způsobem musí být otevřený také v editoru Visual Studio Code) nebo
-
Aplikace datové vrstvy (.dacpac) (Předpokládá se, že jste vytvořili, pokud máte sestavený
.dacpacproMarketingúložiště).
- Nastavte možnosti odkazu:
- Typ odkazu: Stejný server, jiná databáze.
-
Název databáze nebo proměnná: Použijte například
[$(MarketingWarehouseName)]proměnnou SQLCMD.
- Uložte a znovu sestavte projekt Sales.
.sqlproj V souboru by se měla zobrazit nějaká položka podobná této:
<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>
Návod
Použití proměnné SQLCMD pro název vzdáleného skladu umožňuje opakovaně používat stejný projekt ve všech vašich prostředích, jako je vývoj/testování/prod, kde se názvy skladů můžou lišit.
Krok 3: Vytvoření zobrazení napříč sklady v prodeji
V projektu Sales přidejte pohled, který čte ze skladu 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;
Klíčové body:
- Třídílný název
[$(MarketingWarehouseName)].[dbo].[CustomerEngagement]odpovídá vzoru T-SQL, který se používá pro dotazy napříč datovými sklady v SQL editoru služby Fabric. - DacFx řeší externí databázi prostřednictvím odkazu na databázi.
Sestavte projekt tak, aby se zajistilo , že neexistují žádné SQL71501 nevyřešené referenční chyby.
Krok 4: Publikujte marketingový sklad a potom prodejní sklad
Abyste se vyhnuli problémům s nasazením:
-
Sestavení a publikování
Zava.Marketing.Warehouseprvní:- Klikněte pravým tlačítkem na projekt → Sestavení.
- Klikněte pravým tlačítkem myši na projekt → Publikovat → zvolte
ZavaMarketingWarehouse.
- Jakmile
Marketingnasazení proběhne úspěšně, sestavte a publikujteZava.Sales.Warehouse:- Klikněte pravým tlačítkem na projekt → Sestavení.
- Klikněte pravým tlačítkem myši na projekt → Publikovat → zvolte
ZavaSalesWarehouse.
Výsledný tok nasazení je následující:
Zava.Marketing.Warehouse (bez externích závislostí) → Zava.Sales.Warehouse (závisí na Marketing)
Teď může jakýkoli T-SQL dotaz v ZavaSalesWarehouse použít dbo.CustomerEngagementFact pohled, který interně čte z úložiště Marketing pomocí T-SQL mezi sklady.
Model 2: Závislosti napříč sklady spravované pomocí skriptů před nasazením a po nasazení
V některých scénářích Analýzy Zava můžou obě domény potřebovat agregované objekty, které na sobě závisejí. Například:
- Prodej chce zobrazení, které používá data marketingových kampaní k poskytování výnosů z prodeje za marketingovou kampaň.
- Marketing chce zobrazení, které používá data o výnosech z prodeje k zajištění efektivity marketingové kampaně.
Nechcete, aby oba tyto objekty byly běžnými zobrazeními, která se účastní úplného nasazení modelu, protože riskujete cyklickou závislost nebo křehké uspořádání nasazení.
Místo toho:
- Udržujte základní model jednotlivých skladů nezávislý.
- Pomocí skriptů po nasazení v jednom projektu můžete vytvořit více zobrazení napříč sklady, jakmile jsou obě schémata na místě.
Krok 1: Přidání odkazů na databázi pro ověření v době kompilace
Nastavte odkazy podobné vzoru 1, ale pro oba projekty:
- V
Zava.Sales.Warehouseaplikaci přidejte odkaz na marketing prostřednictvím[$(MarketingWarehouseName)]. - Volitelně můžete přidat odkaz na Sales prostřednictvím
[$(SalesWarehouseName)], pokud chcete zajistit ověření při kompilaci pohledů mezi sklady používaných ve skriptech.
V souborech .sqlproj můžete nastavit:
<SqlCmdVariable Include="SalesWarehouseName">
<DefaultValue>ZavaSalesWarehouse</DefaultValue>
</SqlCmdVariable>
Krok 2: Vytvoření základních objektů jako běžných objektů projektu
Příklad:
Salesprojekt:- Tabulka
dbo.CustomerRevenue -
dbo.SalesByCampaignzobrazení (používající pouze lokální tabulky)
- Tabulka
Marketingprojekt:- Tabulka
dbo.Campaigns -
dbo.CampaignStatszobrazení (pouze s využitím lokálních tabulek)
- Tabulka
Tyto objekty nepoužívají dotazy napříč sklady. V dalším kroku představíme odkazy mezi sklady.
Krok 3: Přidání skriptu po nasazení pro zobrazení mostu mezi sklady
Vyberte jeden sklad pro hostování objektů mostu; obvykle doména, která využívá kombinovaný výstup nejvíce. Předpokládejme, že je to doména Sales .
- V projektu
Sales: Klikněte pravým tlačítkem myši na projekt a poté zvolte možnost Přidat → Skript po nasazení. - Pojmenujte skript
PostDeployment_CrossWarehouse.sql. - Ve skriptu vytvořte nebo upravte zobrazení křížového skladu pomocí
IF EXISTS/DROP/CREATEvzorů, aby byly idempotentní.
Příklad skriptu v Sales, který bude odkazovat na Marketing objekty skladu:
-- 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
Zde:
- Základní a
SalesskladovéMarketingprojekty zůstávají nezávislé a nasazovatelné samy. - Pohled na most se vytvoří po nasazení schématu pomocí skriptu po nasazení.
- Pokud je nasazení spuštěno několikrát, je idempotentní, protože skript bezpečně odstraní a znovu vytvoří zobrazení.
Krok 4: (Volitelné) Použití skriptů před nasazením k ochraně křehkých závislostí
V pokročilejších scénářích můžete:
- Pomocí skriptu před nasazením můžete vyřadit nebo zakázat zobrazení křížového skladu, která by mohla blokovat změny schématu (například pokud přejmenováváte sloupce).
- Nechte DacFx použít změny schématu.
- Pomocí skriptu po nasazení můžete znovu vytvořit nebo aktualizovat zobrazení mezi sklady.
Důležité
Skripty před nasazením a po nasazení se spouštějí jako součást plánu nasazení a musí být:
- Idempotentní, což znamená, že je bezpečné spouštět vícekrát.
- Kompatibilní s konečným schématem vytvořeným dacFx.
- Bez destruktivních změn, které jsou v konfliktu s vaší
BlockOnPossibleDataLosszásadou.
Krok 5: Publikování pořadí závislostí spravovaných skriptem
Běžný vzor pro analýzu Zava:
- Publikování základních projektů:
-
Zava.Marketing.Warehouse(základní schéma) -
Zava.Sales.Warehouse(základní schéma + skript po nasazení mezi sklady)
-
- Nechte skript Sales po nasazení vytvořit mostní pohledy po nasazení vlastního schématu a odkazovaného
Marketingschématu.
Pokud zavádíte více než dva sklady, opakujte tento vzor ve vrstvách. Nikdy nevytvořujte cyklické závislosti prostřednictvím běžných objektů projektu.
Pokračovat ve vzdělávání
- Zkombinujte tyto vzory s pokyny pro správu zdrojového kódu a CI/CD ve správě zdrojového kódu s využitím dokumentace k integraci Datového skladu Fabric a Infrastruktury v Gitu.
- Rozšiřte scénář analýzy Zava tak, aby zahrnoval vývojová/testovací/produkční prostředí, a to pomocí nasazovacích kanálů nebo externích CI/CD k orchestraci pořadí publikování napříč několika sklady.