Risolvere i problemi di migrazione

Questo documento ti aiuta a risolvere i problemi comuni durante la migrazione del data warehouse (come Teradata, Amazon Redshift, Oracle o Apache Hive) a BigQuery, inclusi i problemi relativi alla valutazione della migrazione, alla traduzione SQL interattiva e batch e alla generazione di metadati utilizzando lo strumento di estrazione da riga di comando dwh-migration-dumper.

Per esaminare i dettagli di esecuzione dei job, i codici di errore e l'utilizzo degli slot per le query e i job migrati, puoi anche eseguire query sulla visualizzazione INFORMATION_SCHEMA.JOBS.

Valutazione della migrazione

Le sezioni seguenti spiegano i problemi comuni e le tecniche di risoluzione dei problemi per la migrazione del data warehouse a BigQuery.

dwh-migration-dumper errori dello strumento

Per risolvere gli errori e gli avvisi nell'output del terminale dello strumento dwh-migration-dumper che si sono verificati durante l'estrazione dei log di query o dei metadati, consulta Risoluzione dei problemi relativi alla generazione dei metadati.

Errori di migrazione di Hive

Le sezioni seguenti descrivono i problemi comuni che potresti riscontrare quando pianifichi di eseguire la migrazione del data warehouse da Hive a BigQuery.

L'hook di logging di estrazione dei log delle query hadoop-migration-assessment scrive messaggi di log di debug nei log hive-server2. Se riscontri problemi, esamina i log di debug dell'hook di logging, che contengono la stringa MigrationAssessmentLoggingHook.

Gestire l'errore ClassNotFoundException

Questo errore potrebbe essere causato dal posizionamento errato del file JAR dell'hook di logging. Assicurati di aver aggiunto il file JAR alla cartella auxlib sul cluster Hive. In alternativa, puoi specificare il percorso completo al file JAR nella proprietà hive.aux.jars.path, ad esempio file://AUXLIB_PATH/HiveMigrationAssessmentQueryLogsHooks_deploy.jar.

Le sottocartelle non vengono visualizzate nella cartella configurata

Questo problema potrebbe essere causato da una configurazione errata o da problemi durante l'inizializzazione dell'hook di logging.

Cerca nei log di debug di hive-server2 i seguenti messaggi di hook di logging:

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

Esamina i dettagli del problema e verifica se devi correggere qualcosa per risolverlo.

I file non vengono visualizzati nella cartella

Questo problema potrebbe essere causato da problemi riscontrati durante l'elaborazione degli eventi o durante la scrittura in un file.

Cerca nei log di debug di hive-server2 i seguenti messaggi di hook di logging:

Failed to close writer for file
Got exception while processing event
Error writing record for query

Esamina i dettagli del problema e verifica se devi correggere qualcosa per risolverlo.

Alcuni eventi di query non vengono rilevati

Questo problema potrebbe essere causato da un overflow della coda del thread di hook di logging.

Cerca nei log di debug di hive-server2 il seguente messaggio del hook di logging:

Writer queue is full. Ignoring event

Se trovi questo messaggio, valuta la possibilità di aumentare il parametro dwhassessment.hook.queue.capacity.

Traduttore SQL interattivo

Le sezioni seguenti descrivono gli errori più comuni riscontrati durante l'utilizzo del traduttore SQL interattivo.

Problemi di traduzione di RelationNotFound o AttributeNotFound

Dopo aver tradotto una query utilizzando il traduttore SQL interattivo, potresti riscontrare un errore di traduzione con l'errore RelationNotFound o AttributeNotFound.

Puoi trovare le traduzioni non riuscite andando alla pagina Dettagli traduzione in BigQuery nella console Cloud de Confiance e aprendo la scheda Messaggi di log.

Per garantire la traduzione più accurata, puoi inserire le istruzioni del linguaggio di definizione dei dati (DDL) per qualsiasi tabella utilizzata in una query prima della query stessa. Ad esempio, se vuoi tradurre la query Amazon Redshift select table1.field1, table2.field1 from table1, table2 where table1.id = table2.id;, inserisci le seguenti istruzioni SQL nel traduttore SQL interattivo:

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;

Risolvere i problemi di traduzione con Gemini

Per correggere i job di traduzione non riusciti con gli errori RelationNotFound o AttributeNotFound, puoi anche utilizzare Gemini per risolvere questi problemi:

  1. In BigQuery nella console Cloud de Confiance , vai alla pagina Dettagli traduzione e apri la scheda Messaggi di log.
  2. Fai clic sulla query con il messaggio RelationNotFound o AttributeNotFound nella colonna Categoria.
  3. Fai clic su Correzione suggerita.
  4. Fai clic su Applica.
  5. Per tradurre di nuovo la query, fai clic su Traduci.

Traduttore SQL batch

Le sezioni seguenti descrivono gli errori più comuni riscontrati durante l'utilizzo del traduttore SQL batch.

Problemi di traduzione di RelationNotFound o AttributeNotFound

Dopo aver tradotto una query utilizzando il traduttore SQL batch, potresti riscontrare una traduzione non riuscita con l'errore RelationNotFound o AttributeNotFound.

Puoi trovare le traduzioni non riuscite andando alla pagina Dettagli traduzione in BigQuery nella console Cloud de Confiance e aprendo la scheda Messaggi di log.

La traduzione funziona meglio con DDL di metadati. Quando non è possibile trovare le definizioni degli oggetti SQL, il motore di traduzione genera problemi RelationNotFound o AttributeNotFound. Ti consigliamo di utilizzare lo strumento di estrazione dei metadati per generare pacchetti di metadati per assicurarti che siano presenti tutte le definizioni degli oggetti. L'aggiunta di metadati è il primo passaggio consigliato per risolvere la maggior parte degli errori di traduzione, perché questo passaggio spesso corregge molti altri errori causati indirettamente dalla mancanza di metadati.

Per saperne di più, consulta Genera metadati per la traduzione e la valutazione.

Risolvere i problemi di traduzione con Gemini

Per correggere i job di traduzione non riusciti con gli errori RelationNotFound o AttributeNotFound, puoi anche utilizzare Gemini per risolvere questi problemi:

  1. Vai alla pagina Dettagli traduzione e apri la scheda Messaggi di log.
  2. Fai clic sulla query con il messaggio RelationNotFound o AttributeNotFound nella colonna Categoria.
  3. Per andare al file e alla riga contenenti l'errore nella scheda Codice, fai clic su

    messaggio di errore.

  4. Nella colonna Azione, fai clic su Correzione suggerita.

  5. Seleziona una delle seguenti opzioni, Applica o Applica ed esegui di nuovo:

    • Per copiare il file dello schema generato dalla directory di output alla directory di input, fai clic su Applica.
    • Per copiare il file dello schema generato dalla directory di output alla directory di input e aprire una finestra di ripetizione, fai clic su Applica ed esegui di nuovo.

Genera metadati per la traduzione e la valutazione

Le sezioni seguenti spiegano alcuni problemi comuni e tecniche di risoluzione dei problemi per lo strumento dwh-migration-dumper.

Errore di memoria insufficiente

L'errore java.lang.OutOfMemoryError nell'output del terminale dello strumento dwh-migration-dumper è spesso correlato a una memoria insufficiente per l'elaborazione dei dati recuperati. Per risolvere questo problema, aumenta la memoria disponibile o riduci il numero di thread di elaborazione.

Puoi aumentare la memoria massima esportando la variabile di ambiente JAVA_OPTS:

Linux

export JAVA_OPTS="-Xmx4G"

Windows

set JAVA_OPTS="-Xmx4G"

Puoi ridurre il numero di thread di elaborazione (il valore predefinito è 32) includendo il valore del flag --thread-pool-size. Questa opzione è supportata solo per i connettori hiveql e redshift*:

dwh-migration-dumper --thread-pool-size=1

Gestione di un errore WARN...Task failed

A volte potresti visualizzare un errore WARN [main] o.c.a.d.MetadataDumper [MetadataDumper.java:107] Task failed: … nell'output del terminale dello strumento dwh-migration-dumper. Lo strumento di estrazione invia più query al sistema di origine e l'output di ogni query viene scritto nel proprio file. La visualizzazione di questo problema indica che una di queste query non è andata a buon fine. Tuttavia, l'errore di una query non impedisce l'esecuzione delle altre query. Se vedi più di un paio di errori WARN, esamina i dettagli del problema e verifica se devi correggere qualcosa per eseguire correttamente la query. Ad esempio, se l'utente del database che hai specificato quando hai eseguito lo strumento di estrazione non dispone delle autorizzazioni per leggere tutti i metadati, riprova con un utente con le autorizzazioni corrette.

File ZIP danneggiato

Per convalidare il file ZIP dello strumento dwh-migration-dumper, scarica il file SHA256SUMS.txt ed esegui questo comando:

Bash

sha256sum --check SHA256SUMS.txt

Il risultato OK conferma che la verifica del checksum è andata a buon fine. Qualsiasi altro messaggio indica un errore di verifica:

  • FAILED: computed checksum did NOT match: il file ZIP è danneggiato e deve essere scaricato di nuovo.
  • FAILED: listed file could not be read: non è possibile trovare la versione del file ZIP. Scarica i file ZIP e di checksum dalla stessa versione e inseriscili nella stessa directory.

Windows PowerShell

(Get-FileHash RELEASE_ZIP_FILENAME).Hash -eq ((Get-Content SHA256SUMS.txt) -Split " ")[0]

Sostituisci RELEASE_ZIP_FILENAME con il nome del file ZIP scaricato della release dello strumento di estrazione da riga di comando dwh-migration-dumper, ad esempio dwh-migration-tools-v1.0.52.zip.

Il risultato True conferma che la verifica del checksum è andata a buon fine.

Il risultato False indica un errore di verifica. Scarica i file ZIP e di checksum dalla stessa versione di release e inseriscili nella stessa directory.

L'estrazione dei log delle query Teradata è lenta

Per migliorare il rendimento delle tabelle di unione specificate dai flag -Dteradata-logs.query-logs-table e -Dteradata-logs.sql-logs-table, puoi includere una colonna aggiuntiva di tipo DATE nella condizione JOIN. Questa colonna deve essere definita in entrambe le tabelle e deve far parte dell'indice primario partizionato. Per includere questa colonna, utilizza il flag -Dteradata-logs.log-date-column.

L'esempio seguente mostra come utilizzare il flag -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

Windows PowerShell

dwh-migration-dumper `
  "-Dteradata-logs.query-logs-table=historicdb.ArchivedQryLogV" `
  "-Dteradata-logs.sql-logs-table=historicdb.ArchivedDBQLSqlTbl" `
  "-Dteradata-logs.log-date-column=ArchiveLogDate"

Limite di dimensioni delle righe Teradata superato

Teradata versione 15 ha un limite di 64 kB per le dimensioni delle righe. Se il limite viene superato, lo strumento di estrazione non va a buon fine e viene visualizzato il seguente messaggio:

[Error 9804] [SQLState HY000] Response Row size or Constant Row size overflow

Per risolvere questo errore, aumenta il limite di righe a 1 MB o dividi le righe in più righe:

  • Installa e attiva la funzionalità 1 MB Perm and Response Rows e il software TTU corrente. Per ulteriori informazioni, consulta Teradata Database Message 9804.
  • Suddividi il testo della query lunga in più righe utilizzando i flag -Dteradata.metadata.max-text-length e -Dteradata-logs.max-sql-length.

Il comando seguente mostra come utilizzare il flag -Dteradata.metadata.max-text-length per dividere il testo di una query lunga in più righe di massimo 10.000 caratteri ciascuna:

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"

Il seguente comando mostra come utilizzare il flag -Dteradata-logs.max-sql-length per dividere il testo di una query lunga in più righe di massimo 10.000 caratteri ciascuna:

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 di connessione a Oracle

In casi comuni come una password o un nome host non validi, lo strumento dwh-migration-dumper stampa un messaggio di errore significativo che descrive il problema principale. Tuttavia, in alcuni casi, il messaggio di errore restituito dal server Oracle potrebbe essere generico e difficile da analizzare.

Uno di questi problemi è IO Error: Got minus one from a read call. Questo errore indica che la connessione al server Oracle è stata stabilita, ma il server non ha accettato il client e ha chiuso la connessione. Questo problema si verifica in genere quando il server accetta solo connessioni TCPS. Per impostazione predefinita, lo strumento dwh-migration-dumper utilizza il protocollo TCP. Per risolvere il problema, devi ignorare l'URL di connessione JDBC di Oracle.

Anziché fornire i flag oracle-service, host e port, puoi risolvere il problema fornendo il flag url nel seguente formato: jdbc:oracle:thin:@tcps://HOST_NAME:PORT/ORACLE_SERVICE. In genere, il numero di porta TCPS utilizzato dal server Oracle è 2484.

Il seguente esempio mostra come specificare l'URL di connessione nel 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

Oltre a modificare il protocollo di connessione in TCPS, potrebbe essere necessario fornire la configurazione SSL trustStore necessaria per verificare il certificato server Oracle. Una configurazione SSL mancante genera un messaggio di errore Unable to find valid certification path. Per risolvere questo problema, imposta la variabile di ambiente JAVA_OPTS:

set JAVA_OPTS=-Djavax.net.ssl.trustStore="JKS_FILE_LOCATION" -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStorePassword="PASSWORD"

A seconda della configurazione del server Oracle, potresti anche dover fornire la configurazione keyStore. Per ulteriori informazioni sulle opzioni di configurazione, consulta SSL con il driver JDBC Oracle.

Passaggi successivi