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

Tässä artikkelissa opit, miten mallintaa ja ottaa käyttöön varastoriippuvuuksia SQL-tietokantaprojekteilla Visual Studio Code -ohjelmassa. Aloitat kahdesta olemassa olevasta varastoprojektista ja konfiguroit yksisuuntaiset riippuvuudet niiden välillä käyttämällä tietokantaviittauksia ja tarvittaessa esi- ja jälkiasennusskriptejä.

Tämä artikkeli rakentaa Develop varastoprojektit Visual Studio Code konsepteille 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 Code.
  • Asenna Visual Studio Code työasemallesi.
  • Asenna .NET SDK rakentaaksesi ja julkaisaksesi tietokantaprojekteja.
  • Asenna kaksi Visual Studio Code-laajennusta: SQL Database Projects ja SQL Server (mssql).
    • Voit asentaa tarvittavat laajennukset suoraan Visual Studio Code -markkinapaikalta hakemalla "SQL Database Projects" tai "SQL Server (mssql)".
  • Varastoprojektit validoivat, rakentavat ja voidaan julkaista Visual Studio Code-muodossa.

Note

Tämä artikkeli keskittyy varastoprojekteihin vuonna Visual Studio Code ja siihen, miten ne versiotaan Gitissä tavallisina koodiprojekteina. Fabric Git -integraatio työtiloille ja varasto-esineille käsitellään erikseen Development and Deployment- ja Git-integraatioissa. Artikkeli olettaa, että Fabric-työtilasi on käyttöönoton kohde ja T-SQL-skeema sijaitsee 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-taulukoita ja SQL-analytiikan päätepiste-objekteja 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 vuonna Visual Studio Code:

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

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 (Sales → Marketing). Jos löydät nuolia, jotka osoittavat molempiin suuntiin saman tyyppisessä objektissa, refaktoroi suunnittelu palauttaaksesi yksisuuntaisen riippuvuuden.

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.

Lisätietoja ja esimerkkejä löytyy kohdasta Pre-deployment ja post-deployment scripts for Fabric tietovarasto.

Malli 1: Suora ristiinvarastoviittaukset tietokantaviitteiden kautta

Tässä mallissa mallinnat yksisuuntaisia riippuvuuksia suoraan tietokantaprojekteissa käyttämällä tietokantaviitteitä.

Vaihe 1: Aloita kahdesta olemassa olevasta varastoprojektista

Sinun pitäisi jo tietää:

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

Luo tai purkaa jokainen projekti käyttämällä Develop warehouse projects -vaiheita Visual Studio Code:ssa.

Vaihe 2: Lisää tietokantaviite myynnistä markkinointiin

  • Vuonna Visual Studio Code avaa Database Projects -näkymä.
  • Napsauta Zava.Sales.Warehouse projektia oikealla.
  • Valitse Lisää tietokantaviite....
  • Valitse jokin seuraavista vaihtoehdoista:
    • Tietokantaprojekti nykyisessä työtilassa (avaa myös viitattu tietokantaprojekti Visual Studio Code:ssa), tai
    • Data-tier-sovellus (.dacpac) (käytä tätä vaihtoehtoa, jos olet rakentanut .dacpac a:n Marketing varastolle).
  • 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

Käyttämällä SQLCMD-muuttujaa etävaraston nimenä voit käyttää samaa projektia uudelleen kaikissa ympäristöissäsi, kuten Devissä, Testissä ja Tuotannossa.

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.

Jatka oppimista

  • Yhdistä tämä kaava version version hallintaan ja CI/CD-ohjeisiinkehityksessä ja käyttöönotossa sekä Fabric git -integraatiodokumentaatiossa.
  • 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ä.