Compartilhar via


Minimizar problemas de SQL em migrações do Netezza

Este artigo é a quinta parte de uma série de sete partes que oferece diretrizes para fazer a migração do Netezza para o Azure Synapse Analytics. O foco deste artigo são as melhores práticas para minimizar problemas de SQL.

Visão geral

Características de ambientes Netezza

Dica

A Netezza foi pioneira do conceito de "dispositivo de data warehouse" no início dos anos 2000.

Em 2003, a Netezza lançou inicialmente seu produto de dispositivo de data warehouse. Ele reduziu o custo de entrada e melhorou a facilidade de uso de técnicas de MPP (processamento paralelo massivo) para habilitar o processamento de dados em escala com mais eficiência do que o mainframe existente ou outras tecnologias de MPP disponíveis no momento. Desde então, o produto evoluiu e tem muitas instalações entre grandes instituições financeiras, telecomunicações e empresas de varejo. A implementação original usou hardware proprietário, incluindo matrizes de portões programáveis de campo, ou FPGAs, e foi acessível por meio da conexão de rede ODBC ou JDBC por TCP/IP.

A maioria das instalações existentes do Netezza é local, portanto, muitos usuários estão considerando migrar alguns ou todos os dados do Netezza para o Azure Synapse Analytics a fim de obter os benefícios de uma mudança para um ambiente em nuvem moderno.

Dica

Muitas instalações existentes do Netezza são data warehouses que usam um modelo de dados dimensional.

A tecnologia Netezza costuma ser usada para implementar um data warehouse, dando suporte a consultas analíticas complexas em grandes volumes de dados usando SQL. Modelos de dados dimensionais, esquemas de estrela ou floco de neve, são comuns, assim como a implementação de data marts para departamentos individuais.

Essa combinação de modelos de dados SQL e dimensionais simplifica a migração para o Azure Synapse, já que os conceitos básicos e as habilidades de SQL são transferíveis. A abordagem recomendada é migrar o modelo de dados existente como está para reduzir o risco e o tempo necessário. Mesmo que a intenção eventual seja fazer alterações no modelo de dados (por exemplo, migrar para um modelo de cofre de dados), execute uma migração inicial como está e faça alterações no ambiente de nuvem do Azure, aproveitando o desempenho, a escalabilidade elástica e as vantagens de custo dele.

Embora a linguagem SQL tenha sido padronizada, os fornecedores individuais implementaram, em alguns casos, extensões proprietárias. Este documento destaca possíveis diferenças de SQL que você pode encontrar durante a migração de um ambiente herdado do Netezza e fornece soluções alternativas.

Usar o Azure Data Factory para implementar uma migração controlada por metadados

Dica

Automatize o processo de migração usando recursos do Azure Data Factory.

Automatize e orquestre o processo de migração usando os recursos do ambiente do Azure. Essa abordagem também minimiza o efeito da migração no ambiente existente do Netezza, que já pode estar funcionando próximo da capacidade total.

O Azure Data Factory é um serviço de integração de dados baseado em nuvem que permite a criação de fluxos de trabalho controlados por dados na nuvem para orquestrar e automatizar a movimentação e a transformação de dados. Com o Data Factory, é possível criar e agendar fluxos de trabalho controlados por dados, chamados de pipelines, que podem ingerir dados de diferentes armazenamentos de dados. Ele é capaz de processar e transformar dados usando serviços de computação como o Azure HDInsight Hadoop, Spark, Azure Data Lake Analytics e Azure Machine Learning.

Ao criar metadados para listar as tabelas de dados a serem migradas e sua localização, você pode usar as instalações do Data Factory para gerenciar e automatizar partes do processo de migração. Você também pode usar Pipelines do Azure Synapse.

Diferenças de DDL de SQL entre Netezza e Azure Synapse

DDL (linguagem de definição de dados) de SQL

Dica

Os comandos de DDL de SQL CREATE TABLE e CREATE VIEW têm elementos principais padrão, mas também são usados para definir opções específicas de implementação.

O padrão ANSI SQL define a sintaxe básica para comandos DDL, como CREATE TABLE e CREATE VIEW. Esses comandos são usados no Netezza e no Azure Synapse, mas também foram estendidos para permitir a definição de recursos específicos da implementação, como indexação, distribuição de tabela e opções de particionamento.

As seções a seguir discutem as opções específicas ao Netezza a serem consideradas durante uma migração para o Azure Synapse.

Considerações sobre tabela

Dica

Use índices existentes para fornecer uma indicação de candidatos para indexação no warehouse migrado.

Ao migrar tabelas entre diferentes tecnologias, somente os dados brutos e seus metadados descritivos são movidos fisicamente entre os dois ambientes. Outros elementos de banco de dados do sistema de origem, como índices e arquivos de log, não são migrados diretamente, pois talvez não sejam necessários ou possam ser implementados de forma diferente dentro do novo ambiente de destino. Por exemplo, a opção TEMPORARY dentro da sintaxe CREATE TABLE do Netezza é equivalente à prefixação do nome da tabela com um caractere "#" no Azure Synapse.

É importante entender onde as otimizações de desempenho, como índices, foram usadas no ambiente de origem. Isso indica onde a otimização de desempenho pode ser adicionada no novo ambiente de destino. Por exemplo, se os mapas de zona foram criados no ambiente Netezza de origem, isso pode indicar que um índice não clusterizado deve ser criado no banco de dados do Azure Synapse migrado. Outras técnicas nativas de otimização de desempenho, como a replicação de tabela, podem ser mais aplicáveis do que uma criação direta de índice por semelhança.

Tipos de objeto de banco de dados Netezza sem suporte

Dica

Os recursos específicos do Netezza podem ser substituídos por recursos do Azure Synapse.

O Netezza implementa alguns objetos de banco de dados que não têm suporte direto no Azure Synapse, mas há métodos para alcançar a mesma funcionalidade dentro do novo ambiente:

  • Mapas de zona: no Netezza, os mapas de zona são criados e mantidos automaticamente para alguns tipos de coluna e são usados no momento da consulta para restringir a quantidade de dados a serem examinados. Os mapas de zona são criados nos seguintes tipos de coluna:

    • Colunas INTEGER de 8 bytes ou menos.
    • Colunas temporais. Por exemplo, DATE, TIME e TIMESTAMP.
    • Colunas CHAR, se elas forem parte de uma exibição materializada e mencionadas na cláusula ORDER BY.

    Descubra quais colunas têm mapas de zona usando o utilitário nz_zonemap, que faz parte do Kit de ferramentas NZ. O Azure Synapse não inclui mapas de zona, mas é possível obter resultados semelhantes usando outros tipos de índice definidos pelo usuário e/ou particionamento.

  • CBT (tabelas base clusterizadas): no Netezza, as CBTs costumam ser usadas para tabelas de fatos, que podem ter bilhões de registros. A verificação de uma tabela tão grande exige muito tempo de processamento, já que pode ser necessário fazer uma verificação de tabela completa para obter os registros relevantes. A organização de registros na CBT restritiva permite que o Netezza agrupe registros nas mesmas extensões ou nas proximidades. O processo também cria mapas de zona que melhoram o desempenho, reduzindo a quantidade de dados a serem verificados.

    No Azure Synapse, você pode obter um efeito semelhante usando o particionamento e/ou outros índices.

  • Exibições materializadas: o Netezza dá suporte a exibições materializadas e recomenda a criação de uma ou mais delas em tabelas grandes com muitas colunas em que apenas algumas dessas colunas são usadas regularmente em consultas. O sistema manterá automaticamente as exibições materializadas quando os dados na tabela base forem atualizados.

    O Azure Synapse dá suporte a exibições materializadas, com as mesmas funcionalidades do Netezza.

Mapeamento do tipo de dados do Netezza

Dica

Avalie o impacto dos tipos de dados sem suporte como parte da fase de preparação.

A maioria dos tipos de dados do Netezza tem um equivalente direto no Azure Synapse. A tabela a seguir mostra esses tipos de dados e a abordagem recomendada para mapeá-los.

Tipo de Dados do Netezza Tipo de dados do Azure Synapse
bigint bigint
BINARY VARYING(n) VARBINARY(n)
BOOLEAN BIT
BYTEINT TINYINT
CHARACTER VARYING(n) VARCHAR(n)
CHARACTER(n) CHAR(n)
DATE DATE(data)
DECIMAL(p,s) DECIMAL(p,s)
DOUBLE PRECISION FLOAT
FLOAT(n) FLOAT(n)
INTEGER INT
INTERVAL No momento, não há suporte para os tipos de dados INTERVAL diretamente no Azure Synapse, mas eles podem ser calculados usando funções temporais, como DATEDIFF.
MONEY MONEY
NATIONAL CHARACTER VARYING(n) NVARCHAR(n)
NATIONAL CHARACTER(n) NCHAR(n)
NUMERIC(p,s) NUMERIC(p,s)
real real
SMALLINT SMALLINT
ST_GEOMETRY(n) No momento, não há suporte para tipos de dados espaciais, como ST_GEOMETRY no Azure Synapse, mas os dados ser armazenados como VARCHAR ou VARBINARY.
TIME TIME
TIME WITH TIME ZONE DATETIMEOFFSET
timestamp DATETIME

Geração de DLL (linguagem de definição de dados)

Dica

Use os metadados existentes do Netezza para automatizar a geração de DDL CREATE TABLE e CREATE VIEW para o Azure Synapse.

Edite os scripts CREATE TABLE e CREATE VIEW do Netezza para criar as definições equivalentes com tipos de dados modificados, conforme descrito anteriormente, se necessário. Normalmente, isso envolve a remoção ou modificação de qualquer cláusula extra específica ao Netezza, como ORGANIZE ON.

No entanto, todas as informações que especificam as definições atuais de tabelas e exibições dentro do ambiente do Netezza existente são mantidas nas tabelas do catálogo do sistema. Essa é a melhor fonte para essas informações, pois há a garantia de estarem atualizadas e completas. Lembre-se de que a documentação mantida pelo usuário pode não estar sincronizada com as definições de tabela atuais.

Acesse essas informações usando utilitários como nz_ddl_table e gere as instruções DDL CREATE TABLE. Edite essas instruções para as tabelas equivalentes no Azure Synapse.

Dica

Ferramentas e serviços de terceiros podem automatizar as tarefas de mapeamento de dados.

parceiros da Microsoft que oferecem ferramentas e serviços para automatizar a migração, incluindo mapeamento de tipo de dados. Além disso, se uma ferramenta ETL de terceiros, como Informatica ou Talend, já estiver em uso no ambiente Netezza, ela poderá implementar quaisquer transformações de dados necessárias.

Diferenças de DML SQL entre Netezza e Azure Synapse

DML (linguagem de manipulação de dados) SQL

Dica

Os comandos DML de SQL SELECT, INSERT e UPDATE têm elementos básicos padrão, mas também podem implementar diferentes opções de sintaxe.

O padrão ANSI SQL define a sintaxe básica para comandos de DDL, tais como SELECT, INSERT, UPDATE e DELETE. O Netezza e o Azure Synapse usam esses comandos, mas em alguns casos há diferenças de implementação.

As seções a seguir discutem os comandos DML específicos ao Netezza que você deve considerar durante uma migração para o Azure Synapse.

Diferenças de sintaxe de DML SQL

Tenha em mente estas diferenças na sintaxe DML (linguagem de manipulação de dados) de SQL entre o Netezza SQL e o Azure Synapse durante a migração:

  • STRPOS: no Netezza, a função STRPOS retorna a posição de uma substring em uma cadeia de caracteres. A função equivalente no Azure Synapse é CHARINDEX, e a ordem dos argumentos é invertida. Por exemplo, SELECT STRPOS('abcdef','def')... no Netezza é equivalente a SELECT CHARINDEX('def','abcdef')... no Azure Synapse.

  • AGE: o Netezza dá suporte ao operador AGE para fornecer o intervalo entre dois valores temporais, como carimbos de data/hora ou datas. Por exemplo, SELECT AGE('23-03-1956','01-01-2019') FROM.... No Azure Synapse, DATEDIFF dá o intervalo. Por exemplo, SELECT DATEDIFF(day, '1956-03-26','2019-01-01') FROM.... Observe a sequência de representação de data.

  • NOW(): o Netezza usa NOW() para representar CURRENT_TIMESTAMP no Azure Synapse.

Funções, procedimentos armazenados e sequências

Dica

Como parte da fase de preparação, avalie o número e o tipo de objetos que não são dados a serem migrados.

Ao migrar de um ambiente de data warehouse herdado maduro, como o Netezza, geralmente há elementos diferentes de tabelas e exibições simples que precisam ser migrados para o novo ambiente de destino. Exemplos disso incluem funções, procedimentos armazenados e sequências.

Como parte da fase de preparação, crie um inventário dos objetos que precisam ser migrados e defina os métodos para lidar com eles. Em seguida, atribua uma alocação apropriada de recursos no plano do projeto.

Há recursos no ambiente do Azure que substituem a funcionalidade implementada como funções ou procedimentos armazenados no ambiente do Netezza. Nesse caso, costuma ser mais eficiente usar os recursos internas do Azure em vez de recodificar as funções do Netezza.

Dica

Produtos e serviços de terceiros podem automatizar a migração de elementos que não são dados.

Os parceiros da Microsoft oferecem ferramentas e serviços capazes de automatizar a migração, incluindo o mapeamento de tipos de dados. Além disso, ferramentas de ETL de terceiros, como Informatica ou Talend, que já estiverem em uso no ambiente Netezza poderão implementar quaisquer transformações de dados necessárias.

Confira as seções a seguir para saber mais sobre cada um desses elementos.

Funções

Como a maioria dos produtos de banco de dados, o Netezza dá suporte a funções do sistema e a funções definidas pelo usuário em uma implementação SQL. Ao migrar para outra plataforma de banco de dados, como o Azure Synapse, as funções do sistema comuns ficam disponíveis e podem ser migradas sem alterações. Algumas funções do sistema podem ter sintaxes ligeiramente diferentes, mas as alterações necessárias podem ser automatizadas. Talvez seja necessário recodificar as funções do sistema quando não houver uma equivalência, como no caso de funções arbitrárias definidas pelo usuário, usando as linguagens disponíveis no ambiente de destino. O Azure Synapse usa a linguagem popular Transact-SQL para implementar funções definidas pelo usuário. As funções definidas pelo usuário do Netezza são codificadas usando as linguagens nzLua ou C++.

Procedimentos armazenados

A maioria dos produtos de banco de dados modernos permite que os procedimentos sejam armazenados no banco de dados. O Netezza fornece a linguagem NZPLSQL, que tem base no Postgres PL/pgSQL. Um procedimento armazenado normalmente contém instruções SQL e alguma lógica de procedimento, e podem retornar dados ou um status.

O Azure Synapse Analytics também dá suporte a procedimentos armazenados usando t-SQL, portanto, se você precisar migrar procedimentos armazenados, recodifique-os adequadamente.

Sequências

No Netezza, uma sequência é um objeto de banco de dados nomeado criado por meio de CREATE SEQUENCE e é capaz de fornecer o valor exclusivo por meio do método NEXT VALUE FOR. Use-a para gerar números exclusivos como valores de chave alternativa para valores de chave primária.

No Azure Synapse, não há CREATE SEQUENCE. As sequências são processadas usando a IDENTITY para criar chaves alternativas ou a identidade gerenciada usando o código SQL para criar o próximo número da sequência em uma série.

Use EXPLAIN para validar o SQL herdado

Dica

Encontre possíveis problemas de migração usando consultas reais dos logs de consulta do sistema existentes.

Capture algumas instruções representativas SQL dos logs de histórico de consultas herdados para avaliar o SQL herdado do Netezza quanto à compatibilidade com o Azure Synapse. Depois, prefixe essas consultas com EXPLAIN e, supondo que haja um modelo de dados migrado "por semelhança" no Azure Synapse com os mesmos nomes de tabela e de coluna, execute as instruções EXPLAIN no Azure Synapse. Qualquer SQL incompatível retornará um erro. Use essas informações para determinar a escala da tarefa de recodificação. Essa abordagem não exige que os dados sejam carregados no ambiente do Azure, apenas que as tabelas e exibições relevantes foram criadas.

Mapeamento do IBM Netezza para T-SQL

O mapeamento do IBM Netezza para T-SQL em conformidade com os tipos de dados SQL do Azure Synapse está nesta tabela:

Tipo de Dados do IBM Netezza Tipo de Dados do SQL do Azure Synapse
matriz Sem suporte
BIGINT BIGINT
objeto binário grande [(n[K|M|G])] nvarchar [(n|max)]
 blob [(n[K|M|G])] nvarchar [(n|max)]
 byte [(n)] binário [(n)]|varbinary(max)
 byteint SMALLINT
 char varying [(n)] varchar [(n|max)]
character varying [(n)] varchar [(n|max)]
 char [(n)] char [(n)]|varchar(max)
character [(n)] char [(n)]|varchar(max)
 objeto grande de caractere [(n[K|M|G])] varchar [(n|max)
 clob [(n[K|M|G])] varchar [(n|max)
 dataset Sem suporte 
 date date
 dec [(p[,s])] decimal [(p[,s])]
 decimal [(p[,s])] decimal [(p[,s])]
 double precision float(53)
 float [(n)] float [(n)]
 graphic [(n)] nchar [(n)]| varchar(max)
 intervalo Sem suporte 
 json [(n)] nvarchar [(n|max)]
 long varchar nvarchar(max)
 vargraphic longo nvarchar(max)
 mbb Sem suporte 
 mbr Sem suporte 
 number [((p|*)[,s])] numeric [(p[,s])]
 numeric [(p [,s])]  numeric [(p[,s])]
 period Sem suporte 
 real  real
 SMALLINT SMALLINT
 st_geometry Sem suporte 
 time time
 hora com fuso horário datetimeoffset
 timestamp  datetime2
 carimbo de data/hora com fuso horário datetimeoffset
 varbyte varbinary [(n|max)]
 varchar [(n)]  varchar [(n)]
 vargraphic [(n)] nvarchar [(n|max)]
 varray Sem suporte 
 Xml Sem suporte 
 xmltype Sem suporte 

Resumo

Instalações típicas herdadas do Netezza são implementadas de uma forma que facilita a migração para o Azure Synapse. Elas usam SQL para consultas analíticas em grandes volumes de dados e estão em alguma forma de modelo de dados dimensional. Esses fatores as tornam boas candidatas à migração para o Azure Synapse.

Para minimizar a tarefa de migração do código SQL real, siga estas recomendações:

  • A migração inicial do data warehouse deve ser como está para minimizar o risco e o tempo necessário, mesmo que o ambiente final eventual incorpore um modelo de dados diferente, como o cofre de dados.

  • Entenda as diferenças entre a implementação do Netezza SQL e do Azure Synapse.

  • Use metadados e logs de consulta da implementação existente do Netezza para avaliar o impacto das diferenças e planejar uma abordagem de atenuação.

  • Automatize o processo sempre que possível para minimizar erros, riscos e reduzir o tempo de migração.

  • Considere usar parceiros e serviços especializados da Microsoft para simplificar a migração.

Próximas etapas

Para saber mais sobre a Microsoft e ferramentas de terceiros, confira o próximo artigo nesta série: Ferramentas para migração de data warehouse do Netezza para o Azure Synapse Analytics.