Pular para o conteúdo principal

Desafio 22: projetar um pipeline de integração de dados

Tempo Estimado e Custo

75-90 min | Custo estimado: $5-12 | Peso no Exame: 20-25%

Introdução​

FreshMart é uma rede varejista nacional com 200 lojas, cada uma executando um banco de dados SQL Server local para transações de ponto de venda. Toda noite, a sede precisa de dados de vendas agregados de todas as lojas carregados em um data warehouse central Azure Synapse Analytics para planejamento de inventário e relatórios financeiros. Adicionalmente, a equipe de cadeia de suprimentos requer dados de inventário de um sistema SAP on-premises, e o departamento de marketing precisa de dados de desempenho de campanhas extraidos do Salesforce via REST API.

O processo atual depende de exportacoes manuais de CSV e anexos de e-mail, resultando em dados chegando 2-3 dias atrasados, erros frequentes de formatacao e nenhuma visibilidade sobre falhas. O CTO requer um pipeline automatizado e monitorado que entregue todas as três fontes de dados ao warehouse até as 6h diariamente, com retry automático em falhas e alertas por e-mail quando pipelines falham apos todas as tentativas serem esgotadas.

Seu desafio é projetar é implementar uma solução de integração de dados usando Azure Data Factory (ou Synapse Pipelines), incluindo orquestração através de múltiplas fontes, um self-hosted integration runtime para conectividade on-premises, mecanismos de trigger aprópriados e monitoramento abrangente.

Habilidades do exame cobertas​

  • Recomendar uma solução para integração de dados

Tarefas de design​

Parte 1: selecionar serviço de integração e projetar arquitetura​

  1. Crie uma matriz de decisão comparando estes serviços de integração para os requisitos da FreshMart:

    • Azure Data Factory
    • Synapse Pipelines (integrado dentro do workspace Synapse)
    • Azure Logic Apps
    • Azure Functions com código customizado

    Avalie em: ecossistema de conectores, suporte on-premises, complexidade de orquestração, capacidades de monitoramento, modelo de custo e requisitos de habilidade da equipe.

  2. Documente sua seleção de serviço com justificativa. Considere que a equipe de dados da FreshMart tem experiência em SQL mas experiência limitada em programacao.

  3. Projete a arquitetura de pipeline de alto nível mostrando:

    • Sistemas de origem (200 SQL Servers, SAP, Salesforce)
    • Posicionamento de integration runtime (cloud vs self-hosted)
    • Areas de staging (Azure Data Lake Storage Gen2)
    • Destino (Synapse Analytics dedicated SQL pool)
    • Fluxo de orquestração (pipeline master com pipelines filhos)

Parte 2: implementar pipelines do Data factory​

  1. Implante uma instância do Azure Data Factory e crie os seguintes linked services:

    • Azure SQL Database (simulando SQL Server on-premises via self-hosted IR)
    • Azure Data Lake Storage Gen2 (camada de staging)
    • Azure Synapse Analytics (destino)
  2. Projete e crie um pipeline parametrizado para a ingestao de dados de vendas das lojas:

    • Use uma atividade Lookup para recuperar a lista de lojas ativas
    • Use uma atividade ForEach para iterar sobre lojas e copiar dados em paralelo
    • Configure a atividade Copy com consulta de origem, configurações de sink e mapeamento de colunas aprópriados
    • Adicione configurações de tolerância a falhas (pular linhas incompativeis, registrar linhas puladas em log)
  3. Projete o pipeline para extracao de dados SAP:

    • Documente por que um self-hosted integration runtime é necessário para fontes on-premises
    • Descreva a instalacao e configuração do self-hosted IR em uma maquina on-premises
    • Projete a atividade de copia usando o conector SAP Table ou SAP ODP
    • Aborde consideracoes de rede (ExpressRoute, VPN ou regras de firewall para porta 443)
  4. Projete o pipeline para dados da REST API do Salesforce:

    • Use o conector REST ou conector Salesforce no Data Factory
    • Trate autenticação OAuth 2.0 e renovacao de token
    • Implemente paginacao para conjuntos de resultados grandes
    • Mapeie a resposta da API para o formato de staging

Parte 3: orquestração, triggers e tratamento de erros​

  1. Crie um pipeline de orquestração master que:

    • Execute os três pipelines de origem (lojas, SAP, Salesforce) em paralelo
    • Aguarde todos os três completarem antes de executar um pipeline de transformacao
    • Use dependência "Upon Completion" (não "Upon Success") para tratar falhas parciais graciosamente
  2. Configure um trigger de Schedule para executar o pipeline master as 23h todas as noites (permitindo tempo para todas as lojas fecharem e descarregarem transações).

  3. Implemente tratamento de erros e lógica de retry:

    • Defina contagem de retry para 3 com intervalos de 10 minutos em atividades de copia
    • Adicione uma atividade Web para enviar notificações de falha via webhook/e-mail
    • Registre metadados de execução do pipeline (hora de início, duracao, linhas copiadas, erros) em uma tabela de monitoramento
    • Projete uma regra de alerta usando Azure Monitor para falhas consecutivas de pipeline

Parte 4: decisão de design ETL vs ELT​

  1. Documente sua decisão entre ETL (transformar no Data Factory usando Data Flows) versus ELT (carregar dados brutos para staging, transformar no Synapse usando SQL):

    • Para dados de vendas das lojas: transformacoes pequenas (conversao de moeda, formatacao de data)
    • Para dados de inventário SAP: joins complexos através de múltiplas tabelas SAP
    • Para dados do Salesforce: achatamento simples de JSON aninhado
    • Considere: habilidades da equipe, volume de dados, custos de computacao e complexidade de depuracao
  2. Se usar ELT, crie stored procedures no Synapse que transformem dados staged no star schema final (tabelas fato e dimensão).

Criterios de sucesso​

  • ⬜Decision matrix comparing at least 3 integration services with rationale for final selection
  • ⬜Data Factory deployed with linked services for source, staging, and destination
  • ⬜Parameterized pipeline with ForEach and Copy activities handling multiple stores
  • ⬜Self-hosted integration runtime architecture documented with network requirements
  • ⬜Master pipeline orchestrates child pipelines with parallel execution and error handling
  • ⬜ETL vs ELT decision documented with justification for each data source

Dicas​

Dica 1: Azure Data Factory vs Synapse Pipelines

Synapse Pipelines e Azure Data Factory compartilham a mesma tecnologia subjacente e experiência de UI. A diferenca chave e o contexto de integração: Synapse Pipelines estao embutidos dentro de um workspace Synapse (integração mais estreita com SQL pools Synapse, Spark pools e data lake). Data Factory e standalone e melhor quando você precisa de pipelines independentes do Synapse ou conectando a muitos destinos diversos. Para este cenário, se o destino e Synapse Analytics, ambos funcionam - mas Data Factory e a resposta de exame mais comum para cenários de integração de dados gerais.

Dica 2: Self-Hosted Integration Runtime

Um self-hosted integration runtime (SHIR) é necessário para conectar a fontes de dados on-premises ou fontes de dados dentro de uma virtual network. Ele roda em uma maquina Windows com acesso de rede tanto a origem (SAP, SQL Server) quanto ao Azure (HTTPS de saida na porta 443). Consideracoes chave de design: instale em uma maquina dedicada (não o servidor de banco de dados), configure para alta disponibilidade com 2+ nos, e garanta que a maquina tenha memoria suficiente para marshaling de dados. O SHIR não requer regras de firewall de entrada - ele inicia conexões de saida para o Azure.

Dica 3: Paralelismo da Atividade ForEach

A atividade ForEach no Data Factory processa itens em paralelo por padrão (até 50 iteracoes concorrentes com a propriedade batchCount). Para 200 lojas, você pode definir batchCount para 20-50 dependendo da capacidade do banco de dados de origem e largura de banda de rede. Definir isSequential: true processa um de cada vez mas raramente é necessário a menos que a origem tenha limitacoes de concorrencia.

Dica 4: Seleção de Padrão ETL vs ELT

Escolha ELT quando: o destino tem computacao poderosa (Synapse SQL pool), transformacoes são expressaveis em SQL, volumes de dados são grandes e a equipe tem habilidades SQL. Escolha ETL (Data Flows no Data Factory) quando: transformacoes são complexas (requerendo Spark), você quer depuracao visual, ou o destino carece de capacidade de transformacao. Para a maioria dos cenários de data warehouse empresarial no Azure, ELT com Synapse e preferido porque aproveita o engine MPP para transformacoes em escala.

Dica 5: Monitoramento e Alertas

Data Factory fornece monitoramento integrado através do Azure Monitor com metricas como PipelineSucceededRuns, PipelineFailedRuns, ActivitySucceededRuns e TriggerSucceededRuns. Configure diagnostic settings para enviar logs ao Log Analytics para consultas avancadas. Para alertas por e-mail sobre falhas, use Azure Monitor Action Groups em vez de construir lógica de notificação customizada dentro dos pipelines.

Recursos de aprendizagem​

Verificação de conhecimento​

1. O sistema SAP da FreshMart esta on-premises atras de um firewall corporativo. Qual componente permite que o Azure Data Factory acesse esses dados sem abrir portas de firewall de entrada?

Self-hosted integration runtime (SHIR). O SHIR e instalado em uma maquina Windows dentro da rede corporativa que tem acesso ao sistema SAP. Ele estabelece conexões HTTPS de saida para o service bus do Azure Data Factory (nenhuma porta de entrada necessária). O Data Factory envia instrucoes ao SHIR via este canal de saida, e o SHIR executa atividades de copia localmente, enviando dados ao Azure pela mesma conexão de saida. Este e o padrão normal para acessar fontes on-premises sem VPN ou ExpressRoute (embora essas sejam alternativas se conectividade direta for preferida).

2. A API do Salesforce da equipe de marketing retorna resultados paginados com 2.000 registros por pagina é um token de próxima pagina. Como o pipeline do Data Factory deve tratar isso?

Use o conector REST com regras de paginacao. O conector REST do Data Factory suporta regras de paginacao configuraveis que automaticamente seguem tokens de próxima pagina até que todos os dados sejam recuperados. Você configura a regra de paginacao no linked service REST ou dataset, específicando onde a URL ou token de próxima pagina aparece na resposta (ex.: um header, campo do body ou parametro de query). A atividade Copy trata a iteracao transparentemente sem requerer uma atividade de loop.

3. Um pipeline tem três pipelines filhos paralelos (lojas, SAP, Salesforce). O pipeline SAP falha mas os outros dois tem sucesso. Usando dependência "Upon Completion", o que acontece com o pipeline de transformacao downstream?

O pipeline de transformacao ainda executa. "Upon Completion" significa que a atividade downstream executa independente de se o upstream teve sucesso ou falhou - ela apenas espera a atividade terminar. Isso permite que o pipeline de transformacao trate carregamentos parciais de dados graciosamente (talvez processando apenas as fontes que tiveram sucesso). Em contraste, "Upon Success" pularia a transformacao inteiramente se qualquer upstream falhasse. A escolha de design depende de se carregamentos parciais de dados são aceitaveis para o negócio.

4. Por que você escolheria ELT (carregar e depois transformar no Synapse) em vez de ETL (transformar no Data Factory Data Flows) para carregar 200 bancos de dados de lojas em um warehouse central?

O engine MPP (Massively Parallel Processing) do Synapse e otimizado para transformacoes em larga escala em dados já no warehouse. Carregar dados brutos via atividade Copy (custo mínimo de computacao) e depois executar transformacoes SQL no Synapse aproveita a computacao distribuida do dedicated SQL pool. Data Factory Data Flows usam clusters Spark que devem inicializar (5-7 minutos de cold start), são cobrados por minuto de computacao e são mais adequados para transformacoes complexas não-SQL. Para transformacoes expressaveis em SQL (joins, agregacoes, conversoes de tipo), ELT no Synapse e tipicamente mais rápido e mais barato em escala.

Laboratório de validação​

Implante uma prova de conceito mínima para validar seu design:

  1. Crie um resource group para este laboratório:
az group create --name rg-az305-challenge22 --location eastus
  1. Implante um Data Factory é uma storage account com containers de origem e destino:
az storage account create \
--name staz305ch22$RANDOM \
--resource-group rg-az305-challenge22 \
--sku Standard_LRS \
--kind StorageV2

az storage container create --name source --account-name <your-account-name>
az storage container create --name sink --account-name <your-account-name>

az storage blob upload \
--account-name <your-account-name> \
--container-name source \
--name sales-data.csv \
--data "store_id,date,revenue\n1,2024-01-01,5000\n2,2024-01-01,7500" \
--type block

az datafactory create \
--name adf-az305-ch22 \
--resource-group rg-az305-challenge22 \
--location eastus
  1. Crie um linked service e execute um pipeline de copia:
az datafactory linked-service create \
--factory-name adf-az305-ch22 \
--resource-group rg-az305-challenge22 \
--name BlobStorageLS \
--properties '{
"type": "AzureBlobStorage",
"typeProperties": {
"connectionString": "'$(az storage account show-connection-string --name <your-account-name> --resource-group rg-az305-challenge22 --query connectionString -o tsv)'"
}
}'
  1. Verifique que o Data Factory e linked service foram criados:
az datafactory linked-service show \
--factory-name adf-az305-ch22 \
--resource-group rg-az305-challenge22 \
--name BlobStorageLS \
--query "name"
dica

Esta mini-implantação válida suas decisoes de design com recursos reais do Azure. E opcional mas recomendada.

Limpeza​

az group delete --name rg-az305-challenge22 --yes --no-wait

Próximo: Challenge 23: Design a Data Analytics Solution