0 / 0

IBM DataStage のトラブルシューティング

最終更新: 2025年5月06日
IBM DataStage のトラブルシューティング

IBM® DataStage®で発生する可能性がある問題を解決するには、以下の解決策を使用します。

DataStage のヘルプおよびサポートの利用

DataStageを使用する際に問題や質問がある場合は、情報を検索したり、フォーラムで質問することで助けを得ることができます。 また、サポート・チケットを開くことができます。

フォーラムで質問する場合は、 DataStage 開発チームの目に触れるように、質問にタグを付けます。

サービスおよび開始手順についての質問は、 https://stackoverflow.com/questions/tagged/datastageにあるフォーラムを使用してください。

それでも問題を解決できない場合は、IBM サポート・チケットを開くことができます。 IBM サポート・チケットのオープンやサポート・レベルについては、「サポート窓口」( https://cloud.ibm.com/unifiedsupport/supportcenter) を参照してください。

一般
コネクター
ランタイム

一般

SQL ステートメントと BEFORE SQL ステートメントの実行順序が正しくないため、ジョブが失敗する

ANSI トランザクション・モードに設定された Teradata コネクターでは、BEFORE SQL ステートメントが以前ではなく SQL ステートメントの後で実行され、ジョブが失敗する可能性があります。

回避策: 各 BEFORE SQL ステートメントの後にコミット・ステートメントを追加します。

mailx コマンドは、SMTP サーバー情報なしでジョブ前サブルーチンおよびジョブ後サブルーチンで実行できません。

mailx コマンドがジョブ前処理サブルーチンまたはジョブ後処理サブルーチンで使用される場合は、SMTP サーバー情報を指定する必要があります。指定しないと、SMTP サーバーは sendmail に実行を転送し、失敗します。

DataStage プロパティーの使用」を選択解除すると、プロパティーの選択は保持されません。

デフォルトの 「 DataStage プロパティーを使用」 オプションを選択して他のプロパティー (表やスキーマなど) を入力し、 「 DataStage プロパティーを使用」を選択解除した場合、プロパティーは保持されません。

回避策: 他のプロパティーを入力する前に使用しない場合は、デフォルトの 「 DataStage プロパティーの使用」 を選択解除します。 それ以外の場合は、プロパティーを再選択します。

外部フローで CEL 関数 ds.getUserStatus を実行するとルーチンが失敗する

同じパイプライン内にないターゲットに対して組み込み CEL 関数 ds.getUserStatus を実行すると、その関数は失敗し、ユーザー状況を取得できません。 代わりに、「Bash の実行」スクリプト・ノードで dsjob CLI を使用してください。

これをどのように書き換えるかの例については、 DataStage のルーチンの置き換え例の DSGetUserStatus() で使われている dsjob コマンドを参照のこと。

大きい Excel ファイルをロードするとジョブが失敗する

大規模な Excel ファイルを処理するコネクターを使用するジョブは、次のエラーで失敗する可能性があります。

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

ヒープ・サイズを増やしてみてください。 「ヒープ・サイズ・プロパティー」オプションは、コネクターの 「ステージ」 タブの 「その他のプロパティー」 セクションにあります。

エクスポートされたフローは、プレーン・テキスト・パスワードを含む JSON 接続ファイルを生成します。
ダウンロードされたフローには、資格情報またはその他の機密情報を持つ接続資産が含まれている場合があります。 以下のコマンドを実行して、エクスポートの動作を変更し、今後のすべてのエクスポートで資格情報がデフォルトで削除されるようにすることができます。

oc -n ${PROJECT_CPD_INST_OPERANDS} patch datastage datastage --patch '{"spec":{"migration_export_remove_secrets":true}}' --type=merge
特殊文字を含む列を使用してデータベース表をブラウズする際の問題

選択した表に .$#などの特殊文字を含む列が含まれていて、その表を DataStage フローに追加すると、資産ブラウザーを使用してデータベース表を参照するときに問題が発生する可能性があります。 DataStage は、特殊文字を含む列名をサポートしていません。 これらの特殊文字を含む名前の列を参照する DataStage フローは機能しません。

この問題を回避するには、データベース表に対してビューを作成し、ビューで列名を再定義します。 次に例を示します。

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

次に、アセット・ブラウザーを使用するときに、ビューを見つけてDataStageフローに追加します。

資産ブラウザーによって読み取られたスキーマに正しくない推論が割り当てられました

資産ブラウザーは、最初の1000個のレコードを読み取り、IBM Cloud Object Storage、Amazon S3、Google Cloud Storage、Azure File Storage、Azure Blob Storage、または、Azure Data Lakeサービスのファイル内のこれらの最初の1000個のレコードに基づいて、列名、長さ、データ・タイプ、NULL可能などのスキーマを推測します。 例えば、資産ブラウザーでは、最初の 1000 件のレコードで検出された内容に基づいて列を整数として識別できますが、ファイル内の後続のレコードでは、この列を varchar データ・タイプとして扱う必要があることが示される場合があります。 同様に、資産ブラウザーは、後のレコードで列がvarchar(100)でなければならないことが示されている場合でも、列をvarchar(20)と推測することがあります。

回避策:
  • より良いメタデータを生成するためにソース・データをプロファイルする。
  • すべての列を varchar(1024) に変更し、徐々にデータ・タイプを絞り込みます。
順次ファイルをソースとして使用する
順次ファイルをソースとして使用するには、特定の場所にあるプロジェクト・バケットにファイルをロードする必要があります。 プロジェクト・バケットのロケーションを判別するには:
  1. プロジェクトのCloud Object Storageインスタンスを見つけます。
  2. プロジェクト・インスタンスで、現在のプロジェクトに対応するバケットを見つけます。 ロケーションは、通常、以下です。<lowercase-project-name>-donotdelete-<random-string>

    例 : project2021mar01-donotdelete-pr-ifpkjcbk71s36j

    次に、オブジェクトの接頭部フィールドにDataStage/files/を指定して、ファイルをアップロードします。

parquet ファイル・フォーマットを使用するとジョブを実行中にエラーが出る
Parquetファイル・フォーマットでジョブを実行しようとすると、以下のエラーを受け取ることがあります。
Error: CDICO9999E: Internal error occurred: Illegal 
state error: INTEGER(32,false) can only annotate INT32.
符号なし 32 ビット整数 (uint32) および符号なし 64 ビット整数 (uint64) データ・タイプは、 DataStage がすべてのファイル・コネクターに対して使用している Parquet フォーマットではサポートされません。

回避策: サポートされているデータ型を使用する必要があります。

一時ストレージの制限を超えたためにマイグレーション・ポッドが排除される
インポート中に、ポッドがエフェメラル・ローカル・ストレージを使用すると、コンテナの総制限を超える可能性があります。 次のメッセージを受け取る場合があります。

Status: Failed
Reason: Evicted
Message: Pod ephemeral local storage usage exceeds the total limit of containers 900Mi.
回避策: この問題を回避するには、以下のコマンドを実行して、一時ストレージの制限をデフォルトの 900Mi から 4Gi に増やす必要があります。

oc -n ${PROJECT_CPD_INST_OPERANDS} patch datastage datastage --type merge -p '{"spec": {"custom": {"resources":{"components":{"migration":{"limits":{"ephemeral":"4Gi"}}}}}}}'
Cloud Pak for Data の5.0.0 から 5.0.1 へのアップグレード中にエラーが発生しました

Cloud Pak for Data を 5.0.0 から 5.0.1 にアップグレードする際に、このエラーが発生することがあります。

Workaround: DataStage CR が InProgress と 5.0.1 アップグレード中に交互に表示される場合は、次の手順を実行してください:
  1. Red Hat® OpenShift Container Platform クラスターに oc でログインし、デフォルトのプロジェクトパスを Cloud Pak for Data がインストールされている場所に設定します。
    oc project $PROJECT_CPD_INST_OPERANDS
  2. PXRruntime インスタンスがバージョン 5.0.1 に正常にアップグレードされたかどうかを確認します。
    oc get pxruntime
  3. PXRruntime CRがバージョン5.0.1に正常にアップグレードされない場合は、次のコマンドを実行してください:
    
    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
Transformerステージを含むフローがコンパイル中にタイムアウトする

トランスフォーマー・ステージを含むフローのコンパイル中にタイムアウトが発生することがある。

APT_COMPILEOPT環境変数のデフォルト値:
-c -O -fPIC -Wno-deprecated -m64 -mtune=generic -mcmodel=small
回避策環境変数'APT_COMPILEOPTのコンパイルオプションで'-Oを'-O0に変更して、コンパイル時の最適化を無効にする:
-c -O0 -fPIC -Wno-deprecated -m64 -mtune=generic -mcmodel=small

コネクター

Netezza コネクター: パーティション読み取りが有効になっている場合に重複レコードが発生する

並列実行モードの Netezza コネクタでパーティション読み取りを有効にすると、レコードの重複が発生することがあります。 レコードが重複しないようにするには、SQL にパーティション・プレースホルダーを追加するか、実行モードを順次に設定します。 パーティション・プレースホルダーを追加するには、以下の例のように、ストリング mod(datasliceid,[[node-count]])=[[node-number]]を追加します。
SELECT * FROM table WHERE mod(datasliceid,[[node-count]])=[[node-number]]
MySQL コネクター: 主キーなしでターゲットに対して書き込みモード「更新」を使用すると、ジョブが失敗することがある

WHERE 列に主キーを指定せずに MySQL データベースに表を作成し、その表を使用するジョブをターゲットに対して書き込みモード 「更新」 で実行しようとすると、ジョブが失敗する可能性があります。

解決策: 「キー列名」 フィールドに主キー名を指定します。 表が大きく、主キーを持たない場合は、主キーとして使用する自動増分値を持つ別の列を作成することができます。

FTP コネクター: ホーム・ディレクトリー・パスがパスの前に付加されます。

FTP データ・ソースからのデータを使用するジョブを実行すると、指定したパスの前にホーム・ディレクトリーまたはログイン・ディレクトリーが付加されます。 このアクションは、絶対パス (先頭にスラッシュを付けたもの) または相対パス (先頭にスラッシュを付けなかったもの) を指定したかどうかに関係なく行われます。 例えば、ディレクトリーを /tmp/SampleData.txtとして指定すると、パスは /home/username/tmp/SampleData.txtに解決されます。

回避策: FTP コネクターで 「ファイル名」 を編集します。 ソース・ファイルまたはターゲット・ファイルへの絶対パスを指定します。

「コネクターが Db2 データベースへの接続を確立できませんでした」というエラーでジョブが失敗する

ジョブは、「コネクターは Db2 データベースへの接続を確立できませんでした」というエラーで失敗する可能性があります。

回避策: 接続プロパティーに移動し、 「オプション」 プロパティーを connectTimeout=0に設定します。

SAP OData コネクターからのソース・データを含むジョブが失敗する

フローに SAP ODataからのソース・データが含まれている場合、 SAP 命名規則に従わない列を手動で追加してフローを作成すると、フローが失敗する可能性があります。

回避策: フローを更新するには、アセット・ブラウザーで列を追加するか、 SAP 命名規則に従って列の名前を変更します。 SAP 命名規則は、区切り文字として 2 つの下線文字 (__) を使用する SAP オブジェクト階層に従います。 例えば、PurchaseOrderカラムがPurchaseOrderNoteに属する場合、カラム名はPurchaseOrderNote__PurchaseOrderと指定します。

Apache Hive バージョン 2.0 以前のデータに対してトランザクション SQL を実行できない

データが Apache Hive バージョン 2.0 以前のものであり、 DataStage フローが UPDATE または DELETE ステートメントを実行する場合、ジョブが失敗する可能性があります。 ターゲット表が Hive トランザクション要件に従って作成されていること、および Apache Hive サーバーが ACID 操作をサポートするように構成されていることを確認します。

Apache Hive の ACID テーブルに対して有効にする必要があるパラメーターの最小セット ( hive-site.xml ファイルで構成) は、以下のとおりです。

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>

詳細は Hive 「取引 」を参照。

IBM Db2 for DataStage SSL 証明書を使用した接続が「プロトコル固有のエラー・コード 414」エラーで失敗する

IBM Db2 for DataStage 接続で SSL 証明書を使用し、接続が「プロトコル固有のエラー・コード 414」エラーで失敗する場合は、以下の回避策を使用してください。

  1. Db2 サーバー上のルート証明書を識別します。 以下のコマンドを使用して、証明書チェーンを表示できます。
    openssl s_client -connect <hostname>:<port> -showcerts
  2. 証明書のサブジェクトと発行者が同じであることを確認してください。
  3. 「接続の作成: IBM IBM Db2 for DataStage ページで、 「SSL 証明書 (アーム)」 フィールドにルート証明書を入力します。
IBM Cloud Object Storage におけるフロー接続のクレデンシャル・フィールドのパラメーター化エラー

「認証方式」 プロパティーが「サービス資格情報 (完全な JSON スニペット)」に設定されている場合は、 「サービス資格情報」 フィールドをパラメーター化しないでください。 そのフィールドにパラメータが指定されている場合、フローはコンパイルされない。

PostgreSQL コネクターが大きな表でタイムアウトになる

その PostgreSQL ソースとして大きなテーブル(10万行以上)が使用されている場合、タイムアウトエラーが発生してコネクタが機能しなくなる可能性があります。 このエラーを修正するには、APT_RECORD_TIMEOUT 環境変数により大きいタイムアウト値を設定してみてください。 DataStage の環境変数の管理 を参照のこと。

HTTPコネクターからのデータに起因するスキーマ変更は、ジョブを失敗させる可能性があります

HTTPコネクターを使用してファイルをダウンロードし、同じファイルをIBM Cloud Object Storageまたはデータベースにアップロードする場合、ファイルのスキーマが時間の経過とともに変更されると、ジョブが失敗することがあります。

回避策: ステージを再作成します。

SSL証明書を使用するデータベース接続を正常に作成できない

OpenSSL 3.0.9バージョンでは、SSL証明書の生成時に弱い暗号を使用することはできません。 ValidateServerCertificate(VSC)属性が '0 に設定されている場合、接続は証明書を無効として扱う。 接続を作成するには、値を「1」に設定しなければならない。

回避策 OpenSSL 3.0.xバージョンを使用して、強力な暗号を持つ新しい SSL 証明書を生成します。
  1. 以下のコマンドでSSL証明書の暗号をチェックする。 証明書が「sha1WithRSAEncryption署名アルゴリズムを使用している場合、弱い暗号とみなされる:
    openssl x509 -in cert.pem -text -noout
  2. 以下のコマンドでSSL証明書を生成する:
    openssl.exe pkcs12 -in certificate_name -export -out truststore_filename -nokeys -keypbe cryptographic_algorithm -certpbe cryptographic_algorithm -password pass:truststore_password -nomac
Snowflake コネクタに接続できません:ジョブが エラーで失敗します。 "java/lang/OutOfMemoryError"
ログには次のようなエラーメッセージが表示される:
java/lang/OutOfMemoryError", exception "Failed to create a thread: retVal -1073741830, errno 11"

回避策 Snowflake コネクタの [Output] または[ Input] タブでヒープサイズを大きくしてください。

Snowflake コネクタに接続できません:ジョブが "Fork failed:Resource temporarily unavailable" エラーで失敗します
ログには、以下のエラー・メッセージが表示されます。
<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
および
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

回避策 OpenShift クラスタ内の PID Limits を増やします。 PID リミットの最大値である 16,384podsPIDLimit を設定する。 PID Limitsを増やす方法については、 Red Hat Customer Portalを参照してください。

ランタイム

DataStage オペレーターのメモリー不足の問題

クラスターにデプロイされている PX ランタイム・インスタンスが 5 つを超えると、オペレーターがメモリー不足になる可能性があります。 この問題を解決するには、CSV を更新してメモリー制限を増やします。

DataStageのCSVを取得します:

oc -n ${PROJECT_CPD_INST_OPERATORS} oc get csv | grep datastage
DataStage CSVにパッチを当て、オペレータのメモリを1Giから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" }]'
コンピュートポッドの起動失敗時にジョブがキューに入る

ランタイム・インスタンスのコンピュート・ポッドが起動しない場合、すべてのジョブはpx-runtimeポッド上で実行される。 リソースの制限により、ジョブがキューに入れられる。

回避策:コンピュートポッドの起動を妨げている問題を修正します。

ジョブ・キューイング

ジョブ、すぐに開始されるとは限りません。 その代わり、キューに入れられた状態になる。 これは、システムがリソースを管理し、仕事に優先順位をつける方法である。

なぜジョブキューに入れられたのか?
理由 説明
リソース制限 ジョブ必要なリソース(CPU、GPU、メモリ)が利用可能になるのを待つ。 それはいつ起こるかわからない:
  • その他の仕事は、利用可能なすべての容量を使用する。
  • あなたのジョブ、現在空いている以上のリソースを必要とする。
同時実行の制限 システムによっては、同時に実行できるジョブ数に制限を設けているものもある。 他のジョブ終了するまで、あなたのジョブキューに入れられる。
優先順位とスケジューリング 優先順位の低いジョブはキューに入れられ、優先順位の高いジョブが先に実行される。
メンテナンスまたはダウンタイム システムがメンテナンス中や更新中で、利用可能な容量が減少したり、 ジョブ実行が一時停止したりすることがある。
キュー・バックログ アクセスが集中したり、大量のジョブが送信されたりすると、バックログが発生する可能性があります。 ジョブは先のジョブが完了した時点で開始される。

解決方法 DataStage Workload Manager(WLM)には、同時に5つのジョブを実行できるデフォルトの構成が同梱されています。 リソースに余裕がある場合は、pxruntimeをより大きなインスタンスにスケールする必要がある。 詳細については、 「コマンド ラインを使用した DataStage サービス インスタンスのハードウェア構成のカスタマイズ」 コマンド ラインを使用した DataStage サービス インスタンスのハードウェア構成のカスタマイズを参照してください。 スケール設定を変更した後、WLM設定ファイルを更新して、より多くのジョブを同時に実行できるようにすることが重要です。 そのため、別のジョブを同時に実行する必要がある場合は、XMLファイルで RunJob。

ジョブが停止し、存在しないジョブが「開始中」または「実行中」の状態として表示される
古くなったジョブが実行されている場合、UIからそのジョブを削除する際に問題が発生することがあります。 プロジェクトがリソース(例えばメモリ)を使用する可能性があるため、同じような問題に直面する可能性がある。 これらのプロセスをクリーンアップするには、以下のコマンドのいずれかを使用する:
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]
注:これらのコマンドを使用すると、プロジェクト内のすべてのアクティブなジョブがクリーンアップされます。 新しいジョブの実行を停止してください。