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. Parte-se de dois projetos de armazém de dados existentes e configuram-se dependências unidirecionais entre eles, utilizando referências de base de dados e, quando necessário, scripts de pré-implementação e pós-implementação.
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 pressupõe que o seu espaço de trabalho do Fabric é o alvo de implementação e que o esquema T-SQL reside num ou em mais projetos do Visual Studio Code que gere com controlo de 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 precisas deste tipo de lógica, move um lado da dependência para:
- Um script pós-implantação, ou
- Um modelo semântico a jusante ou relatório que une os dois armazéns no momento da consulta.
Utilize scripts de pré e pós-implementação para a lógica entre armazéns sensível à implementação
Como as implementações em armazém são operações completas de diferença de esquema (não implementações parciais por objeto), trate cuidadosamente os itens entre armazém:
Se o Armazém A e o Armazém B precisam ambos de objetos que dependem um do outro:
- Mantém as tabelas centrais e as vistas principais em cada projeto de armazém.
- Mover vistas de ponte ou objetos utilitários que criam ciclos em scripts de pré ou pós-implementação num projeto.
- Certifica-te de que esses scripts são idempotentes e seguros para reexecutar.
Exemplos de padrões:
- Script pré-implantação: eliminar temporariamente uma vista entre armazéns antes de aplicar alterações no esquema que a possam incompatibilizar.
- Script pós-implementação: recriar ou atualizar a vista inter-armazéns após a implementação de ambos os armazéns.
Para mais informações e exemplos, consulte Scripts de pré-implementação e pós-implementação para o Fabric Data Warehouse.
Padrão 1: Referências diretas entre armazéns via 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
Crie ou extraia cada projeto utilizando os passos em Desenvolver projetos warehouse no 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 uma das seguintes opções:
- Projeto de base de dados no espaço de trabalho atual (também abrir o projeto de base de dados referenciado no Visual Studio Code), ou
-
Aplicação da camada de dados (.dacpac) (utilize esta opção se criou um
.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
Ao usar uma variável SQLCMD para o nome do armazém remoto, pode reutilizar o mesmo projeto em todos os seus ambientes, como Dev, Test e Prod.
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 o controlo de código-fonte e as orientações sobre CI/CD em Desenvolvimento e implementação e com a documentação da integração do Git no Fabric.
- 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.