Minimización de los problemas de SQL para migraciones de Netezza

Este artículo es la quinta parte de una serie de siete partes que proporciona instrucciones sobre cómo migrar de Netezza a Azure Synapse Analytics. Este artículo se centra en los procedimientos recomendados para minimizar los problemas de SQL.

Información general

Características de los entornos de Netezza

Sugerencia

Netezza introdujo por primera vez el concepto de "dispositivo de almacenamiento de datos" a principios de los años 2000.

En 2003, Netezza lanzó inicialmente su producto de dispositivo de almacenamiento de datos. Redujo el costo de entrada y mejoró la facilidad de uso de técnicas de procesamiento paralelo masivo (MPP) para permitir el procesamiento de datos a gran escala con más eficacia que el sistema central existente u otras tecnologías de MPP que había disponibles en ese momento. Desde entonces, el producto ha evolucionado y su uso es frecuente en grandes instituciones financieras y en empresas de telecomunicaciones y de comercio minorista. La implementación original usaba hardware propio, incluidas matrices de puertas programables (o FPGA), y se podía acceder a ella mediante la conexión de red de ODBC o JDBC a través de TCP/IP.

La mayoría de las instalaciones existentes de Netezza son locales, por lo que muchos usuarios están pensando en migrar parte o la totalidad de sus datos de Netezza a Azure Synapse Analytics para disfrutar de las ventajas de un traslado a un entorno en la nube moderno.

Sugerencia

Muchas de las instalaciones existentes de Netezza son almacenamientos de datos que usan un modelo de datos dimensional.

La tecnología de Netezza se usa a menudo para implementar un almacenamiento de datos que admita consultas analíticas complejas en grandes volúmenes de datos con SQL. Los modelos de datos dimensionales (esquemas de estrella o copo de nieve) son comunes, al igual que la implementación de data marts para departamentos individuales.

Esta combinación de modelos de datos dimensionales y SQL simplifica la migración a Azure Synapse, ya que los conceptos básicos y las aptitudes de SQL se pueden transferir. El enfoque recomendado es migrar el modelo de datos existente tal cual para reducir el riesgo y el tiempo necesario. Incluso si la intención final es realizar cambios en el modelo de datos (por ejemplo, pasar a un modelo de almacén de datos), lleve a cabo una migración inicial tal cual y, a continuación, realice los cambios en el entorno en la nube de Azure para aprovechar el rendimiento, la escalabilidad elástica y las ventajas de costos de la plataforma.

Aunque el lenguaje SQL se ha normalizado, algunos proveedores han implementado extensiones propias. En este documento, se explican las posibles diferencias de SQL que puede encontrar al migrar desde un entorno de Netezza heredado y se proporcionan soluciones alternativas.

Uso de Azure Data Factory para implementar una migración controlada por metadatos

Sugerencia

Automatice el proceso de migración con las funcionalidades de Azure Data Factory.

Automatice y organice el proceso de migración con las funcionalidades del entorno de Azure. Este enfoque también minimiza el impacto de la migración en el entorno existente de Netezza, que es posible que ya esté funcionando casi a plena capacidad.

Azure Data Factory es un servicio de integración de datos basado en la nube que le permite la creación de flujos de trabajo basados en datos en la nube a fin de coordinar y automatizar el movimiento y la transformación de datos. Con Data Factory, puede crear y programar flujos de trabajo basados en datos (denominados canalizaciones) que pueden ingerir datos de distintos almacenes. Puede procesar y transformar los datos usando servicios de proceso, como Azure HDInsight Hadoop, Spark, Azure Data Lake Analytics y Azure Machine Learning.

Mediante la creación de metadatos para mostrar las tablas de datos que se van a migrar y su ubicación, puede usar las características de Azure Data Factory para administrar y automatizar algunas partes del proceso de migración. También puede usar canalizaciones de Azure Synapse.

Diferencias de DDL de SQL entre Netezza y Azure Synapse

Lenguaje de definición de datos (DDL) de SQL

Sugerencia

Los comandos DDL CREATE TABLE y CREATE VIEW de SQL tienen elementos principales estándar, pero también se usan para definir opciones específicas de la implementación.

El estándar SQL de ANSI define la sintaxis básica para los comandos DDL, como CREATE TABLE y CREATE VIEW. Estos comandos se usan tanto en Netezza como en Azure Synapse, pero también se han ampliado para permitir la definición de características específicas de la implementación, como las opciones de indexación, distribución de tablas y creación de particiones.

En las secciones siguientes, se describen las opciones específicas de Netezza que deben tenerse en cuenta durante una migración a Azure Synapse.

Consideraciones sobre las tablas

Sugerencia

Utilice índices que ya existan para indicar candidatos para la indexación en el almacenamiento migrado.

Al migrar tablas entre diferentes tecnologías, solo se mueven físicamente entre los dos entornos los datos sin procesar y los metadatos que los describen. Otros elementos de base de datos del sistema de origen, como los índices y los archivos de registro, no se migran, porque es posible que no sean necesarios o que se implementen de manera diferente en el nuevo entorno de destino. Por ejemplo, la opción TEMPORARY en la sintaxis CREATE TABLE de Netezza equivale a prefijar el nombre de la tabla con un carácter "#" en Azure Synapse.

Es importante saber dónde se han utilizado optimizaciones del rendimiento (como los índices) en el entorno de origen. Esto indica dónde se puede optimizar el rendimiento en el nuevo entorno de destino. Por ejemplo, si se han creado mapas de zona en el entorno de Netezza de origen, puede indicar que debe crearse un índice no agrupado en el entorno de la base de datos de Azure Synapse migrada. Otras técnicas de optimización del rendimiento nativas, como la replicación de tablas, pueden ser más adecuadas que la creación directa de un índice equivalente (igual por igual).

Tipos de objetos de base de datos de Netezza no admitidos

Sugerencia

Las características específicas de Netezza se pueden reemplazar por características de Azure Synapse.

Netezza implementa algunos objetos de base de datos que no se admiten directamente en Azure Synapse; sin embargo, existen métodos para lograr la misma funcionalidad en el nuevo entorno:

  • Mapas de zona: en Netezza, los mapas de zona se crean y mantienen automáticamente en el caso de algunos tipos de columna y se usan en el momento de la consulta para restringir la cantidad de datos que se van a examinar. Los mapas de zona se crean en los siguientes tipos de columna:

    • Columnas INTEGER de 8 bytes o menos.
    • Columnas temporales. Por ejemplo, DATE, TIME y TIMESTAMP.
    • Columnas CHAR, si forman parte de una vista materializada y se mencionan en la cláusula ORDER BY.

    Puede averiguar qué columnas tienen mapas de zona mediante la utilidad nz_zonemap, que forma parte del kit de herramientas de NZ. Azure Synapse no incluye mapas de zona, pero se pueden obtener resultados similares con otros tipos de índice definidos por el usuario o por medio de la creación de particiones.

  • Tablas base agrupadas (CBT): en Netezza, las tablas base agrupadas se usan normalmente como tablas de hechos, que pueden tener miles de millones de registros. El examen de una tabla de gran tamaño requiere mucho tiempo de procesamiento, ya que podría ser necesario realizar un recorrido de tabla completo para obtener los registros de interés. La organización de los registros en tablas CBT restrictivas permite a Netezza agruparlos en las mismas extensiones o en otras próximas. Este proceso también crea mapas de zona que mejoran el rendimiento al reducir la cantidad de datos que se examinan.

    En Azure Synapse, se puede conseguir un efecto parecido mediante la creación de particiones o el uso de otros índices.

  • Vistas materializadas: Netezza admite vistas materializadas y recomienda crear una o varias de estas vistas en tablas grandes que tengan muchas columnas donde solo algunas de ellas se usen con frecuencia en las consultas. El sistema mantiene las vistas materializadas automáticamente cuando se actualizan los datos de la tabla base.

    Azure Synapse admite vistas materializadas, con la misma funcionalidad que Netezza.

Asignación de tipos de datos de Netezza

Sugerencia

Evalúe el impacto de los tipos de datos no admitidos como parte de la fase de preparación.

la mayoría de los tipos de datos de Netezza tienen un equivalente directo en Azure Synapse. En la siguiente tabla se muestran estos tipos de datos junto con el enfoque recomendado para asignarlos.

Tipo de datos de Netezza Tipo de datos de Azure Synapse
bigint bigint
BINARY VARYING(n) VARBINARY(n)
BOOLEAN BIT
BYTEINT TINYINT
CHARACTER VARYING(n) VARCHAR(n)
CHARACTER(n) CHAR(n)
DATE DATE(date)
DECIMAL(p,s) DECIMAL(p,s)
DOUBLE PRECISION FLOAT
FLOAT(n) FLOAT(n)
INTEGER INT
INTERVAL Actualmente, los tipos de datos INTERVAL no se admiten directamente en Azure Synapse, pero se pueden calcular mediante funciones temporales, 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) Los tipos de datos espaciales, como ST_GEOMETRY, actualmente no se admiten en Azure Synapse, pero los datos se pueden almacenar como VARCHAR o VARBINARY.
TIME TIME
TIME WITH TIME ZONE DATETIMEOFFSET
timestamp DATETIME

Generación del lenguaje de definición de datos (DDL)

Sugerencia

Use los metadatos de Netezza para automatizar la generación de DDL CREATE TABLE y CREATE VIEW para Azure Synapse.

Si es necesario, edite los scripts CREATE TABLE y CREATE VIEW de Netezza para crear las definiciones equivalentes con tipos de datos modificados, como hemos explicado antes. Normalmente, este proceso supone quitar o modificar cualquier cláusula adicional específica de Netezza, como ORGANIZE ON.

Sin embargo, toda la información que especifica las definiciones actuales de tablas y vistas dentro del entorno de Netezza existente se mantiene dentro de las tablas del catálogo del sistema. Este es el mejor origen de esta información, ya que se garantiza que está actualizada y completa. Tenga en cuenta que es posible que la documentación mantenida por los usuarios no esté sincronizada con las definiciones de tabla actuales.

Acceda a esta información mediante utilidades como nz_ddl_table y genere las instrucciones DDL CREATE TABLE. Edite estas instrucciones para las tablas equivalentes en Azure Synapse.

Sugerencia

Herramientas y servicios de terceros pueden automatizar las tareas de asignación de datos.

Hay asociados de Microsoft que ofrecen herramientas y servicios para automatizar la migración, incluida la asignación de los tipos de datos. Además, si ya se utiliza una herramienta ETL de terceros, como Informatica o Talend, en el entorno de Netezza, esa herramienta puede implementar cualquier transformación de datos necesaria.

Diferencias de DML de SQL entre Netezza y Azure Synapse

Lenguaje de manipulación de datos (DML) de SQL

Sugerencia

Los comandos DML SELECT, INSERT y UPDATE de SQL tienen elementos principales estándar, pero también pueden implementar otras opciones de sintaxis.

El estándar SQL de ANSI define la sintaxis básica de los comandos DML, como SELECT, INSERT, UPDATEy DELETE. Tanto Netezza como Azure Synapse usan estos comandos, pero, en algunos casos, hay diferencias de implementación.

En las secciones siguientes, se describen los comandos DML específicos de Netezza que debe tener en cuenta durante una migración a Azure Synapse.

Diferencias de sintaxis de DML de SQL

Tenga en cuenta estas diferencias entre Netezza SQL y Azure Synapse en cuanto a la sintaxis del lenguaje de manipulación de datos (DML) de SQL al realizar la migración:

  • STRPOS: en Netezza, la función STRPOS devuelve la posición de una subcadena dentro de una cadena. La función equivalente en Azure Synapse es CHARINDEX, con el orden de los argumentos invertido. Por ejemplo, SELECT STRPOS('abcdef','def')... en Netezza es equivalente a SELECT CHARINDEX('def','abcdef')... en Azure Synapse.

  • AGE: Netezza admite el operador AGE para proporcionar el intervalo entre dos valores temporales, como marcas de tiempo o fechas. Por ejemplo, SELECT AGE('23-03-1956','01-01-2019') FROM.... En Azure Synapse, DATEDIFF proporciona el intervalo. Por ejemplo, SELECT DATEDIFF(day, '1956-03-26','2019-01-01') FROM.... Anote la secuencia de representación de fecha.

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

Funciones, procedimientos almacenados y secuencias

Sugerencia

En la fase de preparación, evalúe el número y el tipo de objetos que no son datos que se van a migrar.

Al migrar desde un entorno de almacenamiento de datos heredado consolidado, como Netezza, a menudo hay elementos distintos de tablas y vistas simples que se deben migrar al nuevo entorno de destino. Algunos ejemplos son las funciones, los procedimientos almacenados y las secuencias.

En la fase de preparación, cree un inventario de los objetos que deben migrarse y defina los métodos para controlarlos. A continuación, asigne los recursos adecuados en el plan del proyecto.

Puede haber características en el entorno de Azure que reemplacen la funcionalidad implementada como funciones o procedimientos almacenados en el entorno de Netezza. En este caso, suele ser más eficaz usar las características integradas de Azure que volver a programar las funciones de Netezza.

Sugerencia

Los productos y servicios de terceros pueden automatizar la migración de elementos que no son datos.

Los asociados de Microsoft ofrecen herramientas y servicios que pueden automatizar la migración, incluida la asignación de los tipos de datos. Además, herramientas ETL de terceros, como Informatica o Talend, que ya están en uso en el entorno de IBM Netezza, pueden implementar cualquier transformación de datos necesaria.

Consulte las secciones siguientes para obtener más información sobre cada uno de estos elementos.

Functions

Al igual que en la mayoría de los productos de base de datos, Netezza admite funciones del sistema y funciones definidas por el usuario en la implementación de SQL. Al migrar a otra plataforma de base de datos, como Azure Synapse, hay disponibles funciones comunes del sistema que se pueden migrar sin cambios. Algunas funciones del sistema pueden tener una sintaxis ligeramente diferente, pero se pueden automatizar los cambios necesarios. En el caso de las funciones del sistema para las que no hay ningún equivalente, como las funciones arbitrarias definidas por el usuario, puede ser necesario programarlas de nuevo con los lenguajes disponibles en el entorno de destino. Azure Synapse usa el conocido lenguaje Transact-SQL para la implementación de funciones definidas por el usuario. Las funciones definidas por el usuario de Netezza se programan mediante los lenguajes nzLua o C++.

Procedimientos almacenados

La mayoría de los productos de base de datos modernos permite almacenar los procedimientos en la base de datos. Netezza proporciona el lenguaje NZPLSQL, que se basa en PL/pgSQL de Postgres. En general, un procedimiento almacenado contiene instrucciones SQL y alguna lógica de procedimiento, y puede devolver datos o un estado.

Azure Synapse Analytics también admite procedimientos almacenados mediante T-SQL, por lo que si debe migrar procedimientos almacenados, vuelva a programarlos en consecuencia.

Secuencias

En Netezza, una secuencia es un objeto de base de datos con nombre creado mediante CREATE SEQUENCE que puede proporcionar el valor único a través del método NEXT VALUE FOR. Se pueden usar para generar números únicos para utilizar como valores de clave suplente para los valores de clave principal.

En Azure Synapse, CREATE SEQUENCE no existe. Las secuencias se controlan con IDENTITY para crear claves suplentes o una identidad administrada mediante código SQL para crear el siguiente número de secuencia de una serie.

Uso de EXPLAIN para validar SQL heredado

Sugerencia

Busque posibles problemas de migración mediante consultas reales de los registros de consultas del sistema existentes.

Capture algunas instrucciones SQL representativas de los registros del historial de consultas heredado para evaluar si el código SQL heredado de Netezza es compatible con Azure Synapse. A continuación, agregue un prefijo a esas consultas con EXPLAIN y, suponiendo que existe un modelo de datos migrado equivalente (igual por igual) en Azure Synapse con los mismos nombres de tabla y columna, ejecute esas instrucciones EXPLAIN en Azure Synapse. Cualquier SQL incompatible devolverá un error. Use esta información para determinar la escala de la tarea de reprogramación. Este enfoque no requiere que los datos se carguen en el entorno de Azure, solo que se hayan creado las tablas y vistas pertinentes.

Asignación de IBM Netezza a T-SQL

La asignación de los tipos de datos de IBM Netezza a T-SQL compatible con Azure Synapse SQL se muestra en esta tabla:

Tipo de dato de IBM Netezza Tipo de datos de Azure Synapse SQL
array No admitido
bigint bigint
binary large object [(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)]
character varying [(n)] varchar [(n|max)]
 char [(n)] char [(n)]|varchar(max)
character [(n)] char [(n)]|varchar(max)
 character large object [(n[K|M|G])] varchar [(n|max)
 clob [(n[K|M|G])] varchar [(n|max)
 dataset No admitido 
 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)
 interval No admitido 
 json [(n)] nvarchar [(n|max)]
 long varchar nvarchar(max)
 long vargraphic nvarchar(max)
 mbb No admitido 
 mbr No admitido 
 number [((p|*)[,s])] numeric [(p[,s])]
 numeric [(p [,s])]  numeric [(p[,s])]
 period No admitido 
 real  real
 SMALLINT SMALLINT
 st_geometry No admitido 
 time time
 time with time zone datetimeoffset
 timestamp  datetime2
 timestamp with time zone datetimeoffset
 varbyte varbinary [(n|max)]
 varchar [(n)]  varchar [(n)]
 vargraphic [(n)] nvarchar [(n|max)]
 varray No admitido 
 Xml No admitido 
 xmltype No admitido 

Resumen

Las instalaciones de Netezza heredadas típicas están implementadas de una manera que facilita la migración a Azure Synapse. Utilizan SQL para las consultas analíticas en grandes volúmenes de datos y tienen algún tipo de modelo de datos dimensional. Estos factores las convierten en buenos candidatos para la migración a Azure Synapse.

Para minimizar la tarea de migración del código SQL real, siga estas recomendaciones:

  • La migración inicial del almacenamiento de datos debe ser tal cual para minimizar el riesgo y el tiempo necesario, incluso si el posible entorno final va a incorporar un modelo de datos diferente, como un almacén de datos.

  • Conozca las diferencias entre la implementación de Netezza SQL y Azure Synapse.

  • Use los metadatos y los registros de consultas de la implementación existente de Netezza para evaluar el impacto de las diferencias y planear un enfoque para mitigarlo.

  • Automatice el proceso siempre que sea posible para minimizar los errores, el riesgo y el tiempo necesario para la migración.

  • Considere la posibilidad de usar servicios y asociados de Microsoft especialistas para simplificar la migración.

Pasos siguientes

Para obtener más información sobre herramientas de Microsoft y de terceros, lea el siguiente artículo de esta serie: Herramientas para la migración del almacenamiento de datos de Netezza a Azure Synapse Analytics.