Sdílet prostřednictvím


Vývoj a implementace meziskladových závislostí

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 .
  • Vytvořte nebo extrahujte databázový projekt pro každý sklad 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:

    • ZavaSalesWarehouse
    • ZavaMarketingWarehouse
  • Databázový projekt v editoru Visual Studio Code:

    • Zava.Sales.Warehouse
    • Zava.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í.

  • Sales potřebuje zapojení zákazníka do marketingu.
  • Marketing potř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:

  • Sales závisí na údajích o zapojení Marketing.
  • Marketing nezávisí na Sales objektech, které jsou potřeba v době nasazení.

V praxi:

Zava.Sales.Warehouse obsahuje odkaz naZava.Marketing.Warehouse databázi.

  • T-SQL ve Sales skladu může používat názvy tří částí, například:
    SELECT * FROM ZavaMarketingWarehouse.Marketing.CampaignEngagement
    
  • Zava.Marketing.Warehouse neodkazuje na Sales objekty, které by vynutily cyklus závislostí v době nasazení.

Návod

Pro každou dvojici skladů nakreslete jednoduchý šipkový diagram (SalesMarketing). 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.CustomerRollup pohled:
    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 pohled:
    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:

  • CustomerRollup v prodeji závisí na CustomerEngagementmarketingu.
  • CampaignAttribution v marketingu závisí na CustomerRollupprodeji.

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 do ZavaSalesWarehouse
  • Zava.Marketing.Warehouse → nasazeno do ZavaMarketingWarehouse

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.Warehouse projekt.
  • 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ý .dacpac pro Marketing ú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.Warehouse první:
    • Klikněte pravým tlačítkem na projekt → Sestavení.
    • Klikněte pravým tlačítkem myši na projekt → Publikovat → zvolte ZavaMarketingWarehouse.
  • Jakmile Marketing nasazení 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:

  • Sales projekt:

    • Tabulka dbo.CustomerRevenue
    • dbo.SalesByCampaign zobrazení (používající pouze lokální tabulky)
  • Marketing projekt:

    • Tabulka dbo.Campaigns
    • dbo.CampaignStats zobrazení (pouze s využitím lokálních tabulek)

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řidatSkript po nasazení.
  • Pojmenujte skript PostDeployment_CrossWarehouse.sql.
  • Ve skriptu vytvořte nebo upravte zobrazení křížového skladu pomocí IF EXISTS / DROP / CREATE vzorů, 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 Sales skladové Marketing projekty 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ší BlockOnPossibleDataLoss zá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 Marketing sché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í