Cómo solucionar problemas de migración
En este documento, se te ayuda a solucionar problemas habituales 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 de SQL interactiva y por lotes, 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
INFORMATION_SCHEMA.JOBS vista.
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.
Errores de la herramienta dwh-migration-dumper
Para solucionar los errores y las advertencias en el resultado de la terminal de la herramienta dwh-migration-dumper que se produjeron durante la extracción de metadatos o registros de consulta, consulta Solución de problemas de generación de metadatos.
Errores de migración de Hive
En las siguientes secciones, se describen problemas habituales 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 consulta 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 contienen la cadena MigrationAssessmentLoggingHook.
Controla el error ClassNotFoundException
Este error ocurre cuando el proceso hive-server2 no puede ubicar com.google.cloud.bigquery.dwhassessment.hooks.MigrationAssessmentLoggingHook durante la compilación de la consulta.
Asegúrate de haber agregado el
archivo JAR de hook de registro a la carpeta auxlib en el
clúster de Hive o de haber especificado la ruta de acceso completa al archivo JAR
en la propiedad hive.aux.jars.path, por ejemplo,
file://AUXLIB_PATH/HiveMigrationAssessmentQueryLogsHooks_deploy.jar.
Si el error persiste, haz lo siguiente:
Verifica la ubicación del archivo JAR en Cloudera (CDP o CDH): En los entornos de Cloudera, es posible que las propiedades auxiliares del archivo JAR (
hive.aux.jars.path) no se carguen de manera confiable en el cargador de clases de compilación de consultas raíz. Para resolver este problema, copia el archivo JAR de hook de registro directamente en el directorio principal de la biblioteca de Hive en todos los hosts de HiveServer2, por ejemplo,/opt/cloudera/parcels/CDH/lib/hive/lib/.Verifica el alcance de la configuración: Si usas Cloudera Manager, asegúrate de colocar las propiedades de configuración del hook de registro (por ejemplo,
hive.exec.pre.hooks,hive.exec.post.hooks,hive.exec.failure.hooksydwhassessment.hook.base-directory) en el fragmento de configuración del motor de ejecución activo. Por ejemplo, si tu clúster usa la ejecución de Tez, agrega las propiedades XML a los campos de fragmento de configuración avanzada de Hive en Tez (válvula de seguridad) parahive-site.xmlo en la válvula de seguridad de Hive en todo el servicio, en lugar de en los fragmentos de configuración independientes de HiveServer2. Después de guardar los cambios, reinicia el servicio de Hive, incluidas las funciones de HiveServer2 y Hive Metastore.
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 comprueba si hay algo que debas corregir para solucionar el problema.
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 comprueba si hay algo que debas corregir para solucionar el problema.
Faltan algunos eventos de consulta
Este problema puede deberse a la 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 encuentras 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 encuentran con frecuencia cuando se usa el traductor de SQL interactivo.
Problemas de traducción de RelationNotFound o AttributeNotFound
Después de traducir una consulta con el
traductor de SQL interactivo,
es posible que encuentres una traducción fallida con el error RelationNotFound o
AttributeNotFound.
Para encontrar traducciones fallidas, ve a la página Detalles de la traducción en BigQuery en la Google Cloud consola de y abre la pestaña Mensajes de registro.
Para garantizar la traducción más precisa, ingresa 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 de Amazon Redshift select table1.field1, table2.field1 from table1, table2 where table1.id = table2.id;, debes ingresar las siguientes sentencias 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;
Corrige problemas de traducción con Gemini
Para corregir trabajos de traducción fallidos con los errores RelationNotFound o AttributeNotFound, también puedes usar Gemini para resolver estos problemas:
- En BigQuery en la Google Cloud consola de, ve a la página Detalles de la traducción y abre la pestaña Mensajes de registro.
- Haz clic en la consulta que tiene el mensaje
RelationNotFoundoAttributeNotFounden la columna Categoría. - Haz clic en Corrección sugerida.
- Haz clic en Aplicar.
- Para volver a traducir la consulta, haz clic en Traducir.
Traductor de SQL por lotes
En las siguientes secciones, se describen los errores que se encuentran con frecuencia 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 encuentres una traducción fallida con el RelationNotFound o
AttributeNotFound error.
Para encontrar traducciones fallidas, ve a la página Detalles de la traducción en BigQuery en la Google Cloud consola 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 este paso suele corregir muchos otros errores que se causan indirectamente por la falta de metadatos.
Si deseas obtener más información, consulta Genera metadatos para la traducción y la evaluación.
Corrige problemas de traducción con Gemini
Para corregir 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 consulta que tiene el mensaje
RelationNotFoundoAttributeNotFounden la columna Categoría. Para ir al archivo y a la línea que contienen el error en la pestaña Código, haz clic en el
mensaje de error.
En la columna Acción, haz clic en Corrección sugerida.
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 esta sección, se explican algunos problemas habituales y técnicas de solución de problemas para la herramienta dwh-migration-dumper.
Error de memoria insuficiente
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 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 comprueba si hay algo que debas corregir para que la consulta se ejecute correctamente. 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 dwh-migration-dumper, descarga el
SHA256SUMS.txt archivo
y ejecuta el siguiente comando:
Bash
sha256sum --check SHA256SUMS.txt
El resultado OK confirma la verificación correcta de la suma de comprobació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.
Windows PowerShell
(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 comprobació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
Teradata versión 15 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
Windows PowerShell
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
Windows PowerShell
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 muestra 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ó el cliente y cerró la conexión.
Por lo general, este problema ocurre 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 de JDBC de Oracle.
En lugar de proporcionar las marcas oracle-service, host y port, puedes
resolver este problema proporcionando la marca url en 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. Una configuración de SSL faltante genera 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 la migración.
- Obtén información para traducir consultas con el traductor de SQL interactivo.
- Obtén información para migrar código con el traductor de SQL por lotes.
- Obtén información para generar metadatos para la traducción y la evaluación.