Soluciona problemas de migración
Este documento te ayuda a solucionar problemas comunes cuando migras tu almacén de datos (como Teradata, Amazon Redshift, Oracle o Apache Hive) a BigQuery, incluidos los problemas con la evaluación de la migración, la traducción interactiva y por lotes de SQL, y la generación de metadatos con la herramienta de extracción de línea de comandos dwh-migration-dumper.
Para inspeccionar los detalles de ejecución del trabajo, los códigos de error y el uso de ranuras para las consultas y los trabajos migrados, también puedes consultar la vista INFORMATION_SCHEMA.JOBS.
Evaluación de la migración
En las siguientes secciones, se explican los problemas habituales y las técnicas de solución de problemas para migrar tu almacén de datos a BigQuery.
dwh-migration-dumper errores de herramientas
Para solucionar los errores y las advertencias en el resultado de la terminal de la herramienta de dwh-migration-dumper que se produjeron durante la extracción de metadatos o registros de consultas, consulta solución de problemas de generación de metadatos.
Errores de migración de Hive
En las siguientes secciones, se describen problemas comunes con los que puedes encontrarte cuando planeas migrar tu almacén de datos de Hive a BigQuery.
El hook de registro de extracción de registros de consultas hadoop-migration-assessment escribe mensajes de registro de depuración en tus registros hive-server2. Si tienes algún problema, revisa los registros de depuración del hook de registro, que contiene la cadena MigrationAssessmentLoggingHook.
Soluciona el error ClassNotFoundException
Este error puede deberse a la pérdida incorrecta del archivo JAR del hook de registro. Asegúrate de haber agregado el archivo JAR a la carpeta auxlib en el clúster de Hive. Como alternativa, puedes especificar la ruta de acceso completa al archivo JAR en la propiedad hive.aux.jars.path, por ejemplo, file://AUXLIB_PATH/HiveMigrationAssessmentQueryLogsHooks_deploy.jar.
Las subcarpetas no aparecen en la carpeta configurada
Este problema puede deberse a problemas de configuración o durante la inicialización del hook de registro.
Busca tus registros de depuración hive-server2 para los siguientes mensajes de hook de registro:
Unable to initialize logger, logging disabled
Log dir configuration key 'dwhassessment.hook.base-directory' is not set, logging disabled.
Error while trying to set permission
Revisa los detalles del problema y verifica si hay algo que necesites corregir para solucionarlo.
Los archivos no aparecen en la carpeta
Este problema puede deberse a los problemas que se encontraron durante el procesamiento de un evento o mientras se escribió en un archivo.
Busca tus registros de depuración hive-server2 para los siguientes mensajes de hook de registro:
Failed to close writer for file
Got exception while processing event
Error writing record for query
Revisa los detalles del problema y verifica si hay algo que necesites corregir para solucionarlo.
Faltan algunos eventos de consulta
Este problema puede deberse a un desbordamiento de la cola de subprocesos de hook de registro.
Busca en tus registros de depuración hive-server2 el siguiente mensaje de hook de registro:
Writer queue is full. Ignoring event
Si ves este mensaje, considera aumentar el parámetro dwhassessment.hook.queue.capacity.
Traductor de SQL interactivo
En las siguientes secciones, se describen los errores que se suelen encontrar cuando se usa el traductor interactivo de SQL.
Problemas de traducción de RelationNotFound o AttributeNotFound
Después de traducir una consulta con el traductor interactivo de SQL, es posible que encuentres una traducción fallida con el error RelationNotFound o AttributeNotFound.
Para encontrar las traducciones fallidas, ve a la página Detalles de la traducción en BigQuery en la consola de Google Cloud y abre la pestaña Mensajes de registro.
Para garantizar la traducción más precisa, puedes ingresar las declaraciones del lenguaje de definición de datos (DDL) de todas las tablas usadas en una consulta antes de la consulta. Por ejemplo, si deseas traducir la consulta select table1.field1, table2.field1 from table1, table2 where table1.id = table2.id; de Amazon Redshift, ingresa las siguientes instrucciones de SQL en el traductor interactivo de SQL:
create table schema1.table1 (id int, field1 int, field2 varchar(16));
create table schema1.table2 (id int, field1 varchar(30), field2 date);
select table1.field1, table2.field1
from table1, table2
where table1.id = table2.id;
Cómo corregir problemas de traducción con Gemini
Para corregir los trabajos de traducción fallidos con los errores RelationNotFound o AttributeNotFound, también puedes usar Gemini para resolver estos problemas:
- En BigQuery en la consola de Google Cloud , ve a la página Detalles de la traducción y abre la pestaña Mensajes de registro.
- Haz clic en la búsqueda que tenga el mensaje
RelationNotFoundoAttributeNotFounden la columna Categoría. - Haz clic en Sugerencia de corrección.
- Haz clic en Aplicar.
- Para volver a traducir la búsqueda, haz clic en Traducir.
Traductor de SQL por lotes
En las siguientes secciones, se describen los errores que se suelen encontrar cuando se usa el traductor de SQL por lotes.
Problemas de traducción de RelationNotFound o AttributeNotFound
Después de traducir una consulta con el traductor de SQL por lotes, es posible que se produzca un error en la traducción con el error RelationNotFound o AttributeNotFound.
Para encontrar las traducciones fallidas, ve a la página Detalles de la traducción en BigQuery en la consola de Google Cloud y abre la pestaña Mensajes de registro.
La traducción funciona mejor con DDL de metadatos. Cuando no se pueden encontrar definiciones de objetos SQL, el motor de traducción genera problemas RelationNotFound o AttributeNotFound. Recomendamos usar el extractor de metadatos para generar paquetes de metadatos para garantizar que todas las definiciones de objetos estén presentes. Agregar metadatos es el primer paso recomendado para resolver la mayoría de los errores de traducción, ya que a menudo corrige muchos otros errores que se generan de forma indirecta por la falta de metadatos.
Si deseas obtener más información, consulta Genera metadatos para la traducción y la evaluación.
Cómo corregir problemas de traducción con Gemini
Para corregir los trabajos de traducción fallidos con los errores RelationNotFound o AttributeNotFound, también puedes usar Gemini para resolver estos problemas:
- Ve a la página Detalles de la traducción y abre la pestaña Mensajes de registro.
- Haz clic en la búsqueda que tenga el mensaje
RelationNotFoundoAttributeNotFounden la columna Categoría. Para ir al archivo y a la línea que contienen el error en la pestaña de código, haz clic en el
mensaje de error.
En la columna Acción, haz clic en Sugerencia de corrección.
Selecciona una de las siguientes opciones: Aplicar o Aplicar y volver a ejecutar.
- Para copiar el archivo de esquema generado del directorio de salida al directorio de entrada, haz clic en Aplicar.
- Para copiar el archivo de esquema generado del directorio de salida al directorio de entrada y abrir una ventana de nueva ejecución, haz clic en Aplicar y volver a ejecutar.
Genera metadatos para la traducción y la evaluación
En las siguientes secciones, se explican algunos problemas habituales y técnicas de solución de problemas para la herramienta de dwh-migration-dumper.
Error Out of memory
El error java.lang.OutOfMemoryError en el resultado de la terminal de la herramienta dwh-migration-dumper a menudo se relaciona con la memoria insuficiente para procesar los datos recuperados.
Para solucionar este problema, aumenta la memoria disponible o reduce la cantidad de subprocesos de procesamiento.
Puedes aumentar la memoria máxima si exportas la variable de entorno JAVA_OPTS:
Linux
export JAVA_OPTS="-Xmx4G"
Windows
set JAVA_OPTS="-Xmx4G"
Puedes reducir la cantidad de subprocesos de procesamiento (el valor predeterminado es 32) si incluyes el valor de la marca --thread-pool-size. Esta opción solo es compatible con los conectores hiveql y redshift*:
dwh-migration-dumper --thread-pool-size=1
Controla un error WARN...Task failed
Es posible que, a veces, veas un error WARN [main] o.c.a.d.MetadataDumper [MetadataDumper.java:107] Task failed: … en el resultado de la terminal de la herramienta de dwh-migration-dumper. La herramienta de extracción envía varias consultas al sistema de origen y el resultado de cada una se escribe en su propio archivo. Ver este problema indica que una de estas consultas falló. Sin embargo, la falla de una consulta no impide la ejecución de las otras. Si ves más de un par de errores WARN, revisa los detalles del problema y verifica si hay algo que necesites corregir para que la consulta se ejecute de forma correcta. Por ejemplo, si el usuario de la base de datos que especificaste cuando ejecutaste la herramienta de extracción no tiene los permisos necesarios para leer todos los metadatos, vuelve a intentarlo con un usuario que tenga los permisos correctos.
Archivo ZIP dañado
Para validar el archivo ZIP de la herramienta de dwh-migration-dumper, descarga el archivo SHA256SUMS.txt y ejecuta el siguiente comando:
Bash
sha256sum --check SHA256SUMS.txt
El resultado OK confirma la verificación correcta de la suma de verificación. Cualquier otro mensaje indica un error de verificación:
FAILED: computed checksum did NOT match: El archivo ZIP está dañado y debe volver a descargarse.FAILED: listed file could not be read: No se puede ubicar la versión del archivo ZIP. Descarga los archivos de suma de comprobación y ZIP de la misma versión de actualización y colócalos en el mismo directorio.
WindowsPowerShell
(Get-FileHash RELEASE_ZIP_FILENAME).Hash -eq ((Get-Content SHA256SUMS.txt) -Split " ")[0]
Reemplaza RELEASE_ZIP_FILENAME por el nombre del archivo ZIP descargado de la versión de la herramienta de extracción de línea de comandos de dwh-migration-dumper, por ejemplo, dwh-migration-tools-v1.0.52.zip.
El resultado True confirma la verificación correcta de la suma de verificación.
El resultado False indica un error de verificación. Descarga los archivos de suma de comprobación y ZIP de la misma versión de actualización y colócalos en el mismo directorio.
La extracción de registros de consulta de Teradata es lenta
Para mejorar el rendimiento de las tablas unidas que se especifican mediante las marcas -Dteradata-logs.query-logs-table y -Dteradata-logs.sql-logs-table, puedes incluir una columna adicional de tipo DATE en la condición JOIN.
Esta columna debe definirse en ambas tablas y debe ser parte del índice principal particionado. Para incluir esta columna, usa la marca -Dteradata-logs.log-date-column.
En el siguiente ejemplo, se muestra cómo usar la marca -Dteradata-logs.log-date-column:
Bash
dwh-migration-dumper \ -Dteradata-logs.query-logs-table=historicdb.ArchivedQryLogV \ -Dteradata-logs.sql-logs-table=historicdb.ArchivedDBQLSqlTbl \ -Dteradata-logs.log-date-column=ArchiveLogDate
WindowsPowerShell
dwh-migration-dumper ` "-Dteradata-logs.query-logs-table=historicdb.ArchivedQryLogV" ` "-Dteradata-logs.sql-logs-table=historicdb.ArchivedDBQLSqlTbl" ` "-Dteradata-logs.log-date-column=ArchiveLogDate"
Se superó el límite de tamaño de fila de Teradata
La versión 15 de Teradata tiene un límite de tamaño de fila de 64 KB. Si se excede el límite, la herramienta de extracción falla con el siguiente mensaje:
[Error 9804] [SQLState HY000] Response Row size or Constant Row size overflow
Para resolver este error, extiende el límite de filas a 1 MB o divide las filas en varias filas:
- Instala y habilita la función 1MB Perm and Response Rows y el software de TTU actual. Para obtener más información, consulta Mensaje 9804 de la base de datos de Teradata.
- Divide el texto largo de la consulta en varias filas mediante las marcas
-Dteradata.metadata.max-text-lengthy-Dteradata-logs.max-sql-length.
El siguiente comando muestra cómo usar la marca -Dteradata.metadata.max-text-length para dividir el texto de consulta largo en varias filas de como máximo 10,000 caracteres cada una:
Bash
dwh-migration-dumper \ --connector teradata \ -Dteradata.metadata.max-text-length=10000
WindowsPowerShell
dwh-migration-dumper ` --connector teradata ` "-Dteradata.metadata.max-text-length=10000"
El siguiente comando muestra cómo usar la marca -Dteradata-logs.max-sql-length para dividir el texto de consulta largo en varias filas de como máximo 10,000 caracteres cada una:
Bash
dwh-migration-dumper \ --connector teradata-logs \ -Dteradata-logs.max-sql-length=10000
WindowsPowerShell
dwh-migration-dumper ` --connector teradata-logs ` "-Dteradata-logs.max-sql-length=10000"
Problema de conexión de Oracle
En casos comunes, como una contraseña o un nombre de host no válidos, la herramienta dwh-migration-dumper imprime un mensaje de error significativo que describe el problema raíz. Sin embargo, en algunos casos, el mensaje de error que devuelve el servidor de Oracle puede ser genérico y difícil de investigar.
Uno de estos problemas es IO Error: Got minus one from a read call. Este error indica que se estableció la conexión con el servidor de Oracle, pero el servidor no aceptó al cliente y cerró la conexión.
Por lo general, este problema se produce cuando el servidor solo acepta conexiones TCPS. De forma predeterminada, la herramienta dwh-migration-dumper usa el protocolo TCP. Para solucionar este problema, debes anular la URL de conexión JDBC de Oracle.
En lugar de proporcionar las marcas oracle-service, host y port, puedes resolver este problema proporcionando la marca url con el siguiente formato: jdbc:oracle:thin:@tcps://HOST_NAME:PORT/ORACLE_SERVICE.
Por lo general, el número de puerto TCPS que usa el servidor de Oracle es 2484.
En el siguiente ejemplo, se muestra cómo especificar la URL de conexión en el comando:
dwh-migration-dumper \
--connector oracle-stats \
--url "jdbc:oracle:thin:@tcps://HOST_NAME:PORT/ORACLE_SERVICE" \
--assessment \
--driver "JDBC_DRIVER_PATH" \
--user "USER" \
--password
Además de cambiar el protocolo de conexión a TCPS, es posible que debas proporcionar la configuración de SSL de trustStore que se requiere para verificar el certificado del servidor de Oracle. Si falta la configuración de SSL, se muestra un mensaje de error Unable to find valid certification path. Para resolver este problema, configura la variable de entorno JAVA_OPTS:
set JAVA_OPTS=-Djavax.net.ssl.trustStore="JKS_FILE_LOCATION" -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStorePassword="PASSWORD"
Según la configuración de tu servidor de Oracle, es posible que también debas proporcionar la configuración de keyStore. Para obtener más información sobre las opciones de configuración, consulta SSL With Oracle JDBC Driver.
¿Qué sigue?
- Obtén más información sobre la descripción general de la migración.
- Obtén información para ejecutar una evaluación de migración.
- Aprende a traducir consultas con el traductor interactivo de SQL.
- Obtén más información para migrar código con el traductor de SQL por lotes.
- Aprende a generar metadatos para la traducción y la evaluación.