Identification et résolution des problèmes IBM DataStage
Utilisez ces solutions pour résoudre les problèmes que vous pouvez rencontrer avec IBM® DataStage®.
Aide et support pour DataStage
Si vous avez des problèmes ou des questions lorsque vous utilisez DataStage, vous pouvez obtenir de l'aide en recherchant des informations ou en posant des questions sur un forum. Vous pouvez également ouvrir un ticket de support.
Lorsque vous posez une question sur les forums, balisez votre question de sorte qu'elle soit vue par les équipes de développement DataStage .
Pour toute question concernant le service et les instructions de mise en route, utilisez le forum à l'adresse https://stackoverflow.com/questions/tagged/datastage.
Si vous ne parvenez toujours pas à résoudre le problème, vous pouvez ouvrir un ticket de demande de service IBM. Pour plus d'informations sur l'ouverture d'un ticket de demande de service IBM ou sur les niveaux de support, voir "Contact support" à l'adresse https://cloud.ibm.com/unifiedsupport/supportcenter.
- Général
- Echec des travaux car les instructions SQL et Before SQL sont exécutées dans un ordre incorrect
- La commande mailx ne parvient pas à s'exécuter dans les sous-routines avant-travail et après-travail sans informations de serveur SMTP
- Les sélections de propriétés ne sont pas conservées si vous désélectionnez "Utiliser les propriétés DataStage"
- La routine échoue lorsque la fonction CEL ds.getUserStatus est exécutée sur un flux externe
- Echec du travail lors du chargement d'un fichier Excel volumineux
- Les flux exportés génèrent des fichiers de connexion JSON qui contiennent des mots de passe en clair
- Problèmes de navigation dans les tables de base de données avec des colonnes contenant des caractères spéciaux
- Inférences inexactes affectées à un schéma lu par le navigateur d'actifs
- Utilisation de fichiers séquentiels comme source
- Erreur lors de l'exécution de travaux avec un format de fichier parquet
- Le pod de migration est expulsé pour avoir dépassé ses limites de stockage éphémères
- Une erreur se produit lors de la mise à niveau du Cloud Pak for Data de 5.0.0 vers 5.0.1 version
- La compilation d'un flux contenant l'étape du transformateur est interrompue
- Connecteurs
- Netezza® connecteur : Des enregistrements en double se produisent lorsque les lectures partitionnées sont activées
- MySQL connecteur : Les jobs peuvent échouer si vous utilisez le mode d'écriture "Update" pour la cible sans clé primaire
- Connecteur FTP: le chemin du répertoire de base est ajouté en préfixe au chemin
- Les jobs échouent avec l'erreur "The connector could not establish a connection to Db2® database"
- Job avec des données sources provenant d'un connecteur SAP OData échoue
- Impossible d'exécuter une requête SQL transactionnelle sur des données provenant de Apache Hive version 2.0 ou antérieure
- IBM Db2 pour DataStage la connexion avec le certificat SSL échoue avec l'erreur "Protocol specific error code 414"
- Erreur de paramétrage du champ credential pour une connexion de flux dans IBM Cloud® Object Storage
- PostgreSQL connector times out on large tables
- Les modifications de schéma provenant des données du connecteur HTTP peuvent entraîner l'échec de la tâche
- Impossible de créer une connexion réussie à la base de données qui utilise le certificat SSL
Général
- Les travaux échouent car les instructions SQL et SQL Before s'exécutent dans un ordre incorrect
Sur le connecteur Teradata défini sur le mode de transaction ANSI, l'instruction SQL Before peut s'exécuter après l'instruction SQL au lieu de l'exécuter avant, ce qui entraîne l'échec du travail.
Solution palliative: Ajoutez une instruction de validation après chaque instruction SQL Before.
- Echec de l'exécution de la commande mailx dans les sous-routines avant-travail et après-travail sans informations sur le serveur SMTP
Si la commande
mailx
est utilisée dans une sous-routine avant-travail ou après-travail, vous devez fournir les informations du serveur SMTP, sinon l'exécution sera réenvoyée àsendmail
et échouera.
- Les sélections de propriétés ne sont pas conservées si vous désélectionnez "Utiliser les propriétés DataStage "
Si vous entrez d'autres propriétés (par exemple pour les tables ou les schémas) avec l'option par défaut Utiliser les propriétés DataStage sélectionnée, puis désélectionnez Utiliser les propriétés DataStage, les propriétés ne sont pas conservées.
Solution palliative: Désélectionnez la valeur par défaut Utiliser les propriétés DataStage si vous n'avez pas l'intention de les utiliser avant d'entrer d'autres propriétés. Sinon, sélectionnez à nouveau les propriétés.
- La routine échoue lorsque la fonction CEL ds.getUserStatus est exécutée sur un flux externe
Lorsque la fonction CEL intégrée
ds.getUserStatus
est exécutée sur une cible qui ne se trouve pas dans le même pipeline, elle échoue et ne peut pas extraire le statut de l'utilisateur. Utilisez l'interface de ligne de commandedsjob
dans votre noeud de script Run Bash à la place.Pour un exemple de réécriture, voir la commande
dsjob
utilisée parDSGetUserStatus()
dans les exemples de remplacement de routine dans DataStage.
- Le travail échoue lors du chargement d'un fichier Excel volumineux
Un travail avec un connecteur qui traite un fichier Excel volumineux peut échouer avec cette erreur:
"CDICO9999E: Internal error occurred: IO error: The Excel file is too large. (error code: DATA_IO_ERROR)"
Essayez d'augmenter la taille de segment de mémoire. L'option Propriétés de taille de segment de mémoire se trouve dans la section Autres propriétés de l'onglet Etape du connecteur.
- Les flux exportés génèrent des fichiers de connexion JSON qui contiennent des mots de passe en clair
- Les flux téléchargés peuvent inclure des actifs de connexion ayant des données d'identification ou d'autres informations sensibles. Vous pouvez exécuter la commande suivante pour modifier le comportement d'exportation afin que toutes les exportations futures suppriment les données d'identification par défaut.
oc -n ${PROJECT_CPD_INST_OPERANDS} patch datastage datastage --patch '{"spec":{"migration_export_remove_secrets":true}}' --type=merge
- Problèmes de navigation dans les tables de base de données avec des colonnes contenant des caractères spéciaux
Vous pouvez rencontrer des problèmes lorsque vous utilisez le navigateur d'actifs pour parcourir les tables de base de données si la table sélectionnée contient une colonne avec des caractères spéciaux tels que ., $ou #et que vous ajoutez cette table à un flux DataStage . DataStage ne prend pas en charge les noms de colonne qui contiennent des caractères spéciaux. Les flux DataStage qui font référence à des colonnes dont les noms incluent ces caractères spéciaux ne fonctionneront pas.
Pour contourner ce problème, créez une vue sur la table de base de données et redéfinissez le nom de la colonne dans la vue. Par exemple :
create view view1 as select column1$ as column1, column2# as column2 ... from table
Ensuite, lorsque vous utilisez le navigateur d'actifs, recherchez la vue et ajoutez-la au flux DataStage.
- Inférences inexactes affectées à un schéma lu par le navigateur d'actifs
Le navigateur de ressources lit les 1000 premiers enregistrements et infère le schéma, comme le nom de colonne, la longueur, le type de données et l'acceptabilité des valeurs NULL, en fonction de ces 1000 premiers enregistrements des fichiers dans IBM Cloud Object Storage, Amazon S3, Google Cloud Storage, Azure File Storage, Azure Blob Storage ou le service Azure Data Lake. Par exemple, le navigateur d'actifs peut identifier une colonne sous la forme d'un entier en fonction de ce qui est détecté dans les 1000 premiers enregistrements. Toutefois, les enregistrements ultérieurs du fichier peuvent indiquer que cette colonne doit être traitée comme un type de données varchar . De même, le navigateur d'actifs peut inférer une colonne en tant que varchar(20) , même si des enregistrements ultérieurs indiquent que la colonne doit être varchar(100).
Solution palliative :- Profil des données source pour générer de meilleures métadonnées.
- Modifiez toutes les colonnes pour qu'elles soient varchar(1024) et limitez progressivement le type de données.
- Utilisation de fichiers séquentiels comme source
- Pour utiliser des fichiers séquentiels comme source, vous devez charger des fichiers dans un compartiment de projet dans un emplacement spécifique. Pour déterminer l'emplacement du compartiment du projet:
- Recherchez l'instance de projet Cloud Object Storage.
- Dans l'instance de projet, recherchez le compartiment correspondant au projet en cours. Il s'agit généralement de l'emplacement suivant :
<lowercase-project-name>-donotdelete-<random-string>
Par exemple :
project2021mar01-donotdelete-pr-ifpkjcbk71s36j
Téléchargez ensuite les fichiers en spécifiant
DataStage/files/
dans la zone Préfixe de l'objet.
- Erreur lors de l'exécution de travaux avec un format de fichier parquet
- L'erreur suivante peut se produire lors de l'exécution d'un travail avec un format de fichier parquet :
Les types de données d'entier 32 bits non signé (uint32) et d'entier 64 bits non signé (uint64) ne sont pas pris en charge dans le format Parquet utilisé par DataStage pour tous les connecteurs de fichiers.Error: CDICO9999E: Internal error occurred: Illegal state error: INTEGER(32,false) can only annotate INT32.
Contournement: Vous devez utiliser les types de données pris en charge.
- Le pod de migration est expulsé pour avoir dépassé ses limites de stockage éphémères
- Pendant l'importation, l'utilisation par les pods du stockage local éphémère peut dépasser la limite totale des conteneurs. Le message suivant peut s'afficher :
Solution palliative: Pour éviter ce problème, vous devez augmenter la limite de stockage temporaire à 4Gi à partir de la valeur par défaut de 900Mi en exécutant la commande suivante: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"}}}}}}}'
- Une erreur survient lors de la mise à niveau du Cloud Pak for Data de 5.0.0 vers 5.0.1 version
Vous pouvez rencontrer cette erreur lors de la mise à niveau de Cloud Pak for Data de 5.0.0 vers 5.0.1 La mise à niveau échoue dans les nouvelles tâches de mise à niveau pour les instances distantes.
Contournement: Lorsque le DataStage CR alterne entre Failed et InProgress pendant la mise à niveau 5.0.1, suivez les étapes suivantes :- Connectez-vous au cluster Red Hat® OpenShift Container Platform par
oc
et définissez le chemin d'accès au projet par défaut à l'endroit où le Cloud Pak for Data est installé.oc project $PROJECT_CPD_INST_OPERANDS
- Vérifiez que les instances de PXRruntime ont été mises à niveau avec succès vers la version 5.0.1.
oc get pxruntime
- Si le PXRruntime CR n'est pas mis à niveau avec succès vers la version 5.0.1, exécutez les commandes suivantes :
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
- Connectez-vous au cluster Red Hat® OpenShift Container Platform par
- Les flux qui contiennent l'étape du transformateur sont interrompus pendant la compilation
Un dépassement de délai peut se produire lors de la compilation des flux qui contiennent l'étage de transformation.
Valeur par défaut de la variable d'environnement 'APT_COMPILEOPT
-c -O -fPIC -Wno-deprecated -m64 -mtune=generic -mcmodel=small
Solution de contournement : Désactivez l'optimisation au moment de la compilation en remplaçant "-O
par "-O0
dans les options de compilation de la variable d'environnement "APT_COMPILEOPT
-c -O0 -fPIC -Wno-deprecated -m64 -mtune=generic -mcmodel=small
Connecteurs
- Connecteur Netezza : des enregistrements en double se produisent lorsque les lectures partitionnées sont activées
-
Lorsque les lectures partitionnées sont activées sur le connecteur Netezza en mode d'exécution parallèle, des enregistrements en double peuvent se produire. Pour éviter les enregistrements en double, ajoutez des marques de réservation de partition dans le code SQL ou définissez le mode d'exécution sur séquentiel. Pour ajouter des marques de réservation de partition, ajoutez la chaîne
mod(datasliceid,[[node-count]])=[[node-number]]
, comme dans l'exemple suivant.SELECT * FROM table WHERE mod(datasliceid,[[node-count]])=[[node-number]]
- Connecteur MySQL : les travaux peuvent échouer si vous utilisez le mode écriture "Mise à jour" pour la cible sans clé primaire
Si vous créez une table dans une base de données MySQL sans spécifier de clé primaire dans la colonne WHERE, puis que vous tentez d'exécuter un travail qui utilise cette table avec le mode d'écriture Mise à jour pour la cible, le travail risque d'échouer.
Solution: Indiquez un nom de clé primaire dans la zone Noms de colonne de clé . Si la table est volumineuse et qu'elle ne comporte pas de colonne primaire, vous pouvez créer une colonne distincte avec des valeurs d'auto-incrémentation à utiliser comme clé primaire.
- Connecteur FTP: le chemin du répertoire de base est ajouté en préfixe au chemin
Lorsque vous exécutez un travail qui utilise des données provenant d'une source de données FTP, le répertoire de base ou de connexion est ajouté en préfixe au chemin que vous avez spécifié. Cette action se produit indépendamment du fait que vous spécifiez un chemin absolu (avec une barre oblique de début) ou un chemin relatif (sans barre oblique de début). Par exemple, si vous indiquez le répertoire
/tmp/SampleData.txt
, le chemin est résolu en/home/username/tmp/SampleData.txt
.Solution palliative: éditez le nom de fichier dans le connecteur FTP. Indiquez le chemin d'accès absolu au fichier source ou cible.
- Les travaux échouent avec l'erreur "Le connecteur n'a pas pu établir de connexion à la base de données Db2 "
Les travaux peuvent échouer avec l'erreur "Le connecteur n'a pas pu établir de connexion à la base de données Db2 ".
Solution palliative: Accédez aux propriétés de connexion et définissez la propriété Options sur
connectTimeout=0
.
- Le travail avec les données source d'un connecteur SAP OData échoue
Si votre flux inclut des données source provenant de SAP OData, le flux risque d'échouer si vous avez créé le flux en ajoutant manuellement des colonnes qui ne respectent pas la convention de dénomination SAP .
Solution palliative: Mettez à jour le flux en ajoutant ou en ajoutant les colonnes avec le navigateur Actif ou en renommant les colonnes conformément à la convention de dénomination SAP . La convention de dénomination SAP suit la hiérarchie d'objets SAP avec deux caractères de soulignement (
__
) comme séparateur. Par exemple, si la colonne PurchaseOrder appartient à Note de commande d'achat, le nom de la colonne doit être spécifié comme PurchaseOrderNote__PurchaseOrder.
- Impossible d'exécuter du SQL transactionnel sur les données d' Apache Hive version 2.0 ou antérieure
Si vos données proviennent d' Apache Hive version 2.0 ou antérieure et que votre flux DataStage exécute des instructions UPDATE ou DELETE, le travail risque d'échouer. Assurez-vous que la table cible a été créée conformément aux exigences des transactions Hive et que le serveur Apache Hive est configuré pour prendre en charge les opérations ACID.
L'ensemble minimal de paramètres (configurés dans le fichier hive-site.xml ) que vous devez activer pour les tables ACID dans Apache Hive est le suivant:
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>
Pour plus d'informations, se référer à Hive Transactions.
- IBM Db2 for DataStage avec le certificat SSL échoue avec l'erreur "Protocol specific error code 414"
Si vous utilisez un certificat SSL dans la connexion IBM Db2 for DataStage et que la connexion échoue avec une erreur "Protocol specific error code 414", utilisez la solution suivante:
- Identifiez le certificat racine sur le serveur Db2 . Vous pouvez utiliser cette commande pour afficher la chaîne de certificats:
openssl s_client -connect <hostname>:<port> -showcerts
- Assurez-vous que le certificat a le même sujet et le même émetteur.
- Dans la page Créer une connexion: IBM IBM Db2 for DataStage , entrez le certificat racine dans la zone Certificat SSL (arm) .
- Identifiez le certificat racine sur le serveur Db2 . Vous pouvez utiliser cette commande pour afficher la chaîne de certificats:
- Erreur de paramétrage du champ credential pour une connexion de flux dans IBM Cloud Object Storage
Lorsque la propriété Méthode d'authentification est définie sur Données d'identification du service (fragment JSON complet), ne paramétrez pas la zone Données d'identification du service . Si un paramètre est fourni pour ce champ, le flux ne sera pas compilé.
- Le connecteur PostgreSQL arrive à expiration sur les grandes tables
Le PostgreSQL connecteur peut échouer avec une erreur de délai d'attente lorsqu'une grande table (plus de 100 000 lignes) est utilisée comme source. Pour corriger cette erreur, essayez de définir une valeur de délai d'attente plus élevée pour la variable d'environnement APT_RECORD_TIMEOUT. Voir Gestion des variables d'environnement dans DataStage.
- Les modifications de schéma provenant des données du connecteur HTTP peuvent entraîner l'échec de la tâche
Lorsque vous utilisez le connecteur HTTP pour télécharger un fichier, puis charger ce même fichier dans IBM Cloud Object Storage ou une base de données, si le schéma du fichier change au fil du temps, le travail risque d'échouer.
Solution palliative: recréez l'étape.
- Impossible de créer une connexion réussie à la base de données qui utilise le certificat SSL
Environnement d'exécution
- Problème de mémoire insuffisante pour l'opérateur DataStage
Lorsque plus de 5 instances d'exécution PX sont déployées sur le cluster, l'opérateur peut être à court de mémoire. Pour résoudre ce problème, mettez à jour le fichier CSV pour augmenter les limites de mémoire:
Récupérer le fichier CSV DataStage :oc -n ${PROJECT_CPD_INST_OPERATORS} oc get csv | grep datastage
Patch du DataStage CSV pour augmenter la mémoire de l'opérateur de 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" }]'
- Mise en file d'attente des travaux lorsque les pods de calcul ne démarrent pas
Si les pods de calcul de l'instance d'exécution ne démarrent pas, tous les travaux seront exécutés sur le pod px-runtime. La limitation des ressources entraîne la mise en file d'attente des travaux.
Modèle de contournement: Corrigez les problèmes qui empêchent le démarrage des compute pods.
- Les travaux sont bloqués, des travaux inexistants s'affichent à l'état Démarrage/Exécution
- Lorsque vos travaux périmés sont en cours d'exécution, vous pouvez rencontrer des difficultés pour les supprimer à partir de l'interface utilisateur. Vous pouvez être confronté à un problème similaire avec les projets, car ils peuvent éventuellement utiliser des ressources (par exemple de la mémoire). Pour nettoyer ces processus, utilisez l'une des commandes suivantes :
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]
Remarque : l'utilisation de ces commandes permet de nettoyer tous les travaux actifs d'un projet. Veillez à arrêter l'exécution de nouveaux travaux.