Jaa


Kehitä ja ottaa käyttöön varastoinvälisiä riippuvuuksia

Tässä artikkelissa opit mallintamaan ja ottamaan käyttöön varastojen välisiä riippuvuuksia SQL-tietokantaprojekteilla Visual Studio Codessa. Aloitat kahdesta olemassa olevasta varastoprojektista ja konfiguroit yksisuuntaiset riippuvuudet niiden välillä tietokantaviittauksilla ja tarvittaessa esi- ja jälki-deployment-skripteillä.

Tämä artikkeli rakentaa Develop warehouse projects in Visual Studio Code -konsepteihin ja olettaa, että olet jo valmis rakentamaan ja julkaisemaan yhden varastoprojektin.

Ennakkovaatimukset

Ennen kuin aloitat, varmista, että:

  • Luo kaksi kangasvarastoa samaan työtilaan.
  • Luo tai poimi tietokantaprojekti jokaiselle varastolle Visual Studio Codessa.
  • Asenna Visual Studio Code työasemallesi.
  • Asenna .NET SDK tietokantaprojektien luomista ja julkaisemista varten.
  • Asenna kaksi Visual Studio Code -laajennusta: SQL Database Projects ja SQL Server (mssql).
    • Voit asentaa tarvittavat laajennukset suoraan Visual Studio Code Marketplacesta hakemalla "SQL Database Projects" tai "SQL Server (mssql)".
  • Varastoprojektit validoivat, rakentavat ja voidaan julkaista Visual Studio Codessa.

Note

Tämä artikkeli keskittyy varastoprojekteihin Visual Studio Codessa ja siihen, miten ne versiotaan Gitissä tavallisina koodiprojekteina. Fabric Git -integraatio työtiloille ja varaston kohteille käsitellään erikseen Source Control with Fabric Data Warehouse - ja Git-integraatiodokumentaatioissa. Artikkeli olettaa, että Fabric-työtilasi on käyttöönoton kohde ja T-SQL-skeema toimii yhdessä tai useammassa Visual Studio Code -projektissa, joita versiota ohjaat Gitissä.

Tämä artikkeli ei käsitteleLakehousen SQL-analytiikan päätepisteen cross-warehouse-kehitystä. Lakehouse-tauluja ja SQL-päätelaitteita ei seurata versiossa samalla tavalla kuin varastoprojekteja. Käytä Warehouse-elementtejä tietokantaprojektien kanssa täydelliseen git-integraatioon ja käyttöönottotukeen Fabricin natiivikokemuksissa ja asiakastyökaluissa.

Skenaario: Zava Analyticsin monitoimivarastot

Zava Analytics käyttää kahta liiketoiminta-aluetta:

  • Myynti – asiakastilaukset, liikevaihto ja putkistomittarit.
  • Markkinointi – kampanjat, kanavat ja sitoutumismittarit.

Jokaisella alueella on:

  • Kangasvarasto samassa työtilassa:

    • ZavaSalesWarehouse
    • ZavaMarketingWarehouse
  • Tietokantaprojekti Visual Studio Codessa:

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

Päästä päähän -ELT:n ja raportoinnin rakentamiseksi jokainen toimialue tarvitsee vain luku -näkymiä päästäkseen käsiksi toisen domainin tietoihin:

  • Sales vaatii asiakaskohtaista markkinointivuorovaikutusta.
  • Marketing Tarvitsee myyntituloksia kampanjan mukaan.

Sinun täytyy tehdä seuraavat asiat:

  • Määritä yksisuuntaiset ristivarastoriippuvuudet tietokantaviitteiden avulla.
  • Vältä syklisiä riippuvuuksia.
  • Käytä esi- ja jälkiasennusskriptejä tapauksissa, joissa molempien varastojen objektit ovat riippuvaisia toisistaan.

Varmista, että varastojen väliset riippuvuudet ovat yksisuuntaisia

Jokaiselle varastoparille valitse suunta loogiselle riippuvuudelle:

Esimerkki:

  • Sales Riippuu Marketing sitoutumisdatasta.
  • Marketing ei riipu Sales mistään käyttöönoton aikana tarvittavista objekteista.

Käytännössä:

Zava.Sales.Warehouseon tietokantaviittaus .Zava.Marketing.Warehouse

  • T-SQL varastossa Sales voi käyttää kolmiosaisia nimiä, kuten:
    SELECT * FROM ZavaMarketingWarehouse.Marketing.CampaignEngagement
    
  • Zava.Marketing.Warehouse ei viittaa Sales objekteihin, jotka pakottaisivat riippuvuussyklin käyttöönoton aikana.

Vihje

Jokaiselle varastoparille piirretään yksinkertainen nuolikaavio (SalesMarketing). Jos löydät nuolia, jotka osoittavat molempiin suuntiin saman tyyppisellä objektilla, sinun täytyy todennäköisesti refaktoroida tai siirtää logiikkaa ennen ja jälkeen asennusskripteihin.

Vältä syklisiä riippuvuuksia

Syklinen riippuvuus syntyy, kun varasto A ja varasto B ovat molemmat riippuvaisia toisistaan tavalla, jota moottori ei pysty ratkaisemaan yhdellä käyttöönotolla.

Ongelmaesimerkki (älä tee tätä):

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

Tässä anti-kuviossa:

  • CustomerRollup Myynnissä riippuu CustomerEngagementmarkkinoinnista.
  • CampaignAttribution Markkinoinnissa riippuu CustomerRollupmyynnistä.

Tämä anti-kuvio luo syklin: Myyntinäkymä → Markkinointinäkymä → Myyntinäkymä uudelleen.

Ohjaus:

Älä mallintaa varastojen välisiä keskinäisiä riippuvuuksia tavallisina skeematason objekteina. Jos todella tarvitset tällaista logiikkaa, siirrä toinen riippuvuuden puoli seuraavaan:

  • Jälki-asennusskripti, tai
  • Alavirran semanttinen malli tai raportti , joka yhdistää kaksi varastoa kyselyn yhteydessä.

Käytä ennen ja jälkeen käyttöönottoa sisältäviä skriptejä käyttöönoton arkaluontoiseen cross-warehouse-logiikkaan

Koska varaston käyttöönotot ovat kokonaisia skeemadiff-operaatioita (ei osittaisia objektikohtaisia käyttöönottoja), käsittele varastojen väliset kohteet huolellisesti:

Jos sekä varasto A että varasto B tarvitsevat toisiinsa riippuvia objekteja:

  • Pidä ydintaulukot ja ydinnäkymät jokaisessa varastoprojektissa.
  • Siirrä siltanäkymät tai työkaluobjektit , jotka luovat syklejä, esi - tai jälkiasennusskripteihin yhdessä projektissa.
  • Varmista, että nämä skriptit ovat idempotentteja ja turvallisia uudelleenajottavia.

Esimerkkikuvioita:

  • Ennen käyttöönottoa skripti: pudota väliaikaisesti poikkivarastonäkymä ennen kuin skeemamuutoksia sovelletaan, jotka rikkoisivat sen.
  • Käyttöönoton jälkeinen skripti: luo tai päivitä varastojen välinen näkymä uudelleen, kun molemmat varastot on otettu käyttöön.

Malli 1: Suora ristiinvarastoviittaukset tietokantaviitteiden kautta

Tässä mallissa mallinnat yksisuuntaisia riippuvuuksia suoraan tietokantaprojekteissa käyttäen Database Referencesia.

Vaihe 1: Aloita kahdesta olemassa olevasta varastoprojektista

Sinun pitäisi jo tietää:

  • Zava.Sales.Warehouse → lähetetty ZavaSalesWarehouse
  • Zava.Marketing.Warehouse → lähetetty ZavaMarketingWarehouse

Jokainen projekti luotiin tai purettiin Visual Studio Coden Develop warehouse projects -vaiheilla.

Vaihe 2: Lisää tietokantaviite myynnistä markkinointiin

  • Avaa Visual Studio Codessa Tietokantaprojektit-näkymä .
  • Napsauta Zava.Sales.Warehouse projektia oikealla.
  • Valitse Lisää tietokantaviite....
  • Valitse jompi:
    • Tietokantaprojekti nykyisessä työtilassa (Tällä tavalla viitattava tietokantaprojekti on myös avattava Visual Studio Codessa), tai
    • Datatier-sovellus (.dacpac) (Oletetaan, että olet rakentanut, jos sinulla on varastolle rakennettu .dacpacMarketing ).
  • Aseta viitevaihtoehdot:
    • Viitetyyppi: Sama palvelin, eri tietokanta.
    • Tietokannan nimi tai muuttuja: Käytä SQLCMD-muuttujaa, esimerkiksi [$(MarketingWarehouseName)].
  • Tallenna ja rakenna myyntiprojekti uudelleen.

Tiedostossa .sqlproj pitäisi näkyä merkintä, joka on samankaltainen:

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

Vihje

SQLCMD-muuttujan käyttäminen etävaraston nimeksi antaa mahdollisuuden käyttää samaa projektia uudelleen kaikissa ympäristöissä, kuten Dev/Test/Prod, joissa varastojen nimet voivat vaihdella.

Vaihe 3: Luo varastoinvälinen näkymä myyntiin

Lisää projektiin Sales näkymä, joka näyttää varastosta 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;

Avainkohdat:

  • Kolmiosainen nimi [$(MarketingWarehouseName)].[dbo].[CustomerEngagement] vastaa T-SQL-mallia, jota käytetään Fabric SQL -editorissa poikkivarastokyselyissä.
  • DacFx ratkaisee ulkoisen tietokannan tietokantaviitteen kautta.

Rakenna projekti niin, ettei ole SQL71501 ratkaisemattomia viitevirheitä .

Vaihe 4: Julkaise markkinointivarasto ja sitten myynti

Välttääksesi käyttöönotto-ongelmia:

  • Rakenna ja julkaiseZava.Marketing.Warehouse ensimmäinen:
    • Napsauta hiiren oikealla Projekti → Rakenna.
    • Napsauta hiiren oikealla projektia → Julkaise → valitse ZavaMarketingWarehouse.
  • Kun Marketing käyttöönotto onnistuu, rakenna ja julkaiseZava.Sales.Warehouse:
    • Napsauta hiiren oikealla Projekti → Rakenna.
    • Napsauta hiiren oikealla projektia → Julkaise → valitse ZavaSalesWarehouse.

Tuloksena syntyvä käyttöönotto on:

Zava.Marketing.Warehouse (ei ulkoisia riippuvuuksia) → Zava.Sales.Warehouse (riippuu Marketing)

Nyt mikä tahansa T-SQL-kysely ZavaSalesWarehouse voi käyttää dbo.CustomerEngagementFact näkymää, joka lukee Marketing sisäisesti varastosta cross-warehouse T-SQL:n avulla.

Malli 2: Varastojen väliset riippuvuudet hallitaan ennen ja jälkeen käyttöönottoa edeltävien skriptien avulla

Joissakin Zava Analyticsin tilanteissa molemmat toimialueet saattavat tarvita toisistaan riippuvia aggregoituja objekteja. Esimerkki:

  • Myynti haluaa näkymän, joka käyttää markkinointikampanjatietoja tuottaakseen myyntituloja per markkinointikampanja.
  • Markkinointi haluaa näkymän, joka käyttää myyntitulotietoja markkinointikampanjoiden tehokkuuden takaamiseksi.

Et halua, että molemmat objektit ovat säännöllisiä näkymiä, jotka osallistuvat täydelliseen mallin käyttöönottoon, koska se voi aiheuttaa syklisen riippuvuuden tai hauraan käyttöönoton järjestyksen.

Sen sijaan sinä:

  • Pidä jokaisen varaston ydinmalli itsenäisenä.
  • Käytä jälki-deployment-skriptejä yhdessä projektissa luodaksesi lisää varastoinnäkymiä, kun molemmat skeemat ovat valmiina.

Vaihe 1: Lisää tietokantaviittaukset käännösaikaiseen validointiin

Aseta referenssit samankaltaisesti kuin Pattern 1:ssä, mutta molempiin projekteihin:

  • Lisää Zava.Sales.Warehouseviittaus markkinointiin muodossa [$(MarketingWarehouseName)].
  • Halutessasi Zava.Marketing.Warehouselisää viittaus myyntiin kautta [$(SalesWarehouseName)] , jos haluat skripteissä käytettävän cross-warehouse-näkymien käännösaikaisen validoinnin.

Tiedostoissa .sqlproj voit asettaa seuraavaa:

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

Vaihe 2: Luo ydinobjektit tavallisina projektiobjekteina

Esimerkki:

  • Sales projekti:

    • dbo.CustomerRevenue-taulu
    • dbo.SalesByCampaign näkymä (käyttäen vain paikallisia taulukoita)
  • Marketing projekti:

    • dbo.Campaigns-taulu
    • dbo.CampaignStats näkymä (käyttäen vain paikallisia taulukoita)

Nämä kohteet eivät käytä varastojen välistä kyselyä. Seuraavassa vaiheessa esittelemme ristiinvarastoviittaukset.

Vaihe 3: Lisää jälki-deployment-skripti varastojen välisille siltanäkymiin

Valitse yksi varasto siltaobjekteihin; tyypillisesti se alue, joka kuluttaa yhdistetyn ulostulon eniten. Oletetaan Sales , että on tuo alue.

  • Projektissa Sales : Napsauta projektia hiiren oikealla ja lisääPost-Deployment Script.
  • Nimeä käsikirjoitus PostDeployment_CrossWarehouse.sql.
  • Skriptissä luo tai muokkaa varastojen välisiä näkymiä käyttämällä IF EXISTS / / DROPCREATE kuvioita, jotta ne pysyvät idempotentteina.

Esimerkki skriptistä, Sales joka viittaa Marketing varaston objekteihin:

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

Tässä:

  • Ydin Sales - ja Marketing varastoprojektit pysyvät itsenäisinä ja käyttöönotettavina itsenäisinä.
  • Siltanäkymäluodaan skeeman käyttöönoton jälkeen jälki-deployment-skriptillä.
  • Jos käyttöönotto suoritetaan useita kertoja, se on idempotentti, koska skripti pudottaa ja luo näkymän uudelleen turvallisesti.

Vaihe 4: (Valinnainen) Käytä esikäyttöönottoskriptejä suojaamaan hauraita riippuvuuksia

Kehittyneemmissä tilanteissa saatat:

  • Käytä pre-deployment -skriptiä poistaaksesi tai poistaaksesi pois varastojen väliset näkymät, jotka voisivat estää skeeman muutokset (esimerkiksi jos nimeät sarakkeita uudelleen).
  • Annetaan DacFx:n soveltaa skeema-eroa.
  • Käytä jälki-deployment-skriptiä luodaksesi tai päivittääksesi varastojen väliset näkymät.

Tärkeää

Ennen ja jälkeen käyttöönottoa koskevat skriptit suoritetaan osana käyttöönottosuunnitelmaa ja niiden tulee olla:

  • Idempotentti, eli niitä on turvallista käyttää useita kertoja.
  • Yhteensopiva DacFx:n tuottaman lopullisen skeeman kanssa.
  • Vapaa tuhoisista muutoksista, jotka ovat ristiriidassa vakuutuksesi BlockOnPossibleDataLoss kanssa.

Vaihe 5: Julkaisujärjestys skriptihallinnoimille riippuvuuksille

Yleinen malli Zava Analyticsille:

  • Julkaise perusprojekteja:
    • Zava.Marketing.Warehouse (ydinskeema)
    • Zava.Sales.Warehouse (ydinskeema + varastojen välinen jälkiasennusskripti)
  • Annetaan Salesin jälki-käyttöönoton skriptin luoda siltanäkymät sen jälkeen, kun sen oma skeema ja viitattu Marketing skeema on otettu käyttöön.

Jos lisäät enemmän kuin kaksi varastoa, toista tämä kuvio kerroksittain. Älä koskaan luo syklisiä riippuvuuksia tavallisten projektiobjektien kautta.

Jatka oppimista

  • Yhdistä nämä mallit lähdekoodin hallintaan ja CI/CD-ohjeisiinSource Control with Fabric Data Warehouse - ja Fabric git integration -dokumentaatioissa.
  • Laajenna Zava Analytics -skenaariota kattamaan Dev/Test/Prod-ympäristöt , käyttäen käyttöönottoputkia tai ulkoista CI/CD:tä julkaisutilausten järjestämiseen useiden varastojen välillä.