Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Z tego artykułu dowiesz się, jak modelować i wdrażać zależności między magazynami przy użyciu projektów bazy danych SQL w programie Visual Studio Code. Rozpoczynasz od dwóch istniejących projektów magazynu i konfigurujesz między nimi zależności jednokierunkowe przy użyciu odwołań do bazy danych i, w razie potrzeby, skryptów przed wdrożeniem i po wdrożeniu.
Ten artykuł opiera się na pojęciach tworzenia projektów magazynu w programie Visual Studio Code i zakłada, że jesteś już zaznajomiony z kompilowaniem i publikowaniem pojedynczego projektu magazynu.
Wymagania wstępne
Przed rozpoczęciem upewnij się, że:
- Utwórz dwa magazyny Fabric w jednym obszarze roboczym.
- Aby utworzyć nowy przykładowy magazyn, zobacz Tworzenie przykładowego magazynu w usłudze Microsoft Fabric.
- Utwórz lub wyodrębnij projekt bazy danych dla każdego magazynu w programie Visual Studio Code.
- Aby utworzyć projekt bazy danych dla istniejącego magazynu lub nowego magazynu, zobacz Tworzenie projektów magazynu w programie Visual Studio Code.
- Zainstaluj program Visual Studio Code na stacji roboczej.
- Zainstaluj zestaw .NET SDK, aby skompilować i opublikować projekty bazy danych.
- Zainstaluj dwa rozszerzenia programu Visual Studio Code: Projekty baz danych SQL i SQL Server (mssql).
- Wymagane rozszerzenia można zainstalować bezpośrednio z Marketplace w Visual Studio Code, wyszukując "SQL Database Projects" lub "SQL Server (mssql)".
- Projekty repozytorium są weryfikowane, kompilowane i mogą być publikowane w programie Visual Studio Code.
Uwaga / Notatka
Ten artykuł koncentruje się na projektach repozytoriów w programie Visual Studio Code i sposobie ich wersjonowania w usłudze Git jako typowych projektów kodu. Integracja Fabric Git dla obszarów roboczych i elementów magazynowych jest omówiona oddzielnie w dokumentacji Kontrola wersji z Fabric Data Warehouse i integracji z Git. W tym artykule założono, że obszar roboczy Fabric jest celem wdrożenia, a schemat T-SQL znajduje się w jednym lub większej liczbie projektów Visual Studio Code, które są kontrolowane wersyjnie w Git.
Ten artykuł nie obejmuje rozwoju między-magazynowego dla punktu końcowego analityki SQL w Lakehouse. Tabele usługi Lakehouse i obiekty punktu końcowego SQL nie są śledzone w kontroli źródła tak samo jak projekty magazynu. Używaj elementów magazynu z projektami bazy danych, aby uzyskać pełną obsługę integracji i wdrażania usługi Git w środowiskach natywnych i narzędziach klienckich usługi Fabric.
Scenariusz: Wielodomenowe magazyny Zava Analytics
Usługa Zava Analytics używa dwóch domen biznesowych:
- Sales — zamówienia klientów, przychody i metryki lejka sprzedażowego.
- Marketing — kampanie, kanały i metryki zaangażowania.
Każda domena ma:
Magazyn Fabric w tym samym obszarze roboczym:
ZavaSalesWarehouseZavaMarketingWarehouse
Projekt bazy danych w programie Visual Studio Code:
Zava.Sales.WarehouseZava.Marketing.Warehouse
Aby utworzyć kompleksowe ELT i raportowanie, każda domena wymaga widoków tylko do odczytu w celu uzyskania dostępu do danych z innej domeny:
-
Saleswymaga zaangażowania marketingowego przez klienta. -
Marketingpotrzebuje wyników sprzedaży dla poszczególnych kampanii.
Należy wykonać:
- Ustanów jednokierunkowe zależności między magazynami za pomocą odwołań do bazy danych.
- Unikaj cyklicznych zależności.
- Użyj skryptów wstępnych i po wdrożeniu w przypadkach, w których obiekty w obu magazynach zależą od siebie.
Upewnij się, że zależności między magazynami są jednokierunkowe
Dla każdej pary magazynów wybierz kierunek zależności logicznej:
Przykład:
-
Saleszależy odMarketingdanych zaangażowania. -
Marketingnie zależy od żadnych obiektówSales, które są potrzebne w czasie wdrażania.
W praktyce:
- Język T-SQL w
Salesmagazynie może używać nazw trzyczęściowych, takich jak:SELECT * FROM ZavaMarketingWarehouse.Marketing.CampaignEngagement -
Zava.Marketing.Warehousenie odwołuje się doSalesobiektów, które wymusiłyby cykl zależności w czasie wdrażania.
Wskazówka
Dla każdej pary magazynów rysuj prosty diagram strzałki (Sales → Marketing). Jeśli znajdziesz strzałki wskazujące w obu kierunkach dla tego samego typu obiektu, prawdopodobnie trzeba refaktoryzować lub przenieść logikę do skryptów wstępnych i po wdrożeniu.
Unikaj cyklicznych zależności
Zależność cykliczna występuje, gdy Magazyn A i Magazyn B zależą od siebie w sposób, którego silnik nie może rozwiązać w jednym wdrożeniu.
Przykład problemu (nie rób tego):
-
ZavaSalesWarehouse.dbo.CustomerRollupwidok: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.CampaignAttributionwidok: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;
W tym antywzór:
-
CustomerRollupw obszarze Sprzedaży zależyCustomerEngagementod Marketingu. -
CampaignAttributionw Marketingu zależy odCustomerRollupw Sprzedaży.
Ten antywzorzec tworzy cykl: Widok sprzedaży → Widok marketingowy → Widok sprzedaży ponownie.
Wskazówki:
Nie modeluj wzajemnych zależności między magazynami jako zwykłych obiektów na poziomie schematu. Jeśli naprawdę potrzebujesz tej logiki, przenieś jedną stronę zależności do:
- Skrypt po wdrożeniu lub
- Podrzędny model semantyczny lub raport, który łączy dwa magazyny w czasie wykonywania zapytań.
Używanie skryptów przed wdrożeniem i po wdrożeniu na potrzeby wrażliwej logiki między magazynami
Ponieważ wdrożenia magazynu to pełne operacje porównywania schematów (nie częściowe wdrożenia poszczególnych obiektów), postępuj ostrożnie z elementami powiązanymi z różnymi magazynami.
Jeśli magazyn A i Magazyn B potrzebują obiektów, które zależą od siebie nawzajem:
- Zachowaj podstawowe tabele i podstawowe widoki w każdym projekcie magazynu.
- Przenieś widoki mostków lub obiekty narzędziowe, które tworzą cykle, do skryptów przedwdrożeniowych lub powdrożeniowych w jednym projekcie.
- Upewnij się, że te skrypty są idempotentne i bezpieczne do ponownego uruchomienia.
Przykładowe wzorce:
- Skrypt przed wdrożeniem: tymczasowo upuść widok między magazynami przed zastosowaniem zmian schematu, które spowodują jego przerwanie.
- Skrypt po wdrożeniu: utwórz ponownie lub zaktualizuj widok między magazynami po wdrożeniu obu magazynów.
Wzorzec 1: Bezpośrednie odniesienia między magazynami poprzez odwołania bazodanowe
W tym wzorcu modelujesz jednokierunkowe zależności bezpośrednio w projektach bazy danych przy użyciu odwołań do bazy danych.
Krok 1. Rozpoczęcie od dwóch istniejących projektów magazynu
Musisz mieć już:
-
Zava.Sales.Warehouse→ wdrożone doZavaSalesWarehouse -
Zava.Marketing.Warehouse→ wdrożone doZavaMarketingWarehouse
Każdy projekt został utworzony lub wyodrębniony, wykonując kroki z "Tworzenia projektów magazynowych w Visual Studio Code."
Krok 2: Dodaj odwołanie do bazy danych z Sales do Marketing
- W programie Visual Studio Code otwórz widok Projekty bazy danych .
- Kliknij prawym przyciskiem myszy projekt
Zava.Sales.Warehouse. - Wybierz pozycję Dodaj odwołanie do bazy danych....
- Wybierz jedną z:
- Projekt bazy danych w bieżącym obszarze roboczym (projekt bazy danych, do których odwołuje się ten sposób, musi być również otwarty w programie Visual Studio Code) lub
-
Aplikacja warstwy danych (.dacpac) (Zakłada się, że zbudowałeś
.dacpac, jeśli masz gotowąMarketingaplikację dla magazynu).
- Ustaw opcje referencyjne:
- Typ odwołania: Ten sam serwer, inna baza danych.
-
Nazwa bazy danych lub zmienna: Użyj zmiennej SQLCMD, na przykład
[$(MarketingWarehouseName)].
- Zapisz i ponownie skompiluj projekt Sales.
.sqlproj W pliku powinien zostać wyświetlony wpis podobny do:
<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>
Wskazówka
Użycie zmiennej SQLCMD dla nazwy magazynu zdalnego umożliwia ponowne użycie tego samego projektu we wszystkich środowiskach, takich jak Tworzenie i testowanie/prod, gdzie nazwy magazynów mogą się różnić.
Krok 3. Tworzenie widoku między magazynami w usłudze Sales
W projekcie Sales dodaj widok, który odczytuje z magazynu 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;
Najważniejsze kwestie:
- Nazwa
[$(MarketingWarehouseName)].[dbo].[CustomerEngagement]trójczęściowa jest zgodna ze wzorcem języka T-SQL używanym do zapytań między magazynami w edytorze SQL sieci szkieletowej. - Narzędzie DacFx rozpoznaje zewnętrzną bazę danych za pomocą odwołania do bazy danych.
Skompiluj projekt, aby upewnić się, że nie ma SQL71501 nierozwiązanych błędów referencyjnych .
Krok 4. Publikowanie magazynu marketingowego, a następnie sales
Aby uniknąć problemów z wdrażaniem:
-
Buduj i publikuj
Zava.Marketing.Warehousenajpierw:- Kliknij prawym przyciskiem myszy projekt → Kompiluj.
- Kliknij prawym przyciskiem myszy projekt → Opublikuj → wybierz pozycję
ZavaMarketingWarehouse.
- Po
Marketingpomyślnym wdrożeniu skompiluj i opublikujZava.Sales.Warehouse:- Kliknij prawym przyciskiem myszki projekt → Kompilacja.
- Kliknij prawym przyciskiem myszy projekt → Opublikuj → wybierz pozycję
ZavaSalesWarehouse.
Wynikowy przepływ wdrażania to:
Zava.Marketing.Warehouse (brak zależności zewnętrznych) → Zava.Sales.Warehouse (zależy od Marketing)
Teraz każde zapytanie T-SQL w ZavaSalesWarehouse może używać widoku dbo.CustomerEngagementFact, który wewnętrznie odczytuje z magazynu Marketing przy użyciu między-magazynowego T-SQL.
Wzorzec 2: zależności między magazynami zarządzane za pośrednictwem skryptów przed wdrożeniem i po wdrożeniu
W niektórych scenariuszach analizy Zava obie domeny mogą wymagać zagregowanych obiektów, które zależą od siebie nawzajem. Przykład:
- Sprzedaż chce mieć widok, który używa danych z kampanii marketingowych do dostarczenia informacji o przychodach z kampanii marketingowych.
- Marketing chce mieć widok, który używa danych przychodów ze sprzedaży w celu zapewnienia skuteczności kampanii marketingowej.
Nie powinieneś, aby oba te obiekty były standardowymi widokami, które uczestniczą w pełnym wdrożeniu modelu, ponieważ wiąże się to z ryzykiem cyklicznej zależności lub kruchego porządku wdrażania.
Zamiast tego, należy:
- Zachowaj niezależny model podstawowy każdego magazynu.
- Użyj skryptów po wdrożeniu w jednym projekcie, aby utworzyć więcej widoków między magazynami po utworzeniu obu schematów.
Krok 1. Dodawanie odwołań do bazy danych na potrzeby walidacji czasu kompilacji
Skonfiguruj odwołania podobne do wzorca 1, ale dla obu projektów:
- W
Zava.Sales.Warehouse, dodaj odwołanie do Marketing za pośrednictwem[$(MarketingWarehouseName)]. - W
Zava.Marketing.Warehouseopcjonalnie dodaj odwołanie do Sales za pomocą[$(SalesWarehouseName)]jeśli chcesz przeprowadzić walidację podczas kompilacji widoków między magazynami używanych w skryptach.
W plikach .sqlproj można ustawić następujące ustawienia:
<SqlCmdVariable Include="SalesWarehouseName">
<DefaultValue>ZavaSalesWarehouse</DefaultValue>
</SqlCmdVariable>
Krok 2. Tworzenie obiektów podstawowych jako zwykłych obiektów projektu
Przykład:
Salesprojekt:- Tabela usługi
dbo.CustomerRevenue -
dbo.SalesByCampaignwidok (tylko przy użyciu tabel lokalnych)
- Tabela usługi
Marketingprojekt:- Tabela usługi
dbo.Campaigns -
dbo.CampaignStatswidok (tylko przy użyciu tabel lokalnych)
- Tabela usługi
Te obiekty nie używają zapytań między magazynami danych. W następnym kroku wprowadzimy odwołania między magazynami.
Krok 3. Dodawanie skryptu po wdrożeniu dla widoków mostka między magazynami
Wybierz jeden magazyn do hostowania obiektów mostka; zazwyczaj domena, która zużywa połączone dane wyjściowe w największym stopniu. Załóżmy, że Sales jest tą domeną.
- W projekcie
Sales: kliknij prawym przyciskiem myszy na projekcie, a następnie wybierz Dodaj → Skrypt wdrożeniowy. - Nadaj skryptowi
PostDeployment_CrossWarehouse.sqlnazwę . - W skrypcie utwórz lub zmień widoki między magazynami, używając wzorców
IF EXISTS/DROP/CREATEw celu zachowania ich idempotentności.
Przykład skryptu w Sales, który będzie odnosił się do obiektów magazynu Marketing.
-- 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
Tutaj:
- Projekty podstawowe
Salesi magazynoweMarketingpozostają niezależne i wdrażalne samodzielnie. - Widok mostka jest tworzony po wdrożeniu schematu za pomocą skryptu po wdrożeniu.
- Jeśli wdrożenie jest wykonywane wiele razy, jest idempotentne, ponieważ skrypt bezpiecznie usuwa i ponownie tworzy widok.
Krok 4. (Opcjonalnie) Używanie skryptów przed wdrożeniem w celu ochrony niestabilnych zależności
W bardziej zaawansowanych scenariuszach możesz:
- Użyj skryptu przed wdrożeniem , aby usunąć lub wyłączyć widoki między magazynami, które mogą blokować zmiany schematu (na przykład jeśli zmieniasz nazwy kolumn).
- Pozwól DacFx zastosować różnice schematu.
- Użyj skryptu po wdrożeniu, aby odtworzyć lub zaktualizować widoki międzyhurtowniane.
Ważne
Skrypty przed wdrożeniem i po wdrożeniu są uruchamiane w ramach planu wdrożenia i muszą być następujące:
- idempotentne, co oznacza, że są bezpieczne do wielokrotnego uruchamiania.
- Zgodny ze schematem końcowym wyprodukowanym przez DacFx.
- Wolne od destrukcyjnych zmian, które powodują konflikt z zasadami
BlockOnPossibleDataLoss.
Krok 5. Kolejność publikowania dla zależności zarządzanych przez skrypty
Typowy wzorzec analizy Zava:
- Publikowanie projektów podstawowych:
-
Zava.Marketing.Warehouse(podstawowy schemat) -
Zava.Sales.Warehouse(podstawowy schemat i skrypt po wdrożeniu między magazynami)
-
- Pozwól skryptowi wdrożeniowemu Sales utworzyć widoki mostu po wdrożeniu jego własnego schematu i schematu
Marketing, do którego się odnosi.
Jeśli wprowadzisz więcej niż dwa magazyny, powtórz ten wzorzec w warstwach. Nigdy nie twórz zależności cyklicznych za pośrednictwem zwykłych obiektów projektu.
Kontynuuj naukę
- Połącz te wzorce ze wskazówkami dotyczącymi kontroli źródła i CI/CD (ciągłej integracji/ciągłego wdrażania) w dokumentacji 'Source control with Fabric Data Warehouse' i dokumentacji integracji Git z Fabric.
- Rozszerz scenariusz analizy Zava, aby uwzględnić środowiska Dev/Test/Prod, korzystając z potoków wdrażania lub zewnętrznego CI/CD do koordynacji kolejności publikacji w wielu magazynach.