Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
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.
- Jos haluat luoda uuden näytevaraston, katso Mallivaraston luominen Microsoft Fabricissa.
- Luo tai poimi tietokantaprojekti jokaiselle varastolle Visual Studio Codessa.
- Luodaksesi tietokantaprojektin olemassa olevalle varastollesi tai uudelle varastolle, katso Kehitä varastoprojektit 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:
ZavaSalesWarehouseZavaMarketingWarehouse
Tietokantaprojekti Visual Studio Codessa:
Zava.Sales.WarehouseZava.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:
-
Salesvaatii asiakaskohtaista markkinointivuorovaikutusta. -
MarketingTarvitsee 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:
-
SalesRiippuuMarketingsitoutumisdatasta. -
Marketingei riipuSalesmistään käyttöönoton aikana tarvittavista objekteista.
Käytännössä:
Zava.Sales.Warehouseon tietokantaviittaus .Zava.Marketing.Warehouse
- T-SQL varastossa
Salesvoi käyttää kolmiosaisia nimiä, kuten:SELECT * FROM ZavaMarketingWarehouse.Marketing.CampaignEngagement -
Zava.Marketing.Warehouseei viittaaSalesobjekteihin, 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 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.CustomerRollupnä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.CampaignAttributionnä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:
-
CustomerRollupMyynnissä riippuuCustomerEngagementmarkkinoinnista. -
CampaignAttributionMarkkinoinnissa riippuuCustomerRollupmyynnistä.
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ähetettyZavaSalesWarehouse -
Zava.Marketing.Warehouse→ lähetettyZavaMarketingWarehouse
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.Warehouseprojektia 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 julkaise
Zava.Marketing.Warehouseensimmäinen:- Napsauta hiiren oikealla Projekti → Rakenna.
- Napsauta hiiren oikealla projektia → Julkaise → valitse
ZavaMarketingWarehouse.
- Kun
Marketingkä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:
Salesprojekti:-
dbo.CustomerRevenue-taulu -
dbo.SalesByCampaignnäkymä (käyttäen vain paikallisia taulukoita)
-
Marketingprojekti:-
dbo.Campaigns-taulu -
dbo.CampaignStatsnä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/ /DROPCREATEkuvioita, 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- jaMarketingvarastoprojektit 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
BlockOnPossibleDataLosskanssa.
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
Marketingskeema 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ä.