Estou fazendo migração do synapse para databricks e preciso ajustar vários dashboards. Vi que existem algumas diferenças e estou tendo que ajustar alguns códigos. Fiz uma pesquisa rápida no chatgpt sobre essas principais diferenças e pretendo postar para ajudar outras pessoas que estão passando o mesmo aperto que eu. Alguém poderia me ajudar validando as respostas dadas pelo chatgpt? Algumas delas eu mesma validei, pois tive que ajustar exatamente isso, mas preciso de uma ajuda de um especialista sobre os demais tópicos. Segue abaixo o que obtive de retorno:
- Tipos de Dados Datetime: No Synapse, DATETIME é amplamente usado, enquanto no Databricks, o tipo TIMESTAMP costuma ser mais adequado para operações com data e hora. Money/SmallMoney: Synapse oferece esses tipos de dados, enquanto o Databricks não tem suporte direto para MONEY. Nestes casos, recomenda-se usar DECIMAL ou DOUBLE. Uniqueidentifier: No Synapse, UNIQUEIDENTIFIER é utilizado para GUIDs. No Databricks, STRING ou UUID() pode ser usado em substituição.
- Manipulação de Data e Hora Funções de Data: Algumas funções de data precisam ser adaptadas. DATEADD e DATEDIFF estão disponíveis em ambas as plataformas, mas com pequenas variações na sintaxe. GETDATE(): No Synapse, retorna a data/hora atual, enquanto no Databricks, a função equivalente é current_timestamp(). Truncagem de Data: No Synapse, usa-se DATETRUNC para truncar datas por intervalos (ano, mês, etc.), mas no Databricks, a função equivalente é TRUNC(). Exemplo: TRUNC(date_column, 'MM') no Databricks para truncar no mês.
- Sintaxe de JOIN O Synapse tem suporte total para RIGHT JOIN, LEFT JOIN e FULL JOIN, enquanto o Databricks geralmente otimiza melhor INNER JOIN e LEFT JOIN. Adapte RIGHT JOIN e FULL JOIN para evitar problemas de performance, usando UNION ou outras abordagens, quando possível.
- Funções de String Substituição de Strings: No Synapse: REPLACE(column, 'old_value', 'new_value') No Databricks: também REPLACE, mas verifique compatibilidade ao lidar com CHARINDEX e PATINDEX, pois suas sintaxes diferem. Manipulação de Substring: No Synapse, LEFT, RIGHT e SUBSTRING são padrões. No Databricks, eles existem, mas com pequenas diferenças de comportamento em alguns casos.
- Limitação e Paginação TOP N: No Synapse: SELECT TOP 10 * FROM table No Databricks: LIMIT é mais comum, usado ao final da consulta (SELECT * FROM table LIMIT 10). Para consultas de paginação complexa, o uso de OFFSET-FETCH no Synapse pode ser convertido para LIMIT e OFFSET no Databricks.
- Funções Analíticas e de Janela A maioria das funções de janela, como ROW_NUMBER, RANK, e NTILE, estão disponíveis em ambas as plataformas, mas diferenças de sintaxe podem existir. Em algumas funções, o Databricks exige o uso explícito de PARTITION BY e ORDER BY, então ajuste a estrutura quando necessário.
- Funções de Agregação Approx Count Distinct: No Synapse: APPROX_COUNT_DISTINCT() No Databricks: approx_count_distinct() Group By Rollup/Cube: No Synapse, ROLLUP e CUBE são opções comuns de agregação, mas no Databricks, eles podem precisar de alternativas, como GROUPING SETS ou outras aproximações.
- Transações e Controle de Fluxo BEGIN TRANSACTION / COMMIT / ROLLBACK: Transações são suportadas no Synapse, mas no Databricks, a transação é limitada a contextos específicos e geralmente não requer comandos explícitos de controle. Em operações de carga e atualização, recomenda-se revisar as práticas de transação e adotar MERGE INTO no Databricks para upserts, pois a funcionalidade de MERGE pode diferir em nuances.
- Operações de MERGE MERGE INTO: Tanto o Synapse quanto o Databricks suportam MERGE, mas a sintaxe e a compatibilidade de cláusulas podem variar. No Synapse, MERGE pode aceitar várias condições complexas, enquanto no Databricks, condições adicionais às vezes requerem subconsultas ou ajustes.
- Armazenamento e Carregamento de Dados COPY INTO: No Synapse, COPY INTO é usado para carregar dados de arquivos externos, enquanto no Databricks o equivalente é COPY INTO ou LOAD DATA INPATH, dependendo do sistema de arquivos (Azure Data Lake, por exemplo). Adapte comandos de carga para suportar fontes de dados como ADLS, Blob Storage ou Delta Lake no Databricks.
- Funções Específicas para Dados JSON e XML Synapse possui suporte direto para dados JSON e XML em alguns casos com OPENJSON e OPENXML, enquanto no Databricks, JSON pode ser trabalhado diretamente usando from_json() e to_json(). O XML exige soluções alternativas no Databricks, já que não há suporte nativo robusto como no Synapse.