Guia de migração do Azure Synapse para o Snowflake¶
Estrutura de migração do Snowflake¶
Uma migração típica do Azure Synapse para o Snowflake pode ser dividida em nove fases principais. Este guia fornece uma estrutura abrangente para lidar com os desafios técnicos e estratégicos envolvidos, garantindo uma transição tranquila da plataforma de análise do Azure para a plataforma de dados em nuvem do Snowflake.
Fases da migração¶
Fase 1: Planejamento e projeto¶
Esta fase inicial é crucial para estabelecer a base de uma migração bem-sucedida. Migrar do Azure Synapse requer uma compreensão clara dos componentes integrados dele e um plano completo para alinhar as partes interessadas, definir o escopo e evitar estouros de orçamento.
Suas etapas práticas:
Realize uma avaliação completa do seu ambiente Synapse:
Inventário e análise: catalogue todos os objetos em seu espaço de trabalho do Synapse, incluindo tabelas de pool SQL dedicadas, exibições de pool SQL sem servidor, esquemas, procedimentos armazenados do T-SQL, funções e exibições. Use as exibições do sistema do Synapse (por exemplo, sys.tables, sys.procedures) para coletar metadados.
Analise cargas de trabalho: use o Azure Monitor e as Exibições de gerenciamento dinâmico (DMVs) do Synapse para identificar padrões de consulta, simultaneidade de usuários, utilização de recursos (DWUs) e gargalos de desempenho. Esses dados são cruciais para o planejamento da sua estratégia de data warehouse virtual do Snowflake.
Identifique dependências: mapeie todas as fontes de dados upstream, especialmente os pipelines do Azure Data Factory (ADF), e os consumidores downstream, como relatórios do Power BI, modelos do Azure Machine Learning e outros aplicativos.
Defina o escopo e a estratégia de migração:
Priorize cargas de trabalho: classifique as cargas de trabalho por impacto nos negócios e complexidade técnica. Comece com uma carga de trabalho de alto impacto e baixa complexidade (por exemplo, um data mart específico) para demonstrar valor e ganhar impulso.
Escolha uma abordagem de migração: decida entre uma migração direta («lift and shift») para uma migração mais rápida ou uma abordagem de reestruturação para modernizar os modelos de dados e os pipelines.
Desenvolva o plano do projeto:
Forme uma equipe: crie uma equipe de migração com funções claras (gerente de projeto, engenheiro de dados, DBA Synapse/SQL, arquiteto Snowflake, administrador de segurança, analista de negócios).
Crie um cronograma: defina cronogramas e marcos realistas para cada uma das nove fases.
Defina métricas de sucesso: estabeleça KPIs claros para medir o sucesso, como redução de custos, melhoria no desempenho de consultas e satisfação dos usuários.
Fase 2: Ambiente e segurança¶
Com um plano sólido, o próximo passo é preparar o ambiente Snowflake e traduzir o modelo de segurança do Azure. Hospedar o Snowflake no Azure é altamente recomendável para simplificar a transferência de dados e a integração de rede.
Suas etapas práticas:
Configure sua conta Snowflake:
Escolha a edição e o provedor de nuvem: selecione a edição do Snowflake (por exemplo, Standard, Enterprise, Business Critical) que atenda às suas necessidades. Escolha o Azure como provedor de nuvem e selecione a mesma região do seu Azure Data Lake Storage (ADLS Gen2) para minimizar os custos de transferência de dados e a latência.
Projete uma estratégia de warehouse: com base na análise de carga de trabalho da Fase 1, crie um conjunto inicial de warehouses virtuais. Isole cargas de trabalho diferentes (por exemplo, WH_LOADING, WH_TRANSFORM, WH_BI_ANALYTICS) para evitar disputa por recursos. Comece com tamanhos de camiseta (por exemplo, PP, P) e planeje redimensioná-los com base em testes de desempenho.
Implemente o modelo de segurança:
Mapeie as entidades principais do Azure AD para as funções do Snowflake: traduza os usuários e grupos do Azure Active Directory (AAD) para o modelo hierárquico de controle de acesso baseado em funções (RBAC) do Snowflake. Crie uma hierarquia de funções funcionais (SYSADMIN, SECURITYADMIN) e funções de acesso (BI_READ_ONLY, ETL_READ_WRITE).
Configure políticas de rede e autenticação: Configure políticas de rede para restringir o acesso a endereços IP confiáveis por meio do Azure Private Link para uma conexão segura. Configure o SSO configurando o Snowflake como um aplicativo empresarial no Azure AD.
Fase 3: Conversão do código do banco de dados¶
Esta fase envolve a conversão do código DDL, DML e procedural baseado em T-SQL do Synapse para ser compatível com o Snowflake. Ferramentas de automação podem acelerar esse processo, mas a revisão manual é essencial.
Suas etapas práticas:
Converta DDL (linguagem de definição de dados):
Tabelas e exibições: extraia as instruções CREATE, TABLE e CREATE e VIEW do Synapse. Converta os tipos de dados específicos do Synapse para seus equivalentes no Snowflake (consulte o Apêndice 2).
Remova cláusulas específicas do Synapse: elimine as cláusulas de distribuição física específicas do Synapse, como DISTRIBUTION (por exemplo, ROUND_ROBIN, HASH) e estratégias de indexação como CLUSTERED, COLUMNSTORE e INDEX. O Snowflake gerencia a distribuição e o armazenamento de dados automaticamente.
Reimplemente restrições: o Snowflake aplica apenas as restrições NOT e NULL. As restrições PRIMARY, KEY e UNIQUE são informativas. Toda a lógica de integridade de dados restante deve ser movida para seus processos ETL/ELT.
Converta DML (linguagem de manipulação de dados) e código procedural:
Reescrever procedimentos armazenados do T-SQL: os procedimentos armazenados do T-SQL do Synapse devem ser reescritos em uma linguagem compatível com o Snowflake, como Snowflake Scripting (SQL), JavaScript ou Python.
Traduza funções SQL: mapeie funções específicas do Synapse/T-SQL para suas contrapartes no Snowflake (por exemplo, GETDATE() torna-se CURRENT_TIMESTAMP(), ISNULL() torna-se IFNULL()). Consulte o Apêndice 3 para ver os mapeamentos comuns.
Fase 4: Migração de dados¶
Esta fase concentra-se na movimentação física de dados históricos de seus pools SQL do Synapse para tabelas do Snowflake. O método mais eficiente utiliza o Azure Data Lake Storage (ADLS Gen2) como uma área de preparação intermediária.
Suas etapas práticas:
Descarregue dados do Synapse para o ADLS Gen2:
Use o comando CREATE EXTERNAL TABLE AS SELECT (CETAS) no Synapse para exportar dados de tabelas para um contêiner designado em sua conta ADLS Gen2.
Formate os dados como Parquet ou CSV compactado para conseguir o melhor desempenho de carregamento no Snowflake.
Carregue dados do ADLS Gen2 para o Snowflake:
Crie uma área de preparação externa: no Snowflake, crie um objeto de integração de armazenamento para se conectar com segurança ao ADLS Gen2 e, em seguida, crie uma área de preparação externa que aponte para o contêiner com seus dados descarregados.
Use o comando COPY INTO: use o comando COPY INTO <table> do Snowflake para carregar os dados da área de preparação do ADLS para as tabelas de destino do Snowflake.
Aproveite um warehouse de tamanho maior: use um warehouse virtual dedicado e maior para o carregamento inicial de dados para acelerar o processo e, em seguida, reduza a escala ou suspenda-o posteriormente.
Fase 5: Ingestão de dados¶
Após a migração dos dados históricos, você deve reestruturar seus pipelines de ingestão de dados contínuos, geralmente no Azure Data Factory, para alimentar o Snowflake com dados.
Suas etapas práticas:
Migrar pipelines do Azure Data Factory (ADF):
Em seus pipelines do ADF, substitua os conjuntos de dados e atividades do Synapse por seus equivalentes no Snowflake. Use o conector nativo do Snowflake no ADF para atividades de origem e destino.
Atualize todas as atividades de pesquisa ou script para usar o dialeto SQL do Snowflake.
Implemente a ingestão contínua com o Snowpipe:
Para fluxos de dados contínuos que chegam ao ADLS Gen2, configure o Snowpipe. O Snowpipe carrega automaticamente e com eficiência novos arquivos de dados para as tabelas do Snowflake à medida que eles chegam, fornecendo uma solução de ingestão quase em tempo real. Isso pode ser acionado por notificações do Azure Event Grid.
Use o ecossistema Snowflake:
Explore os conectores nativos do Snowflake para plataformas como Kafka e Spark para simplificar o streaming direto de dados.
Fase 6: Relatórios e análises¶
Esta fase envolve o redirecionamento de todos os aplicativos downstream, principalmente o Power BI, para consultar dados do Snowflake.
Suas etapas práticas:
Atualização de drivers de conexão: certifique-se de que o Power BI Desktop e o gateway de dados local tenham os drivers mais recentes do Snowflake.
Redirecione relatórios do Power BI:**
No Power BI, edite a fonte de dados para cada relatório, alternando a conexão do Azure Synapse para o Snowflake. O conector nativo do Power BI do Snowflake é certificado e altamente recomendado.
Teste todos os relatórios e painéis críticos. Preste muita atenção aos relatórios que usam o DirectQuery, pois as características de desempenho serão alteradas.
Revise e otimize consultas:
Alguns relatórios podem conter consultas T-SQL nativas. Elas devem ser refatoradas para usar o dialeto SQL do Snowflake. Use a ferramenta Perfil de consulta no Snowflake e o Analisador de desempenho no Power BI para otimizar relatórios com execução lenta.
Fase 7: Validação e testes de dados¶
Testes rigorosos são essenciais para gerar confiança na nova plataforma e garantir que a integridade e o desempenho dos dados atendam às expectativas.
Suas etapas práticas:
Execute uma validação de dados:
Contagem de linhas: compare a contagem de linhas entre as tabelas de origem no Synapse e as tabelas de destino no Snowflake.
Validação em nível de célula: para tabelas críticas, realize uma validação mais aprofundada comparando valores agregados (SUM, AVG, MIN, MAX) em colunas-chave.
Realize testes de desempenho e consultas:
Consultas de referência: execute um conjunto representativo de consultas tanto no Synapse quanto no Snowflake e compare os resultados e o desempenho.
Desempenho da ferramenta de BI: teste os tempos de carregamento e a interatividade dos principais painéis do Power BI conectados ao Snowflake.
Teste de aceitação do usuário (UAT):
Envolva os usuários empresariais para validar os relatórios e executar as tarefas diárias deles usando o novo ambiente Snowflake.
Fase 8: Implantação¶
A implantação é a transição final do Azure Synapse para o Snowflake. Esse processo deve ser gerenciado com cuidado para minimizar a interrupção das operações comerciais.
Suas etapas práticas:
Desenvolva um plano de transição:
Defina a sequência de eventos para a transição. Isso inclui pausar os pipelines ADF que apontam para o Synapse, realizar uma sincronização final de dados, redirecionar todas as conexões e validar a integridade do sistema.
Execute a sincronização final dos dados:
Realize um último carregamento incremental de dados para capturar todas as alterações de dados que ocorreram durante a fase de testes.
Entre em produção:
Transfira todos os pipelines de dados de produção e conexões de usuários do Synapse para o Snowflake.
Mantenha o ambiente Synapse disponível (mas pausado, se possível) por um curto período como medida de segurança antes de desativá-lo.
Desative o Synapse:
Assim que o ambiente Snowflake estiver estável e validado em produção, você poderá desativar seus pools SQL do Synapse para interromper os custos.
Fase 9: Otimizar e executar¶
Esta fase final é um processo contínuo de gerenciamento de desempenho, custo e governança em seu novo ambiente Snowflake.
Suas etapas práticas:
Implemente a otimização de desempenho e custos:
Dimensione os warehouses corretamente: monitore continuamente o desempenho da carga de trabalho e ajuste os tamanhos dos warehouses virtuais. Isso substitui o conceito de dimensionamento de DWUs do Synapse.
Defina políticas agressivas de suspensão automática: defina o tempo limite de suspensão automática para todos os warehouses em 60 segundos para evitar o pagamento por tempo ocioso de computação.
Use chaves de clustering: para tabelas muito grandes (multiterabytes) e defina chaves de clustering para melhorar o desempenho de consultas altamente filtradas.
Estabeleça governança e FinOps de longo prazo:**
Monitore os custos: use os monitores de esquema e recursos ACCOUNT_USAGE do Snowflake para acompanhar o consumo de crédito.
Aprimore a segurança: audite regularmente funções e permissões. Implemente recursos avançados de segurança, como mascaramento dinâmico de dados e políticas de acesso a linhas para dados confidenciais.
Apêndice¶
Apêndice 1: Arquiteturas Snowflake Arquitetura do Azure Synapse¶
Recurso |
Azure Synapse Analytics |
Snowflake |
|---|---|---|
Arquitetura |
Nó de controle + nós de computação (MPP para pools dedicados). Armazenamento desacoplado, mas computação acoplada dentro de um pool. |
Computação, armazenamento e serviços de nuvem desacoplados (multicluster, dados compartilhados). |
Armazenamento |
Dados armazenados no Azure Data Lake Storage, gerenciados pelo pool do SQL. |
Armazenamento de objetos centralizado (Azure Blob) com microparticionamento automático. |
Computação |
Pools SQL dedicados provisionados (escalados por DWUs) ou pools SQL sem servidor (pagamento por consulta). |
Warehouses virtuais elásticos e sob demanda (clusters de computação). |
Simultaneidade |
Limitada pelo tamanho do DWU e pelo número máximo de slots de consulta simultânea (128) em um pool dedicado. |
Alta simultaneidade por meio de warehouses multicluster que são inicializados automaticamente. |
Dimensionamento |
Dimensione pools dedicados alterando DWUs (pode levar vários minutos). Pode ser pausado. |
Dimensiona instantaneamente a capacidade computacional para cima/para baixo/para fora (em segundos); o armazenamento é dimensionado automaticamente. |
Manutenção |
Exige a manutenção manual das estatísticas. As estratégias de indexação precisam de gerenciamento. |
Totalmente gerenciado; tarefas de manutenção como estatísticas e compactação são automatizadas. |
Apêndice 2: Mapeamentos de tipos de dados¶
Azure Synapse (T-SQL) |
Snowflake |
Notas |
|---|---|---|
bigint |
BIGINT / NUMBER(19,0) |
|
int |
INT / NUMBER(10,0) |
|
smallint |
SMALLINT / NUMBER(5,0) |
|
tinyint |
TINYINT / NUMBER(3,0) |
|
bit |
BOOLEAN |
|
decimal(p,s) / numeric(p,s) |
NUMBER(P,S) |
|
money / smallmoney |
NUMBER(19,4) / NUMBER(10,4) |
A prática recomendada é mapear para NUMBER. |
float / real |
FLOAT |
|
date |
DATE |
|
datetime / datetime2 |
DATETIME / TIMESTAMP_NTZ |
TIMESTAMP_NTZ muitas vezes é o alvo preferido. |
datetimeoffset |
TIMESTAMP_TZ |
|
smalldatetime |
DATETIME / TIMESTAMP_NTZ |
|
time |
TIME |
|
char(n) / varchar(n) |
VARCHAR(n) |
|
nchar(n) / nvarchar(n) |
VARCHAR(n) |
O Snowflake usa UTF-8 por padrão; portanto, os tipos com prefixo N não são necessários. |
text / ntext |
VARCHAR |
Tipos obsoletos; mapeie para VARCHAR. |
binary(n) / varbinary(n) |
BINARY(n) |
|
uniqueidentifier |
VARCHAR(36) |
Armazene como uma cadeia de caracteres e use UUID_STRING() se necessário. |
Apêndice 3: Diferenças entre SQL e funções¶
Azure Synapse (T-SQL) |
Snowflake |
Notas |
|---|---|---|
GETDATE() |
CURRENT_TIMESTAMP() |
O Snowflake tem diversas funções para data/hora atual. |
ISNULL(expr1, expr2) |
IFNULL(expr1, expr2) |
COALESCE é o padrão ANSI e funciona em ambos. |
TOP (n) |
LIMIT n |
O Snowflake usa a cláusula LIMIT no fim da consulta. |
IIF(bool, true, false) |
IFF(bool, true, false) |
A funcionalidade é idêntica, o nome é um pouco diferente. |
DATEADD(part, num, date) |
DATEADD(part, num, date) |
Compatível, mas as partes de data/hora podem ter nomes diferentes (por exemplo, dd em vez de dia). |
DATEDIFF(part, start, end) |
DATEDIFF(part, start, end) |
Compatível, mas as partes de data/hora podem ter nomes diferentes. |
STRING_SPLIT |
SPLIT_TO_TABLE / SPLIT |
O Snowflake tem funções mais poderosas para dividir cadeias de caracteres. |
Linguagem procedural |
T-SQL (procedimentos armazenados) |
Snowflake Scripting, JavaScript, Java, Python |
Cláusulas DDL |
DISTRIBUTION, CLUSTERED COLUMNSTORE INDEX |
Nenhum. Substituídas por microparticionamento automático e chaves de clustering opcionais. |
Tabelas temporárias |
#temptable |
CREATE TEMPORARY TABLE |
Transações |
BEGIN TRAN, COMMIT, ROLLBACK |
BEGIN, COMMIT, ROLLBACK |
Tratamento de erros |
TRY…CATCH |
BEGIN…EXCEPTION…END |