0 / 0

Risoluzione dei problemi IBM DataStage

Ultimo aggiornamento: 06 mag 2025
Risoluzione dei problemi di IBM DataStage

Utilizzare queste soluzioni per risolvere i problemi che potrebbero verificarsi con IBM® DataStage®.

Come ottenere aiuto e supporto per DataStage

Se avete problemi o domande quando utilizzate DataStage, potete ottenere aiuto cercando informazioni o ponendo domande attraverso un forum. Puoi inoltre aprire un ticket di supporto.

Quando fai una domanda nei forum, contrassegna con una tag la tua domanda in modo che sia vista dai team di sviluppo DataStage .

Per domande sul servizio e istruzioni introduttive, utilizza il forum all'indirizzo https://stackoverflow.com/questions/tagged/datastage.

Se ancora non riesci a risolvere il problema, puoi aprire un ticket di supporto IBM. Per informazioni su come aprire un ticket di assistenza IBM o sui livelli di supporto, vedi "Contatta il supporto" all'indirizzo https://cloud.ibm.com/unifiedsupport/supportcenter.

Generale
Connettori
Runtime

Generale

I lavori hanno esito negativo perché le istruzioni SQL e Before SQL vengono eseguite in ordine non corretto

Sul connettore Teradata impostato sulla modalità di transazione ANSI, l'istruzione Before SQL può essere eseguita dopo l'istruzione SQL invece che prima, causando l'esito negativo del job.

Soluzione temporanea: aggiungere un'istruzione commit dopo ogni istruzione Before SQL.

Il comando mailx non viene eseguito nelle sottoroutine pre - lavoro e post - lavoro senza le informazioni sul server SMTP

Se il comando mailx viene utilizzato in una sottoroutine pre - lavoro o post - lavoro, è necessario fornire le informazioni sul server SMTP altrimenti l'esecuzione verrà inoltrata a sendmail e avrà esito negativo.

Le selezioni delle proprietà non vengono conservate se si deseleziona "Utilizza proprietà DataStage "

Se si immettono altre proprietà (ad esempio per tabelle o schemi) con l'opzione predefinita Utilizza proprietà DataStage selezionata e si deseleziona Utilizza proprietà DataStage, le proprietà non vengono conservate.

Soluzione temporanea: deselezionare le proprietà predefinite Utilizza DataStage se si desidera non utilizzarle prima di immettere altre proprietà. Altrimenti, riselezionare le proprietà.

La routine ha esito negativo quando la funzione CEL ds.getUserStatus viene eseguita su un flusso esterno

Quando la funzione CEL integrata ds.getUserStatus viene eseguita su una destinazione che non è all'interno della stessa pipeline, ha esito negativo e non può recuperare lo stato utente. Utilizza invece la CLI dsjob nel tuo nodo Esegui script Bash.

Per un esempio di riscrittura, si veda il comando dsjob utilizzato da DSGetUserStatus() in Esempi di sostituzione di routine in DataStage.

Il job non riesce quando si carica un file Excel di grandi dimensioni

Un job con un connettore che sta elaborando un file Excel di grandi dimensioni potrebbe non riuscire con questo errore:

"CDICO9999E: Internal error occurred: IO error: The Excel file is too large. (error code: DATA_IO_ERROR)" 

Provare ad incrementare la dimensione heap. L'opzione Proprietà dimensione heap si trova nella sezione Altre proprietà della scheda Stage del connettore.

I flussi esportati generano i file di connessione JSON che contengono password in testo semplice
I flussi scaricati potrebbero includere asset di connessione che dispongono di credenziali o altre informazioni sensibili. È possibile eseguire il seguente comando per modificare il comportamento dell'esportazione in modo che tutte le esportazioni future rimuovano le credenziali per default.

oc -n ${PROJECT_CPD_INST_OPERANDS} patch datastage datastage --patch '{"spec":{"migration_export_remove_secrets":true}}' --type=merge
Problemi durante la ricerca delle tabelle di database con colonne che contengono caratteri speciali

Potrebbero verificarsi dei problemi quando si utilizza il Browser degli asset per sfogliare le tabelle del database se la tabella selezionata contiene una colonna con caratteri speciali come ., $o #e si aggiunge tale tabella in un flusso DataStage . DataStage non supporta i nomi colonna che contengono caratteri speciali. DataStage flussi che fanno riferimento a colonne con nomi che includono questi caratteri speciali non funzioneranno.

Per risolvere questo problema, creare una vista sulla tabella del database e ridefinire il nome della colonna nella vista. Ad esempio:

create view view1 as select column1$ as column1, column2# as column2 ... from table

Quindi, quando si utilizza il browser Asset, individuare la vista e aggiungerla al flusso DataStage .

Inferenze non corrette assegnate a uno schema letto da Asset Browser

L'Asset Browser leggerà i primi 1000 record e dedurrà lo schema, come il nome della colonna, la lunghezza, il tipo di dati e il nullable, in base a questi primi 1000 record nei file in IBM Cloud Object Storage, Amazon S3, Google Cloud Storage, Azure File Storage, Azure Blob Storage, o il servizio Azure Data Lake. Ad esempio, il Browser asset potrebbe identificare una colonna come un numero intero in base a quanto rilevato nei primi 1000 record, tuttavia, i record successivi nel file potrebbero mostrare che questa colonna deve essere trattata come tipo di dati varchar . Allo stesso modo, il Browser asset potrebbe dedurre una colonna come varchar(20) anche se i record successivi mostrano che la colonna deve essere varchar(100).

Risoluzione:
  • Creare un profilo dei dati di origine per generare metadati migliori.
  • Modificare tutte le colonne in varchar(1024) e restringere gradualmente il tipo di dati.
Utilizzo di file sequenziali come origine
Per utilizzare i file sequenziali come origine, è necessario caricare i file in un bucket del progetto in una posizione specifica. Per determinare l'ubicazione del bucket del progetto:
  1. Trova l'istanza Cloud Object Storage del progetto.
  2. Nell'istanza del progetto, trova il bucket corrispondente al progetto corrente. Di solito, l'ubicazione è: <lowercase-project-name>-donotdelete-<random-string>

    Ad esempio: project2021mar01-donotdelete-pr-ifpkjcbk71s36j

    Quindi, caricare i file specificando DataStage/files/ nel campo Prefisso per l'oggetto .

Errore durante l'esecuzione dei job con un formato di file parquet
È possibile che si riceva il seguente errore quando si tenta di eseguire un lavoro con un formato di file parquet:
Error: CDICO9999E: Internal error occurred: Illegal 
state error: INTEGER(32,false) can only annotate INT32.
I tipi di dati numero intero a 32 bit senza segno (uint32) e numero intero a 64 bit senza segno (uint64) non sono supportati nel formato Parquet utilizzato da DataStage per tutti i connettori file.

Risoluzione: È necessario utilizzare i tipi di dati supportati.

Il pod di migrazione viene sfrattato per il superamento dei limiti di archiviazione effimeri
Durante l'importazione, l'utilizzo dello storage locale effimero da parte dei pod può superare il limite totale dei contenitori. Si potrebbe ricevere il seguente messaggio:

Status: Failed
Reason: Evicted
Message: Pod ephemeral local storage usage exceeds the total limit of containers 900Mi.
Soluzione temporanea: per evitare questo problema, devi aumentare il limite di memoria effimera a 4Gi dal valore predefinito 900Mi immettendo il seguente comando:

oc -n ${PROJECT_CPD_INST_OPERANDS} patch datastage datastage --type merge -p '{"spec": {"custom": {"resources":{"components":{"migration":{"limits":{"ephemeral":"4Gi"}}}}}}}'
Si verifica un errore durante l'aggiornamento della versione Cloud Pak for Data da 5.0.0 a 5.0.1

È possibile che si verifichi questo errore durante l'esecuzione dell'aggiornamento di Cloud Pak for Data da 5.0.0 a 5.0.1 L'aggiornamento non riesce nelle nuove attività di aggiornamento per le istanze remote.

Risoluzione: Quando il CR DataStage si alterna tra Failed e InProgress durante l'aggiornamento 5.0.1, procedere come segue:
  1. Accedere al cluster Red Hat® OpenShift Container Platform da oc e impostare il percorso del progetto predefinito dove è installato Cloud Pak for Data.
    oc project $PROJECT_CPD_INST_OPERANDS
  2. Verificare se le istanze di PXRruntime sono state aggiornate alla versione 5.0.1.
    oc get pxruntime
  3. Se il CR PXRruntime non è stato aggiornato alla versione 5.0.1, eseguire i seguenti comandi:
    
    echo "Adding installedVersion to DataStage CR"
    oc patch datastage datastage --type='json' -p='[{"op": "add", "path": "/spec/installedVersion", "value": "5.0.1" }]'
    while true; do echo "Waiting for DataStage CR to be in Completed state"; sleep 30; if [ $(oc get datastage datastage -o=jsonpath="{.status.dsStatus}") = "Completed" ]; then break; fi; done
    echo "Removing installedVersion from DataStage CR"
    oc patch datastage datastage --type='json' -p='[{"op": "remove", "path": "/spec/installedVersion"}]'
    while true; do echo "Waiting for DataStage CR to be in Completed state"; sleep 30; if [ $(oc get datastage datastage -o=jsonpath="{.status.dsStatus}") = "Completed" ]; then break; fi; done
I flussi che contengono lo stadio Transformer vanno in time out durante la compilazione

È possibile che si verifichi un timeout durante la compilazione dei flussi che contengono lo stadio trasformatore.

Valore predefinito della variabile d'ambiente " APT_COMPILEOPT:
-c -O -fPIC -Wno-deprecated -m64 -mtune=generic -mcmodel=small
Soluzione: Disattivare l'ottimizzazione in tempo di compilazione cambiando '-O in '-O0 nelle opzioni di compilazione della variabile d'ambiente 'APT_COMPILEOPT:
-c -O0 -fPIC -Wno-deprecated -m64 -mtune=generic -mcmodel=small

Connettori

ConnettoreNetezza : i record duplicati si verificano quando le letture partizionate sono abilitate

Quando la lettura partizionata è abilitata sul connettore Netezza in modalità di esecuzione parallela, è possibile che si verifichino record duplicati. Per evitare record duplicati, aggiungere segnaposto di partizione nell'SQL o impostare la modalità di esecuzione su sequenziale. Per aggiungere i segnaposto di partizione, aggiungere la stringa mod(datasliceid,[[node-count]])=[[node-number]], come nel seguente esempio.
SELECT * FROM table WHERE mod(datasliceid,[[node-count]])=[[node-number]]
Connettore MySQL : i lavori potrebbero avere esito negativo se si utilizza la modalità di scrittura "Aggiorna" per la destinazione senza una chiave primaria

Se si crea una tabella in un database MySQL senza specificare una chiave primaria nella colonna WHERE e si tenta di eseguire un job che utilizza tale tabella con la modalità di scrittura Aggiorna per la destinazione, il job potrebbe non riuscire.

Soluzione: specificare un nome chiave primaria nel campo Nomi colonna chiave . Se la tabella è grande e non ha una colonna primaria, è possibile creare una colonna separata con valori di incremento automatico da utilizzare come chiave primaria.

Connettore FTP: il percorso della directory home viene anteposto al percorso

Quando si esegue un lavoro che utilizza dati da un'origine dati FTP, la directory home o di login viene anteposto al percorso specificato. Questa azione si verifica indipendentemente se si specifica un percorso assoluto (con una barra iniziale) o un percorso relativo (senza una barra iniziale). Ad esempio, se si specifica la directory come /tmp/SampleData.txt, il percorso si risolve in /home/username/tmp/SampleData.txt.

Soluzione temporanea: modificare il Nome file nel connettore FTP. Specificare il percorso assoluto del file di origine o di destinazione.

I lavori non riescono con l'errore "Il connettore non è stato in grado di stabilire una connessione al database Db2 "

I lavori potrebbero non riuscire con l'errore "Il connettore non è stato in grado di stabilire una connessione al database Db2 ".

Soluzione temporanea: passare alle proprietà di connessione e impostare la proprietà Opzioni su connectTimeout=0.

Il job con i dati di origine da un connettore SAP OData non riesce

Se il tuo flusso include i dati di origine da SAP OData, il flusso potrebbe non riuscire se hai creato il flusso aggiungendo manualmente le colonne che non seguono la convenzione di denominazione SAP .

Soluzione temporanea: aggiornare il flusso aggiungendo o aggiungendo le colonne con il browser Asset o ridenominando le colonne in base alla convenzione di denominazione SAP . La convenzione di denominazione SAP segue la gerarchia di oggetti SAP con due caratteri di sottolineatura (__) come separatore. Ad esempio, se la colonna PurchaseOrder appartiene a Ordine d'acquistoNota, il nome della colonna deve essere specificato come PurchaseOrderNote__PurchaseOrder.

Impossibile eseguire SQL transazionale sui dati da Apache Hive versione 2.0 o precedente

Se i dati provengono da Apache Hive versione 2.0 o precedente e il flusso DataStage esegue le istruzioni UPDATE o DELETE, il lavoro potrebbe non riuscire. Assicurarsi che la tabella di destinazione sia stata creata in base ai requisiti delle transazioni Hive e che il server Apache Hive sia configurato per supportare le operazioni ACID.

La serie minima di parametri (configurati nel file hive-site.xml ) che è necessario abilitare per le tabelle ACID in Apache Hive è:

hive.support.concurrency = true
hive.enforce.bucketing = true (not required as of Hive 2.0)
hive.exec.dynamic.partition.mode = nonstrict
hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager

hive.compactor.initiator.on = true
hive.compactor.worker.threads = <a positive number>

Per ulteriori informazioni, consultare Hive Transactions.

IBM Db2 per DataStage connessione con certificato SSL non riuscita con errore "Codice di errore specifico del protocollo 414"

Se si utilizza un certificato SSL nella connessione IBM Db2 per DataStage e la connessione ha esito negativo con un errore "Codice di errore specifico del protocollo 414", utilizzare questa soluzione temporanea:

  1. Identificare il certificato root sul server Db2 . È possibile utilizzare questo comando per visualizzare la catena di certificati:
    openssl s_client -connect <hostname>:<port> -showcerts
  2. Verificare che il certificato abbia lo stesso oggetto e emittente.
  3. Nella pagina Crea connessione: IBM IBM Db2 per DataStage , immettere il certificato root nel campo Certificato SSL (arm) .
Errore nella parametrizzazione del campo delle credenziali per una connessione di flusso in IBM Cloud Object Storage

Quando la proprietà Metodo di autenticazione viene impostata sulle credenziali del servizio (frammento JSON completo), non parametrizzare il campo Credenziali del servizio . Se viene fornito un parametro per quel campo, il flusso non verrà compilato.

PostgreSQL in timeout su tabelle di grandi dimensioni

Il PostgreSQL connettore potrebbe non funzionare con un errore di timeout quando si utilizza una tabella di grandi dimensioni (oltre 100.000 righe) come sorgente. Per correggere questo errore, provare ad impostare un valore di timeout superiore per la variabile di ambiente APT_RECORD_TIMEOUT. Vedere Gestione delle variabili d'ambiente in DataStage.

Le modifiche allo schema che hanno origine nei dati del connettore HTTP possono causare il fallimento del lavoro

Quando si usa il connettore HTTP per scaricare un file e poi caricare lo stesso file in IBM Cloud Object Storage o in un database, se lo schema del file cambia nel tempo, il lavoro potrebbe fallire.

Soluzione temporanea: creare nuovamente la fase.

Non è possibile creare una connessione al database che utilizzi il certificato SSL

La versione OpenSSL 3.0.9 non consente di utilizzare cifrari deboli durante la generazione del certificato SSL. Quando l'attributo ValidateServerCertificate (VSC) è impostato su '0, la connessione tratta il certificato come non valido. Il valore deve essere impostato su " 1 per creare una connessione.

Soluzione: Generare un nuovo certificato SSL con cifratura forte utilizzando la versione OpenSSL 3.0.x
  1. Controllate i cifrari nel vostro certificato SSL con il seguente comando. Se il certificato utilizza l'algoritmo di firma " sha1WithRSAEncryption, è considerato un cifrario debole:
    openssl x509 -in cert.pem -text -noout
  2. Generare il certificato SSL con il seguente comando:
    openssl.exe pkcs12 -in certificate_name -export -out truststore_filename -nokeys -keypbe cryptographic_algorithm -certpbe cryptographic_algorithm -password pass:truststore_password -nomac
Snowflake connettore: I lavori falliscono con l'errore "java/lang/OutOfMemoryError"
Il log visualizza il seguente messaggio di errore:
java/lang/OutOfMemoryError", exception "Failed to create a thread: retVal -1073741830, errno 11"

Soluzione : Aumentare la dimensione dell'heap nella scheda Output o Input del connettore Snowflake .

Snowflake connettore: I lavori falliscono con l'errore "Fork failed: Risorsa temporaneamente non disponibile"
Il registro visualizza i seguenti messaggi di errore:
<SCLoadAudIdLd.sf_write__JOB_EXECUTION_LOG__Ins,1> Error: Unable to create iprofiler thread11/6/2024 06:13:03 WARNING IIS-DSEE-USBP-00002 <Sf_STG_VEH_ALFA,0> Error: Unable to create iprofiler thread
e
WARNING IIS-DSEE-USBP-00002 <sc_AFT_COST_CENTRE_CD.sf_write__AUTO_FINANCE_TYPE__Ins,1>
Type=Segmentation error vmState=0x00000000
WARNING IIS-DSEE-USBP-00002 <sc_AFT_COST_CENTRE_CD.sf_write__AUTO_FINANCE_TYPE__Ins,1> J9Generic_Signal_Number=00000018 Signal_Number=0000000b Error_Value=00000000 Signal_Code=00000001

Soluzione : Aumentare i limiti PID all'interno del cluster OpenShift. Impostare podsPIDLimit su 16,384, che è un valore massimo per i limiti PID. Per informazioni su come aumentare i limiti PID, vedere Red Hat Customer Portal.

Runtime

Problema di memoria esaurita per l'operatore DataStage

Quando più di 5 istanze di runtime PX vengono distribuite sul cluster, l'operatore potrebbe esaurire la memoria. Per risolvere questo problema, aggiornare il CSV per aumentare i limiti di memoria:

Recupera il CSV DataStage:

oc -n ${PROJECT_CPD_INST_OPERATORS} oc get csv | grep datastage
Modificare il CSV DataStage per aumentare la memoria dell'operatore da 1Gi a 2Gi:



oc -n ${PROJECT_CPD_INST_OPERATORS} patch csv <DataStage-CSV-name> --type='json' -p='[{"op": "replace", "path": "/spec/install/spec/deployments/0/spec/template/spec/containers/0/resources/limits/memory", "value": "2Gi" }]'
Lavori in coda quando i pod di calcolo non riescono ad avviarsi

Se i pod di calcolo dell'istanza runtime non si avviano, tutti i lavori verranno eseguiti sul pod px-runtime. I limiti delle risorse fanno sì che i lavori vengano messi in coda.

Risoluzione: Risolvere eventuali problemi che impediscono l'avvio dei pod di calcolo.

Accodamento processi

Quando si invia un lavoro, questo potrebbe non iniziare immediatamente. Invece, ottiene uno stato di coda. È il modo in cui il sistema gestisce le risorse e stabilisce le priorità di lavoro.

Perché il lavoro viene eseguito in coda?
Motivo Descrizione
Limiti delle risorse Il lavoro attende che le risorse necessarie (CPU, GPU, memoria) siano disponibili. Succede quando:
  • Altri lavori utilizzano tutta la capacità disponibile.
  • Il vostro lavoro richiede più risorse di quelle attualmente disponibili.
Limiti di concorrenza Alcuni sistemi impongono dei limiti al numero di lavori che possono essere eseguiti contemporaneamente. Il vostro lavoro viene messo in coda fino al termine di altri lavori.
Priorità e programmazione I lavori a bassa priorità possono essere messi in coda mentre quelli a priorità più alta vengono eseguiti per primi.
Manutenzione o tempi di inattività Il sistema può essere in fase di manutenzione o di aggiornamento, il che riduce la capacità disponibile o sospende l'esecuzione dei lavori.
Coda arretrata Un traffico elevato o un numero elevato di lavori inviati possono creare un arretrato. I lavori iniziano quando i lavori precedenti sono stati completati.

Risoluzione: DataStage Workload Manager (WLM) viene fornito con una configurazione predefinita che consente di eseguire 5 lavori contemporaneamente. Se si dispone di maggiori risorse, si dovrebbe scalare pxruntime su un'istanza più grande. Per ulteriori informazioni, vedere Personalizzazione delle configurazioni hardware per le istanze di servizio DataStage con la riga di comandoPersonalizzazione delle configurazioni hardware per le istanze di servizio con la riga di comando DataStage. Dopo aver modificato la configurazione della scala, è importante aggiornare il file di configurazione di WLM per consentire l'esecuzione di più lavori contemporaneamente. Pertanto, se è necessario eseguire altri lavori contemporanei, assicurarsi di regolare le impostazioni di RunJob nel file XML.

I lavori si bloccano, i lavori inesistenti vengono visualizzati in stato Avvio/Esecuzione
Quando i lavori in attesa sono in esecuzione, è possibile che si verifichi un problema nell'eliminarli dall'interfaccia utente. Un problema simile si può verificare con i progetti, che possono utilizzare risorse (ad esempio la memoria). Per ripulire questi processi, utilizzare uno dei seguenti comandi:
cpdctl asset delete --asset-id ASSET-ID --purge-on-delete=true`
cpdctl dsjob jobrunclean {{--project PROJECT | --project-id PROJID} | {--space SPACE | --space-id SPACEID}} {--name NAME | --id ID} [--run-id RUNID] [--dry-run] [--threads n] [--all-spaces] [--before YYYY-MM-DD:hh:mm:ss]
Nota: l' uso di questi comandi cancella tutti i lavori attivi in un progetto. Assicurati di interrompere l'esecuzione di nuovi lavori.