Minimizar problemas de SQL para migrações do Netezza
Este artigo é a quinta parte de uma série de sete partes que fornece orientações sobre como migrar do Netezza para o Azure Synapse Analytics. O foco deste artigo são as melhores práticas para minimizar os problemas do SQL.
Descrição Geral
Características dos ambientes netezza
Dica
A Netezza foi pioneira no conceito de "aplicação do armazém de dados" no início dos anos 2000.
Em 2003, a Netezza lançou inicialmente o produto da aplicação do armazém de dados. Reduziu o custo de entrada e melhorou a facilidade de utilização de técnicas de processamento paralelo em massa (MPP) para permitir o processamento de dados em escala de forma mais eficiente do que o mainframe existente ou outras tecnologias de MPP disponíveis na altura. Desde então, o produto evoluiu e tem muitas instalações entre grandes instituições financeiras, telecomunicações e empresas de retalho. A implementação original utilizou hardware proprietário, incluindo matrizes de porta programáveis de campo ( ou FPGAs) e foi acessível através da ligação de rede ODBC ou JDBC através de TCP/IP.
A maioria das instalações do Netezza existentes são no local, pelo que muitos utilizadores estão a considerar migrar alguns ou todos os dados do Netezza para Azure Synapse Analytics para obter os benefícios de uma mudança para um ambiente de cloud moderno.
Dica
Muitas instalações do Netezza existentes são armazéns de dados que utilizam um modelo de dados dimensional.
A tecnologia Netezza é frequentemente utilizada para implementar um armazém de dados, suportando consultas analíticas complexas em grandes volumes de dados com o SQL. Os modelos de dados dimensional (esquemas de estrela ou floco de neve) são comuns, assim como a implementação de data marts para departamentos individuais.
Esta combinação de modelos de dados SQL e dimensional simplifica a migração para Azure Synapse, uma vez que os conceitos básicos e as competências do SQL são transferíveis. A abordagem recomendada é migrar o modelo de dados existente tal como está para reduzir o risco e o tempo desempeizado. Mesmo que a eventual intenção seja efetuar alterações ao modelo de dados (por exemplo, mover para um modelo de cofre de dados), efetue uma migração como está inicial e, em seguida, faça alterações no ambiente da cloud do Azure, tirando partido do desempenho, escalabilidade elástica e vantagens de custos.
Embora a linguagem SQL tenha sido padronizada, os fornecedores individuais implementaram, em alguns casos, extensões proprietárias. Este documento destaca potenciais diferenças de SQL que poderá encontrar ao migrar de um ambiente legado do Netezza e fornece soluções alternativas.
Utilizar Azure Data Factory para implementar uma migração baseada em metadados
Dica
Automatize o processo de migração com as capacidades de Azure Data Factory.
Automatize e orquestre o processo de migração ao utilizar as capacidades no ambiente do Azure. Esta abordagem também minimiza o impacto da migração no ambiente netezza existente, que pode já estar em execução perto da capacidade total.
Azure Data Factory é um serviço de integração de dados baseado na cloud que permite a criação de fluxos de trabalho baseados em dados na cloud para orquestrar e automatizar o movimento de dados e a transformação de dados. Com o Data Factory, pode criar e agendar fluxos de trabalho baseados em dados, denominados pipelines, que podem ingerir dados de arquivos de dados diferentes. Pode processar e transformar dados através de 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 migrar e a respetiva localização, pode utilizar as instalações do Data Factory para gerir e automatizar partes do processo de migração. Também pode utilizar Azure Synapse Pipelines.
Diferenças de DDL do SQL entre Netezza e Azure Synapse
Linguagem de Definição de Dados SQL (DDL)
Dica
Os comandos CREATE TABLE
DDL do SQL e CREATE VIEW
têm elementos principais padrão, mas também são utilizados para definir opções específicas da implementação.
A norma ANSI SQL define a sintaxe básica para comandos DDL, como CREATE TABLE
e CREATE VIEW
. Estes comandos são utilizados no Netezza e no Azure Synapse, mas também foram expandidos para permitir a definição de funcionalidades específicas da implementação, como indexação, distribuição de tabelas e opções de criação de partições.
As secções seguintes abordam as opções específicas do Netezza a considerar durante uma migração para Azure Synapse.
Considerações sobre tabelas
Dica
Utilize índices existentes para dar uma indicação dos candidatos para indexação no armazém migrado.
Ao migrar tabelas entre diferentes tecnologias, apenas os dados não processados e os metadados descritivos são movidos fisicamente entre os dois ambientes. Outros elementos da base de dados do sistema de origem, como índices e ficheiros de registo, não são migrados diretamente, uma vez que estes podem não ser necessários ou podem ser implementados de forma diferente no novo ambiente de destino. Por exemplo, a opção TEMPORARY
na sintaxe do CREATE TABLE
Netezza é equivalente a prefixar o nome da tabela com um caráter "#" no Azure Synapse.
É importante compreender onde as otimizações de desempenho ( como índices) foram utilizadas no ambiente de origem. Isto indica onde a otimização do desempenho pode ser adicionada no novo ambiente de destino. Por exemplo, se foram criados mapas de zona no ambiente netezza de origem, isto poderá indicar que deve ser criado um índice não agrupado na base de dados Azure Synapse migrada. Outras técnicas nativas de otimização do desempenho, como a replicação de tabelas, podem ser mais aplicáveis do que uma criação de índice "like-for-like" retos.
Tipos de objetos de base de dados Netezza não suportados
Dica
As funcionalidades específicas do Netezza podem ser substituídas por Azure Synapse funcionalidades.
O Netezza implementa alguns objetos de base de dados que não são suportados diretamente no Azure Synapse, mas existem métodos para obter a mesma funcionalidade no 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 utilizados no momento da consulta para restringir a quantidade de dados a analisar. Os mapas de zona são criados nos seguintes tipos de coluna:
-
INTEGER
colunas de comprimento 8 bytes ou menos. - Colunas temporais. Por exemplo,
DATE
,TIME
eTIMESTAMP
. -
CHAR
se estas forem parte de uma vista materializada e mencionadas naORDER BY
cláusula.
Pode descobrir que colunas têm mapas de zona através do
nz_zonemap
utilitário, que faz parte do NZ Toolkit. Azure Synapse não inclui mapas de zona, mas pode obter resultados semelhantes com outros tipos de índice definidos pelo utilizador e/ou criação de partições.-
Tabelas base agrupadas (CBT): no Netezza, os CBTs são normalmente utilizados para tabelas de factos, que podem ter milhares de milhões de registos. A análise de uma tabela tão grande requer muito tempo de processamento, uma vez que pode ser necessária uma análise completa da tabela para obter registos relevantes. Organizar registos no CBT restritivo permite que a Netezza agrupe registos nas mesmas extensões ou nas proximidades. Este processo também cria mapas de zona que melhoram o desempenho ao reduzir a quantidade de dados a analisar.
No Azure Synapse, pode obter um efeito semelhante ao utilizar a criação de partições e/ou a utilização de outros índices.
Vistas materializadas: o Netezza suporta vistas materializadas e recomenda a criação de uma ou mais destas em tabelas grandes com muitas colunas em que apenas algumas dessas colunas são utilizadas regularmente em consultas. O sistema mantém automaticamente vistas materializadas quando os dados na tabela base são atualizados.
Azure Synapse suporta vistas materializadas, com a mesma funcionalidade que o Netezza.
Mapeamento do tipo de dados netezza
Dica
Avalie o impacto dos tipos de dados não suportados como parte da fase de preparação.
A maioria dos tipos de dados netezza tem um equivalente direto em Azure Synapse. A tabela seguinte mostra estes tipos de dados juntamente com a abordagem recomendada para mapeá-los.
Tipo de Dados netezza | Azure Synapse Tipo de Dados |
---|---|
BIGINT | BIGINT |
BINARY VARYING(n) | VARBINARY(n) |
BOOLEANO | BIT |
BYTEINT | TINYINT |
CARATERES VARIÁVEIS(n) | VARCHAR(n) |
CARÁTER(n) | CHAR(n) |
DATA | DATA(data) |
DECIMAL(p;s) | DECIMAL(p;s) |
PRECISÃO DUPLA | FLOAT |
FLOAT(n) | FLOAT(n) |
INTEGER | INT |
INTERVALO | Atualmente, os tipos de dados INTERVAL não são suportados diretamente no Azure Synapse, mas podem ser calculados com funções temporais, como DATEDIFF. |
DINHEIRO | DINHEIRO |
NATIONAL CHARACTER VARYING(n) | NVARCHAR(n) |
CARÁTER NACIONAL(n) | NCHAR(n) |
NUMERIC(p;s) | NUMERIC(p;s) |
REAL | REAL |
SMALLINT | SMALLINT |
ST_GEOMETRY(n) | Os tipos de dados espaciais, como ST_GEOMETRY não são atualmente suportados no Azure Synapse, mas os dados podem ser armazenados como VARCHAR ou VARBINARY. |
HORA | HORA |
HORA COM FUSO HORÁRIO | DATETIMEOFFSET |
CARIMBO DE DATA/HORA | DATETIME |
Geração de Linguagem de Definição de Dados (DDL)
Dica
Utilize metadados Netezza existentes para automatizar a geração de CREATE TABLE
e CREATE VIEW
DDL para Azure Synapse.
Edite netezza CREATE TABLE
e CREATE VIEW
scripts existentes para criar as definições equivalentes com tipos de dados modificados, conforme descrito anteriormente, se necessário. Normalmente, isto envolve remover ou modificar quaisquer cláusulas adicionais específicas do Netezza, como ORGANIZE ON
.
No entanto, todas as informações que especificam as definições atuais de tabelas e vistas no ambiente Netezza existente são mantidas nas tabelas de catálogo do sistema. Esta é a melhor origem destas informações, uma vez que é garantido que estão atualizadas e concluídas. Tenha em atenção que a documentação mantida pelo utilizador pode não estar sincronizada com as definições atuais da tabela.
Aceda a estas informações através de utilitários como nz_ddl_table
e gere as CREATE TABLE
instruções DDL. Edite estas instruções para as tabelas equivalentes no Azure Synapse.
Dica
Ferramentas e serviços de terceiros podem automatizar tarefas de mapeamento de dados.
Existem parceiros da Microsoft que oferecem ferramentas e serviços para automatizar a migração, incluindo o mapeamento de tipos de dados. Além disso, se uma ferramenta ETL de terceiros, como a Informatica ou o Talend, já estiver a ser utilizada no ambiente Netezza, essa ferramenta pode implementar quaisquer transformações de dados necessárias.
Diferenças de DML do SQL entre Netezza e Azure Synapse
Linguagem de Manipulação de Dados SQL (DML)
Dica
Os comandos SELECT
DML do SQL , INSERT
e UPDATE
têm elementos principais padrão, mas também podem implementar diferentes opções de sintaxe.
A norma ANSI SQL define a sintaxe básica para comandos DML, tais como SELECT
, INSERT
, UPDATE
e DELETE
. Tanto o Netezza como o Azure Synapse utilizam estes comandos, mas em alguns casos existem diferenças de implementação.
As secções seguintes abordam os comandos DML específicos da Netezza que deve considerar durante uma migração para Azure Synapse.
Diferenças de sintaxe da DML SQL
Tenha em atenção estas diferenças na sintaxe da Linguagem de Manipulação de Dados SQL (DML) entre o NETezza SQL e Azure Synapse ao migrar:
STRPOS
: em Netezza, aSTRPOS
função devolve a posição de uma subcadeia numa cadeia. A função equivalente no Azure Synapse éCHARINDEX
, com a ordem dos argumentos invertida. Por exemplo,SELECT STRPOS('abcdef','def')...
no Netezza é equivalente aSELECT CHARINDEX('def','abcdef')...
em Azure Synapse.AGE
: O Netezza suporta oAGE
operador para dar 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...
. Repare na sequência de representação de data.NOW()
: Netezza utilizaNOW()
para representarCURRENT_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 de dados que estão a ser migrados.
Ao migrar de um ambiente de armazém de dados legado maduro, como o Netezza, existem, muitas vezes, elementos diferentes de tabelas e vistas simples que precisam de ser migradas para o novo ambiente de destino. Alguns exemplos incluem funções, procedimentos armazenados e sequências.
Como parte da fase de preparação, crie um inventário dos objetos que precisam de ser migrados e defina os métodos para os processar. Em seguida, atribua uma alocação adequada de recursos no plano do projeto.
Podem existir instalações no ambiente do Azure que substituem a funcionalidade implementada como funções ou procedimentos armazenados no ambiente Netezza. Neste caso, muitas vezes, é mais eficiente utilizar as instalações incorporadas do Azure em vez de recodificar as funções netezza.
Dica
Os produtos e serviços de terceiros podem automatizar a migração de elementos não dados.
Os parceiros da Microsoft oferecem ferramentas e serviços que podem automatizar a migração, incluindo o mapeamento de tipos de dados. Além disso, as ferramentas ETL de terceiros, como a Informatica ou o Talend, que já estão a ser utilizadas no ambiente do IBM Netezza, podem implementar quaisquer transformações de dados necessárias.
Consulte as secções seguintes para obter mais informações sobre cada um destes elementos.
Funções
Tal como acontece com a maioria dos produtos de base de dados, o Netezza suporta funções do sistema e funções definidas pelo utilizador na implementação do SQL. Ao migrar para outra plataforma de base de dados, como Azure Synapse, as funções comuns do sistema estão disponíveis e podem ser migradas sem alterações. Algumas funções do sistema podem ter uma sintaxe ligeiramente diferente, mas as alterações necessárias podem ser automatizadas. As funções do sistema em que não existem equivalentes, como funções arbitrárias definidas pelo utilizador, poderão ter de ser recodificadas com os idiomas disponíveis no ambiente de destino. Azure Synapse utiliza a popular linguagem Transact-SQL para implementar funções definidas pelo utilizador. As funções definidas pelo utilizador netezza são codificadas em linguagens nzlua ou C++.
Procedimentos armazenados
A maioria dos produtos de base de dados modernos permitem que os procedimentos sejam armazenados na base de dados. O Netezza fornece a linguagem NZPLSQL, baseada no POSTgres PL/pgSQL. Normalmente, um procedimento armazenado contém instruções SQL e alguma lógica processual e pode devolver dados ou um estado.
O Azure Synapse Analytics também suporta procedimentos armazenados através do T-SQL, pelo que, se tiver de migrar os procedimentos armazenados, volte a codificá-los em conformidade.
Sequências
No Netezza, uma sequência é um objeto de base de dados com nome criado através CREATE SEQUENCE
do qual pode fornecer o valor exclusivo através do NEXT VALUE FOR
método . Utilize-os para gerar números exclusivos para utilização como valores de chave de substituição para valores de chave primária.
Na Azure Synapse, não CREATE SEQUENCE
há . As sequências são processadas com o IDENTITY para criar chaves de substituição ou identidade gerida com código SQL para criar o número de sequência seguinte numa série.
Utilizar EXPLAIN para validar o SQL legado
Dica
Encontre potenciais problemas de migração com consultas reais dos registos de consultas do sistema existentes.
Capture algumas instruções SQL representativas dos registos do histórico de consultas legados para avaliar o SQL do Netezza legado para compatibilidade com Azure Synapse. Em seguida, coloque o prefixo dessas consultas com EXPLAIN
e , assumindo um modelo de dados migrado "like-for-like" no Azure Synapse com os mesmos nomes de tabelas e colunas, execute essas EXPLAIN
instruções no Azure Synapse. Qualquer SQL incompatível devolverá um erro. Utilize estas informações para determinar a escala da tarefa de recodificação. Esta abordagem não requer que os dados sejam carregados para o ambiente do Azure, apenas que as tabelas e vistas relevantes tenham sido criadas.
Mapeamento do IBM Netezza para T-SQL
O IBM Netezza para T-SQL em conformidade com Azure Synapse mapeamento do tipo de dados SQL está nesta tabela:
Tipo de Dados IBM Netezza | Azure Synapse Tipo de Dados SQL |
---|---|
matriz | Não suportado |
bigint | bigint |
objeto binário grande [(n[K| M|G])] | nvarchar [(n|max)] |
blob [(n[K| M|G])] | nvarchar [(n|max)] |
byte [(n)] | binary [(n)]|varbinary(max) |
byteint | smallint |
char varying [(n)] | varchar [(n|max)] |
carateres que variam [(n)] | varchar [(n|max)] |
caráter [(n)] | char [(n)]|varchar(max) |
caráter [(n)] | char [(n)]|varchar(max) |
objeto grande de caráter [(n[K| M|G])] | varchar [(n|max) |
clob [(n[K| M|G])] | varchar [(n|max) |
conjunto de dados | Não suportado |
data | data |
dec [(p[,s])] | decimal [(p[,s])] |
decimal [(p[,s])] | decimal [(p[,s])] |
precisão dupla | float(53) |
float [(n)] | float [(n)] |
gráfico [(n)] | nchar [(n)]| varchar(máx.) |
interval | Não suportado |
json [(n)] | nvarchar [(n|max)] |
varchar longo | nvarchar(máx) |
vargraphic longo | nvarchar(máx) |
mbb | Não suportado |
mbr | Não suportado |
number [((p|*)[,s])] | numérico [(p[,s])] |
numérico [(p [,s])] | numérico [(p[,s])] |
period | Não suportado |
real | real |
smallint | smallint |
st_geometry | Não suportado |
hora | hora |
hora com fuso horário | datetimeoffset |
carimbo de data/hora | datetime2 |
carimbo de data/hora com fuso horário | datetimeoffset |
varbyte | varbinary [(n|max)] |
varchar [(n)] | varchar [(n)] |
vargraphic [(n)] | nvarchar [(n|max)] |
varray | Não suportado |
xml | Não suportado |
xmltype | Não suportado |
Resumo
As instalações típicas do Netezza legadas existentes são implementadas de forma a facilitar a migração para Azure Synapse. Utilizam o SQL para consultas analíticas em grandes volumes de dados e estão em algum tipo de modelo de dados dimensional. Estes fatores tornam-nos bons candidatos para a migração para Azure Synapse.
Para minimizar a tarefa de migrar o código SQL real, siga estas recomendações:
A migração inicial do armazém de dados deve ser tal como está para minimizar o risco e o tempo decorrido, mesmo que o ambiente final eventual incorpore um modelo de dados diferente, como o cofre de dados.
Compreenda as diferenças entre a implementação do NETezza SQL e Azure Synapse.
Utilize metadados e registos de consultas da implementação netezza existente para avaliar o impacto das diferenças e planear uma abordagem para mitigar.
Automatize o processo sempre que possível para minimizar erros, riscos e tempo para a migração.
Considere utilizar parceiros e serviços especializados da Microsoft para simplificar a migração.
Passos seguintes
Para saber mais sobre as ferramentas da Microsoft e de terceiros, veja o próximo artigo desta série: Ferramentas para a migração do armazém de dados netezza para o Azure Synapse Analytics.