IBM® DataStage®で発生する可能性がある問題を解決するには、以下の解決策を使用します。
DataStage のヘルプおよびサポートの利用
DataStageを使用する際に問題や質問がある場合は、情報を検索したり、フォーラムで質問することで助けを得ることができます。 また、サポート・チケットを開くことができます。
フォーラムで質問する場合は、 DataStage 開発チームの目に触れるように、質問にタグを付けます。
サービスおよび開始手順についての質問は、 https://stackoverflow.com/questions/tagged/datastageにあるフォーラムを使用してください。
それでも問題を解決できない場合は、IBM サポート・チケットを開くことができます。 IBM サポート・チケットのオープンやサポート・レベルについては、「サポート窓口」( https://cloud.ibm.com/unifiedsupport/supportcenter) を参照してください。
- 一般
- SQL ステートメントと BEFORE SQL ステートメントの実行順序が正しくないためにジョブが失敗する
- mailx コマンドが SMTP サーバー情報なしでジョブ前サブルーチンおよびジョブ後サブルーチンで実行できない
- "プロパティを使用する "の選択を解除すると、プロパティの選択内容が保存されません DataStage"
- 外部フローで CEL 関数 ds.getUserStatus を実行するとルーチンが失敗する
- 大きい Excel ファイルをロードするとジョブが失敗する
- エクスポートされたフローは、平文のパスワードを含むJSON接続ファイルを生成する
- 特殊文字を含む列を使用してデータベース表をブラウズする際の問題
- 資産ブラウザーによって読み取られたスキーマに正しくない推論が割り当てられました
- 順次ファイルをソースとして使用する
- parquet ファイル・フォーマットを使用するとジョブを実行中にエラーが出る
- 一時ストレージの制限を超えたために強制排除されるマイグレーション・ポッド
- Cloud Pak for Dataの5.0.0から5.0.1へのバージョンアップ中にエラーが発生した
- 変圧器ステージを含むフローのコンパイルがタイムアウトしました
- コネクター
- Netezza® コネクター:パーティションドリードが有効な場合、レコードの重複が発生します
- MySQL コネクタ:プライマリ・キーのないターゲットに書き込みモード「更新」を使用すると、ジョブが失敗する可能性があります
- FTP コネクター: ホーム・ディレクトリー・パスがパスの前に付加されます
- ジョブはエラー "The connector could not establish connection to Db2® database" で失敗する
- SAP OData コネクタからのソース・データを持つジョブが失敗しました
- トランザクション SQL を Apache Hive バージョン 2.0 以前のデータで実行できない
- IBM Db2 for DataStage SSL 証明書による接続が "Protocol specific error code 414" エラーで失敗しました
- IBM Cloud® Object Storageのフロー接続のクレデンシャル・フィールドのパラメータ化にエラーが発生しました
- PostgreSQL コネクタが大きなテーブルでタイムアウトする
- HTTPコネクターからのデータに起因するスキーマ変更は、ジョブを失敗させる可能性があります。
- SSL証明書を使用するデータベース接続を正常に作成できない
- Snowflake コネクタ:"java/lang/OutOfMemoryError"エラーでジョブが失敗します。
- Snowflakeコネクタ:ジョブが "Fork failed:リソースが一時的に利用できません。
一般
- 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のルーチン置換の例で、'
dsjob
コマンドを'DSGetUserStatus()
で使用する例を参照してください。これをどのように書き換えるかの例については、 DataStageのルーチン置換の例で、'
dsjob
コマンドを'DSGetUserStatus()
で使用する例を参照してください。
- 大きい 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) に変更し、徐々にデータ・タイプを絞り込みます。
- 順次ファイルをソースとして使用する
- 順次ファイルをソースとして使用するには、特定の場所にあるプロジェクト・バケットにファイルをロードする必要があります。 プロジェクト・バケットのロケーションを判別するには:
- プロジェクトのCloud Object Storageインスタンスを見つけます。
- プロジェクト・インスタンスで、現在のプロジェクトに対応するバケットを見つけます。 ロケーションは、通常、以下です。
<lowercase-project-name>-donotdelete-<random-string>
例 :
project2021mar01-donotdelete-pr-ifpkjcbk71s36j
次に、オブジェクトの接頭部フィールドに
DataStage/files/
を指定して、ファイルをアップロードします。
- parquet ファイル・フォーマットを使用するとジョブを実行中にエラーが出る
- Parquetファイル・フォーマットでジョブを実行しようとすると、以下のエラーを受け取ることがあります。
符号なし 32 ビット整数 (uint32) および符号なし 64 ビット整数 (uint64) データ・タイプは、 DataStage がすべてのファイル・コネクターに対して使用している Parquet フォーマットではサポートされません。Error: CDICO9999E: Internal error occurred: Illegal state error: INTEGER(32,false) can only annotate INT32.
回避策: サポートされているデータ型を使用する必要があります。
- 一時ストレージの制限を超えたためにマイグレーション・ポッドが排除される
- インポート中に、ポッドがエフェメラル・ローカル・ストレージを使用すると、コンテナの総制限を超える可能性があります。 次のメッセージを受け取る場合があります。
回避策: この問題を回避するには、以下のコマンドを実行して、一時ストレージの制限をデフォルトの 900Mi から 4Gi に増やす必要があります。Status: Failed Reason: Evicted Message: Pod ephemeral local storage usage exceeds the total limit of containers 900Mi.
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 アップグレード中に交互に表示される場合は、次の手順を実行してください:- Red Hat® OpenShift Container Platform クラスターに
oc
でログインし、デフォルトのプロジェクトパスを Cloud Pak for Data がインストールされている場所に設定します。oc project $PROJECT_CPD_INST_OPERANDS
- PXRruntime インスタンスがバージョン 5.0.1 に正常にアップグレードされたかどうかを確認します。
oc get pxruntime
- 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
- Red Hat® OpenShift Container Platform クラスターに
- 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」エラーで失敗する場合は、以下の回避策を使用してください。
- Db2 サーバー上のルート証明書を識別します。 以下のコマンドを使用して、証明書チェーンを表示できます。
openssl s_client -connect <hostname>:<port> -showcerts
- 証明書のサブジェクトと発行者が同じであることを確認してください。
- 「接続の作成: IBM IBM Db2 for DataStage 」 ページで、 「SSL 証明書 (アーム)」 フィールドにルート証明書を入力します。
- Db2 サーバー上のルート証明書を識別します。 以下のコマンドを使用して、証明書チェーンを表示できます。
- IBM Cloud Object Storage におけるフロー接続のクレデンシャル・フィールドのパラメーター化エラー
「認証方式」 プロパティーが「サービス資格情報 (完全な JSON スニペット)」に設定されている場合は、 「サービス資格情報」 フィールドをパラメーター化しないでください。 そのフィールドにパラメータが指定されている場合、フローはコンパイルされない。
- PostgreSQL コネクターが大きな表でタイムアウトになる
ソースとして大きなテーブル(100,000行以上)を使用すると、PostgreSQLコネクタがタイムアウトエラーで失敗することがありました。 このエラーを修正するには、APT_RECORD_TIMEOUT 環境変数により大きいタイムアウト値を設定してみてください。 DataStage環境変数の管理 'DataStage環境変数の管理 を参照。
- HTTPコネクターからのデータに起因するスキーマ変更は、ジョブを失敗させる可能性があります
HTTPコネクターを使用してファイルをダウンロードし、同じファイルをIBM Cloud Object Storageまたはデータベースにアップロードする場合、ファイルのスキーマが時間の経過とともに変更されると、ジョブが失敗することがあります。
回避策: ステージを再作成します。
- SSL証明書を使用するデータベース接続を正常に作成できない
ランタイム
- 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ポッド上で実行される。 リソースの制限により、ジョブがキューに入れられる。
回避策:コンピュートポッドの起動を妨げている問題を修正します。
- 既存のジョブがスタックしたり、StartingやRunningの状態で表示されることはありません
- 古くなったジョブが実行されている場合、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]
注:これらのコマンドを使用すると、プロジェクト内のすべてのアクティブなジョブがクリーンアップされます。 オペレーティングシステムを停止したことを確認してください。