Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste artigo, aprende a modelar e implementar dependências cross-warehouse utilizando projetos de bases de dados SQL no Visual Studio Code. Começa-se a partir de dois projetos de armazém existentes e configura-se dependências unidirecionais entre eles usando referências de base de dados.
Este artigo baseia-se nos conceitos do Desenvolver projetos de armazém em Visual Studio Code e assume que já se sente confortável a construir e publicar um único projeto de armazém.
Pré-requisitos
Antes de começar, certifique-se de que:
- Cria dois Armazéns de Tecidos no mesmo espaço de trabalho.
- Para criar um novo armazém de amostras, consulte Criar um Armazém de amostras em Microsoft Fabric.
- Crie ou extraia um projeto base de dados para cada armazém em Visual Studio Code.
- Para criar um projeto de base de dados para o seu armazém existente ou para um novo armazém, veja Desenvolver projetos de armazém em Visual Studio Code.
- Instala Visual Studio Code na tua estação de trabalho.
- Instala o SDK .NET para construir e publicar projetos de bases de dados.
- Instale duas extensões Visual Studio Code: SQL Database Projects e SQL Server (mssql).
- Pode instalar as extensões necessárias diretamente a partir do marketplace do Visual Studio Code pesquisando por "SQL Database Projects" ou "SQL Server (mssql)".
- Os projetos de armazém validam, constroem e podem ser publicados no Visual Studio Code.
Observação
Este artigo foca-se em projetos de armazenamento no Visual Studio Code e em como os versiona no Git como projetos de código regular. A integração do Fabric Git para espaços de trabalho e itens de armazém é abordada separadamente em Desenvolvimento e Implementação e integração Git. O artigo assume que o seu espaço de trabalho Fabric é o destino de implementação e que o esquema T-SQL reside num ou mais projetos do Visual Studio Code que controla versões no Git.
Este artigo não aborda o desenvolvimento cross-warehouse para o endpoint de análise SQL de um Lakehouse. As tabelas Lakehouse e objetos de endpoint de análise SQL não são objetos rastreados no controlo de código-fonte da mesma maneira que são os projetos de armazém. Use itens do Warehouse com projetos de bases de dados para uma integração completa com o Git e suporte ao deployment em experiências nativas do Fabric e em ferramentas de cliente.
Cenário: Armazéns interdomínio do Zava Analytics
O Zava Analytics utiliza dois domínios de negócio:
- Vendas – encomendas de clientes, receitas e métricas do pipeline.
- Marketing – campanhas, canais e métricas de envolvimento.
Cada domínio tem:
Um Armazém de Tecidos no mesmo espaço de trabalho:
ZavaSalesWarehouseZavaMarketingWarehouse
Um projeto base de dados em Visual Studio Code:
Zava.Sales.WarehouseZava.Marketing.Warehouse
Para construir ELT e relatórios de ponta a ponta, cada domínio necessita de vistas apenas de leitura para aceder a dados do outro domínio:
-
SalesPrecisa de envolvimento de marketing por parte do cliente. -
MarketingPrecisa de desempenho de vendas por campanha.
Precisa de:
- Estabelecer dependências unidirecionais entre armazéns via referências de bases de dados.
- Evite dependências cíclicas.
Garantir que as dependências entre armazéns sejam unidirecionais
Para cada par de armazéns, escolha uma direção para a dependência lógica:
Exemplo:
-
Salesdepende dos dados de engajamento deMarketing. -
Marketingnão dependeSalesde quaisquer objetos que sejam necessários no momento da implantação.
Na prática:
Zava.Sales.Warehouse tem uma referência de base de dados a Zava.Marketing.Warehouse.
- O T-SQL no armazém de
Salespode usar nomes com três componentes, como:SELECT * FROM ZavaMarketingWarehouse.Marketing.CampaignEngagement -
Zava.Marketing.Warehousenão faz referênciaSalesa objetos que forçariam um ciclo de dependência no momento da implementação.
Sugestão
Para cada par de armazéns, desenhe um diagrama simples de setas (Sales → Marketing). Se encontrares setas a apontar em ambas as direções para o mesmo tipo de objeto, refatora o design para restaurar uma dependência unidirecional.
Evitar dependências cíclicas
Uma dependência cíclica ocorre quando o Armazém A e o Armazém B dependem um do outro de uma forma que o motor não consegue resolver numa única implementação.
Exemplo de problema (não faças isto):
-
ZavaSalesWarehouse.dbo.CustomerRollupVeja: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.CampaignAttributionVeja: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;
Neste anti-padrão:
-
CustomerRollupem Vendas depende deCustomerEngagementem Marketing. -
CampaignAttributionem Marketing depende deCustomerRollupVendas.
Este anti-padrão cria um ciclo: visão de vendas → visão de marketing → visão de vendas novamente.
Orientação:
Não modele dependências mútuas entre armazéns como objetos regulares ao nível do esquema. Se realmente precisar deste tipo de lógica, mova um lado da dependência para um modelo semântico ou relatório posterior que une os dois armazéns no momento da consulta.
Referências diretas entre armazéns através de referências de base de dados
Neste padrão, modelas dependências unidirecionais diretamente nos projetos de base de dados usando Referências de Base de Dados.
Passo 1: Começar a partir de dois projetos de armazém existentes
Já devias ter:
-
Zava.Sales.Warehouse→ implantado emZavaSalesWarehouse -
Zava.Marketing.Warehouse→ implantado emZavaMarketingWarehouse
Cada projeto foi criado ou extraído usando os passos em Desenvolver projetos de armazém em Visual Studio Code.
Passo 2: Adicionar uma referência da base de dados de Vendas para a de Marketing
- No Visual Studio Code, abra o painel Projetos de Base de Dados.
- Clique com o botão direito do rato no
Zava.Sales.Warehouseprojeto. - Selecionar Adicionar Referência de Base de Dados....
- Escolha um dos:
- Projeto de base de dados no espaço de trabalho atual (Um projeto de base de dados referenciado desta forma também deve estar aberto em Visual Studio Code), ou
-
Aplicação no nível de dados (.dacpac) (Assume que já concluiu uma compilação
.dacpacpara o armazémMarketing).
- Defina as opções de referência:
- Tipo de referência: Mesmo servidor, base de dados diferente.
-
Nome ou variável da base de dados: Use uma variável SQLCMD, por exemplo
[$(MarketingWarehouseName)].
- Salve e reconstrua o projeto de Vendas.
No .sqlproj ficheiro, deverá ver uma entrada semelhante a:
<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>
Sugestão
Usar uma variável SQLCMD para o nome do armazém remoto permite-te reutilizar o mesmo projeto em todos os teus ambientes, como Dev/Test/Prod, onde os nomes dos armazéns podem ser diferentes.
Passo 3: Criar uma vista inter-armazéns no sistema de Vendas
No projeto Sales, adicione uma visualização que leia do armazém 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;
Pontos principais:
- O nome
[$(MarketingWarehouseName)].[dbo].[CustomerEngagement]em três partes corresponde ao padrão T-SQL usado para consultas cross-warehouse no editor Fabric SQL. - O DacFx resolve a base de dados externa através da referência da base de dados.
Construa o projeto para garantir que não há SQL71501 erros de referência não resolvidos .
Passo 4: Publique o armazém de Marketing e depois as Vendas
Para evitar problemas de implantação:
-
Construir e publicar
Zava.Marketing.WarehousePrimeiro:- Clique com o botão direito no projeto → Build.
- Clique com o botão direito do projeto → Publicar → escolher
ZavaMarketingWarehouse.
- Quando
Marketinga implementação for bem-sucedida, compilar e publicarZava.Sales.Warehouse:- Clique com o botão direito no projeto → Build.
- Clique com o botão direito do projeto → Publicar → escolher
ZavaSalesWarehouse.
O fluxo de implementação resultante é:
Zava.Marketing.Warehouse (sem dependências externas) → Zava.Sales.Warehouse (depende de Marketing)
Agora, qualquer consulta T-SQL em ZavaSalesWarehouse pode usar a dbo.CustomerEngagementFact view, que lê do Marketing warehouse internamente usando T-SQL entre armazéns.
Continue a aprender
- Combine este padrão com controlo de versões e orientação CI/CD em Desenvolvimento e implementação e documentação de integração Fabric git.
- Estenda o cenário do Zava Analytics para incluir ambientes Dev/Test/Prod, usando pipelines de implementação ou CI/CD externo para coordenar a ordem de publicação em vários armazéns.