Resolução de problemas do IBM DataStage .

Use essas soluções para ajudar a resolver problemas que você pode encontrar com o IBM® DataStage®

Obtendo ajuda e suporte para DataStage

Se tiver problemas ou dúvidas ao usar o DataStage, você pode obter ajuda pesquisando informações ou fazendo perguntas em um fórum. Também é possível abrir um chamado de suporte.

Ao fazer uma questão nos fóruns, identifique-a para que seja vista pelas equipes de desenvolvimento do DataStage .

Para perguntas sobre o serviço e instruções de introdução, use o fórum em https://stackoverflow.com/questions/tagged/datastage.

Se você ainda não puder resolver o problema, será possível abrir um chamado de suporte IBM. Para obter informações sobre como abrir um chamado de suporte IBM ou sobre níveis de suporte, consulte "Contact support" em https://cloud.ibm.com/unifiedsupport/supportcenter.

Geral
Conectores
Tempo de execução

Geral

Tarefas falham porque as instruções SQL e Before SQL são executadas em ordem incorreta

No conector Teradata configurado para o modo de transação ANSI, a instrução SQL Antes pode ser executada após a instrução SQL em vez de antes, causando a falha da tarefa.

Solução alternativa: inclua uma instrução de confirmação após cada instrução SQL anterior.

O comando mailx falha ao ser executado nas sub-rotinas antes e após a tarefa sem informações do servidor SMTP

Se o comando mailx for usado em uma sub-rotina antes ou após a tarefa, você deverá fornecer as informações do servidor SMTP ou ele encaminhará a execução para sendmail e falhará.

Seleções de propriedades não preservadas se você cancelar a seleção de "Usar propriedades do DataStage "

Se você inserir outras propriedades (por exemplo, para tabelas ou esquemas) com a opção padrão Usar propriedades do DataStage selecionada e, em seguida, desmarcar Usar propriedades do DataStage, as propriedades não serão preservadas.

Solução alternativa: cancele a seleção das propriedades padrão Usar DataStage se você pretende não usá-las antes de inserir outras propriedades... Caso contrário, selecione novamente as propriedades..

A rotina falha quando a função CEL ds.getUserStatus é executada em um fluxo externo

Quando a função CEL integrada ds.getUserStatus é executada em um destino que não está no mesmo pipeline, ela falha e não pode recuperar o status do usuário. Em vez disso, use a CLI do dsjob em seu nó de script Executar Bash.

A tarefa falha ao carregar um arquivo Excel grande

Uma tarefa com um conector que está processando um arquivo Excel grande pode falhar com este erro:

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

Tente aumentar o tamanho de heap.. A opção de propriedades de tamanho de heap está na seção Outras propriedades da guia Estágio do conector

Os fluxos exportados geram arquivos de conexão JSON que contêm senhas de texto simples
Os fluxos transferidos por download podem incluir ativos de conexão que possuem credenciais ou outras informações confidenciais É possível executar o comando a seguir para mudar o comportamento de exportação para que todas as exportações futuras removam as credenciais por padrão

oc -n ${PROJECT_CPD_INST_OPERANDS} patch datastage datastage --patch '{"spec":{"migration_export_remove_secrets":true}}' --type=merge
Perguntas sobre navegação das tabelas de banco de dados com colunas que contêm caracteres especiais

Você pode ter problemas ao usar o Navegador de Ativos para navegar pelas tabelas de banco de dados se a tabela selecionada contiver uma coluna com caracteres especiais como ., $ou #e incluir essa tabela em um fluxo do DataStage . O DataStage não suporta nomes de coluna que contenham caracteres especiais. DataStage fluxos que fazem referência a colunas com nomes que incluem esses caracteres especiais não funcionarão.

Para contornar esse problema, crie uma visualização por meio da tabela de banco de dados e redefina o nome da coluna na visualização. Por exemplo:

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

Em seguida, ao usar o Asset Browser, localize a visualização e inclua-a no fluxo do DataStage.

Inferências incorretas designadas a um esquema lido pelo Asset Browser

O Asset Browser irá ler os primeiros 1.000 registros e inferir o esquema, como nome da coluna, comprimento, tipo de dados e anulável, com base nestes primeiros 1.000 registros nos arquivos no IBM Cloud Object Storage, Amazon S3, Google Cloud Storage, Azure File Storage, Azure Blob Storage ou o serviço Azure Data Lake. Por exemplo, o Asset Browser pode identificar uma coluna como um inteiro com base no que é detectado nos primeiros 1000 registros, no entanto, registros posteriores no arquivo podem mostrar que esta coluna deve ser tratada como tipo de dados varchar . Da mesma forma, o Asset Browser pode inferir uma coluna como varchar(20), mesmo que os registros posteriores mostrem que a coluna deve ser varchar(100).

Solução alternativa:
  • Faça o perfil dos dados de origem para gerar melhores metadados.
  • Mude todas as colunas para serem varchar(1024) e limite gradualmente o tipo de dados.
Usando arquivos sequenciais como uma origem
Para usar arquivos sequenciais como uma origem, deve-se carregar arquivos em um depósito de projeto em um local específico. Para determinar o local do depósito do projeto:
  1. Localize a instância do projeto Cloud Object Storage.
  2. Na instância do projeto, localize o depósito correspondente ao projeto atual. O local geralmente é: <lowercase-project-name>-donotdelete-<random-string>

    Por exemplo: project2021mar01-donotdelete-pr-ifpkjcbk71s36j

    Em seguida, faça upload dos arquivos especificando DataStage/files/ no campo Prefixo para o objeto.

Erro na execução de tarefas com um formato de arquivo parquet
Você pode receber o seguinte erro quando tentar executar uma tarefa com um formato de arquivo parquet:
Error: CDICO9999E: Internal error occurred: Illegal 
state error: INTEGER(32,false) can only annotate INT32.
Os tipos de dados de número inteiro não assinado de 32 bits (uint32) e de número inteiro não assinado de 64 bits (uint64) não são suportados no formato Parquet que o DataStage está usando para todos os conectores de arquivo.

Correção: Você deve usar tipos de dados compatíveis.

O pod de migração sendo despejado por exceder seus limites de armazenamento efêmeros
Durante a importação, o uso do pod do armazenamento local efêmero pode exceder o limite total de contêineres. Você pode receber a mensagem a seguir:

Status: Failed
Reason: Evicted
Message: Pod ephemeral local storage usage exceeds the total limit of containers 900Mi.
Solução alternativa: para evitar esse problema, é necessário aumentar o limite de armazenamento efêmero para 4Gi do padrão de 900Mi executando o comando a seguir:

oc -n ${PROJECT_CPD_INST_OPERANDS} patch datastage datastage --type merge -p '{"spec": {"custom": {"resources":{"components":{"migration":{"limits":{"ephemeral":"4Gi"}}}}}}}'
Ocorre um erro durante a atualização da versão do Cloud Pak for Data de 5.0.0 para 5.0.1

Você pode enfrentar esse erro ao executar a atualização do Cloud Pak for Data de 5.0.0 para 5.0.1 A atualização falha em novas tarefas de atualização para as instâncias remotas.

Correção: Quando o DataStage CR estiver alternando entre Failed (Falha) e InProgress durante a atualização 5.0.1, siga as etapas a seguir:
  1. Faça login no Red Hat® OpenShift Container Platform cluster por oc e defina o caminho padrão do projeto para onde o Cloud Pak for Data está instalado.
    oc project $PROJECT_CPD_INST_OPERANDS
  2. Verifique se as instâncias do PXRruntime foram atualizadas com êxito para a versão 5.0.1.
    oc get pxruntime
  3. Se o PXRruntime CR não tiver sido atualizado com êxito para a versão 5.0.1, execute os seguintes comandos:
    
    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
Os fluxos que contêm o estágio Transformer expiram durante a compilação

Pode ocorrer um tempo limite durante a compilação de fluxos que contêm o estágio do transformador.

Valor padrão da variável de ambiente ' APT_COMPILEOPT:
-c -O -fPIC -Wno-deprecated -m64 -mtune=generic -mcmodel=small
Solução alternativa: Desative a otimização do tempo de compilação alterando " -O para " -O0 nas opções de compilação na variável de ambiente " APT_COMPILEOPT:
-c -O0 -fPIC -Wno-deprecated -m64 -mtune=generic -mcmodel=small
O uso do armazenamento local efêmero excede o limite total de um contêiner

Exceder o armazenamento local efêmero pode causar o encerramento inesperado de um pod de computação e a falha de vários trabalhos.

Solução alternativa: Verifique o uso do armazenamento efêmero com os seguintes comandos:
$ oc get nodes                                                                                         
NAME                                   STATUS   ROLES                  AGE    VERSION
master0.tahoetest882.cp.fyre.ibm.com   Ready    control-plane,master   220d   v1.28.15+ff493be
master1.tahoetest882.cp.fyre.ibm.com   Ready    control-plane,master   220d   v1.28.15+ff493be
master2.tahoetest882.cp.fyre.ibm.com   Ready    control-plane,master   220d   v1.28.15+ff493be
worker0.tahoetest882.cp.fyre.ibm.com   Ready    worker                 219d   v1.28.15+ff493be
worker1.tahoetest882.cp.fyre.ibm.com   Ready    worker                 219d   v1.28.15+ff493be
worker2.tahoetest882.cp.fyre.ibm.com   Ready    worker                 219d   v1.28.15+ff493be
worker3.tahoetest882.cp.fyre.ibm.com   Ready    worker                 219d   v1.28.15+ff493be
worker4.tahoetest882.cp.fyre.ibm.com   Ready    worker                 219d   v1.28.15+ff493be
$ oc get --raw "/api/v1/nodes/worker0.tahoetest882.cp.fyre.ibm.com/proxy/stats/summary"
... 
  "ephemeral-storage": {
    "time": "2025-03-06T21:48:21Z",
    "availableBytes": 71087955968,
    "capacityBytes": 267830407168,
    "usedBytes": 408403968,
    "inodesFree": 125135426,
    "inodes": 130809280,
    "inodesUsed": 3288
   },
Para obter mais informações sobre armazenamento efêmero, consulte Modificação do limite de armazenamento efêmero.

Conectores

Conector Netezza : Registros duplicados ocorrem quando leituras particionadas são ativadas

Quando leituras particionadas são ativadas no conector Netezza no modo de execução paralela, podem ocorrer registros duplicados. Para evitar registros duplicados, inclua itens temporários de partição na SQL ou configure o modo de execução para sequencial... Para incluir itens temporários de partição, inclua a sequência mod(datasliceid,[[node-count]])=[[node-number]], como no exemplo a seguir:
SELECT * FROM table WHERE mod(datasliceid,[[node-count]])=[[node-number]]
Conector MySQL : As tarefas poderão falhar se você usar o modo de gravação "Atualizar" para o destino sem uma chave primária

Se você criar uma tabela em um banco de dados MySQL sem especificar uma chave primária na coluna WHERE e, em seguida, tentar executar uma tarefa que usa essa tabela com o modo de gravação Atualizar para o destino, a tarefa poderá falhar.

Solução: Especifique um nome de chave primária no campo Nomes de Colunas-chave . Se a tabela for grande e não tiver uma coluna primária, será possível criar uma coluna separada com valores de incremento automático a serem usados como a chave primária

Conector FTP: O caminho do diretório inicial é pré-anexado ao caminho

Quando você executa uma tarefa que usa dados de uma origem de dados FTP, o diretório inicial ou de login é pré-anexado ao caminho especificado. Essa ação acontece independentemente se você especificar um caminho absoluto (com uma barra inicial) ou um caminho relativo (sem uma barra inicial). Por exemplo, se você especificar o diretório como /tmp/SampleData.txt, o caminho será resolvido para /home/username/tmp/SampleData.txt

Solução alternativa: edite o Nome do arquivo no conector FTP. Especifique o caminho absoluto para o arquivo de origem ou de origem.

As tarefas falham com o erro "O conector não pôde estabelecer uma conexão com o banco de dados Db2 "

As tarefas podem falhar com o erro "O conector não pôde estabelecer uma conexão com o banco de dados Db2 ".

Solução alternativa: acesse as propriedades da conexão e configure a propriedade Opções como connectTimeout=0.

A tarefa com dados de origem de um conector SAP OData falha

Se seu fluxo incluir dados de origem de SAP OData, o fluxo poderá falhar se você criou o fluxo incluindo manualmente colunas que não seguem a convenção de nomenclatura SAP .

Solução alternativa: atualize o fluxo ou inclua as colunas com o navegador Ativo ou renomeie as colunas de acordo com a convenção de nomenclatura SAP . A convenção de nomenclatura SAP segue a hierarquia de objetos SAP com dois caracteres de sublinhado (__) como um separador. Por exemplo, se a coluna PurchaseOrder pertencer a PurchaseOrderNote, o nome da coluna deverá ser especificado como PurchaseOrderNote__PurchaseOrder.

Não é possível executar SQL transacional em dados do Apache Hive versão 2.0 ou anterior

Se seus dados forem do Apache Hive versão 2.0 ou anterior e seu fluxo do DataStage executar instruções UPDATE ou DELETE, a tarefa poderá falhar. Certifique-se de que a tabela de destino tenha sido criada de acordo com os requisitos de transações do Hive e que o servidor Apache Hive esteja configurado para suportar operações ACID.

O conjunto mínimo de parâmetros (configurado no arquivo hive-site.xml ) que deve ser ativado para tabelas ACID no 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>

Para obter mais informações, consulte Hive Transactions.

IBM Db2 para DataStage A conexão com o certificado SSL falha com o erro "Código de erro específico do protocolo 414"

Se você usar um certificado SSL na conexão do IBM Db2 for DataStage e a conexão falhar com um erro "Código de erro específico do protocolo 414", use esta solução alternativa:

  1. Identificar o certificado raiz no servidor Db2 . É possível usar este comando para visualizar a cadeia de certificados:
    openssl s_client -connect <hostname>:<port> -showcerts
  2. Assegure-se de que o certificado tenha o mesmo assunto e emissor.
  3. Na página Criar conexão: IBM IBM Db2 for DataStage , insira o certificado raiz no campo Certificado SSL (arm) .
Erro ao parametrizar o campo de credencial para uma conexão de fluxo no IBM Cloud Object Storage

Quando a propriedade Método de autenticação for configurada como Credenciais de serviço (fragmento JSON completo), não parametrize o campo Credenciais de serviço Se for fornecido um parâmetro para esse campo, o fluxo não será compilado.

O conector PostgreSQL atinge o tempo limite em tabelas grandes

O conector PostgreSQL pode falhar com um erro de tempo limite quando uma tabela grande (mais de 100.000 linhas) é usada como fonte. Para corrigir esse erro, tente configurar um valor de tempo limite mais alto para a variável de ambiente APT_RECORD_TIMEOUT. Veja .

As alterações de esquema originadas nos dados do conector HTTP podem causar falha no trabalho

Quando você usa o conector HTTP para fazer download de um arquivo e, em seguida, fazer upload do mesmo arquivo no IBM Cloud Object Storage ou em um banco de dados, se o esquema do arquivo mudar com o tempo, o trabalho poderá falhar.

Workaround: Re-criar o estágio.

Não é possível criar uma conexão de banco de dados bem-sucedida que use o certificado SSL

A versão OpenSSL 3.0.9 não permite o uso de cifras fracas ao gerar o certificado SSL. Quando o atributo ValidateServerCertificate (VSC) é definido como ' 0, a conexão trata o certificado como inválido. O valor deve ser definido como " 1 para criar uma conexão.

Solução alternativa: Gere um novo certificado SSL que tenha cifras fortes usando a versão OpenSSL 3.0.x.
  1. Verifique as cifras em seu certificado SSL com o seguinte comando. Se o certificado usar o algoritmo de assinatura " sha1WithRSAEncryption, ele será considerado uma cifra fraca:
    openssl x509 -in cert.pem -text -noout
  2. Gere o certificado SSL com o seguinte comando:
    openssl.exe pkcs12 -in certificate_name -export -out truststore_filename -nokeys -keypbe cryptographic_algorithm -certpbe cryptographic_algorithm -password pass:truststore_password -nomac
Snowflake conector: Os trabalhos estão falhando com o erro "java/lang/OutOfMemoryError"
O registro exibe a seguinte mensagem de erro:
java/lang/OutOfMemoryError", exception "Failed to create a thread: retVal -1073741830, errno 11"

Solução alternativa : Aumente o tamanho do heap na guia Saída ou Entrada do seu conector Snowflake .

Snowflake conector: Os trabalhos estão falhando com o erro "Fork failed: Recurso temporariamente indisponível"
O log exibe as mensagens de erro a seguir:
<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

Solução alternativa : Aumente os limites de PID dentro do cluster OpenShift. Defina podsPIDLimit como 16,384, que é um valor máximo para os limites do PID. Para obter informações sobre como aumentar os limites de PID, consulte Red Hat Customer Portal.

Tempo de execução

Problema de falta de memória para o operador DataStage

Quando mais de 5 instâncias de tempo de execução PX são implementadas no cluster, o operador pode ficar sem memória. Para resolver este problema, atualize o CSV para aumentar os limites de memória:

Recupere o DataStage CSV:

oc -n ${PROJECT_CPD_INST_OPERATORS} oc get csv | grep datastage
Corrija o DataStage CSV para aumentar a memória do operador de 1Gi para 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" }]'
Fila de trabalhos quando os pods de computação não conseguem iniciar

Se os pods de computação da instância de tempo de execução não forem iniciados, todos os trabalhos serão executados no pod px-runtime. Os limites de recursos fazem com que os trabalhos fiquem na fila.

Solução de problemas: Corrija todos os problemas que estão impedindo a inicialização dos pods de computação.

Os trabalhos ficam presos, trabalhos inexistentes são exibidos no estado Iniciando/Executando
Quando seus trabalhos obsoletos estão em execução, você pode ter problemas para excluí-los da interface do usuário. Você pode enfrentar um problema semelhante com os projetos porque eles podem usar recursos (por exemplo, memória). Para limpar esses processos, use um dos seguintes comandos:
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]
Observação: O uso desses comandos limpa todos os trabalhos ativos em um projeto. Certifique-se de interromper a execução de novos trabalhos.