SQL5104N ou SQL5105N erreur renvoyée lors de l'interrogation d'une table Datalake

Lors de l'interrogation d'une table Datalake, une erreur SQL5104N ou SQL5105N peut être renvoyée si une valeur nulle est lue pour une colonne définie comme NOT NULL.

Symptômes

Si une valeur NULL est lue pour une colonne définie comme NOT NULL, une erreur sera renvoyée.

Raisons

Plusieurs scénarios peuvent être à l'origine de cette situation, mais la cause la plus probable est lorsqu'une table Datalake contenant des données existantes est modifiée pour ajouter une nouvelle colonne définie comme NOT NULL. Une requête qui lit les données de la table existante n'aura pas de valeur pour la nouvelle colonne et renverra donc une valeur NULL. Ce problème peut également se produire si une table est importée de watsonx.data et qu'elle a été modifiée de la même manière.

Dans la plupart des cas, une erreur SQL5104N sera renvoyée :
SQL5104N  The statement failed because the data in HDFS cannot be mapped to 
the Hadoop table definition.  Hadoop table name: "mcknight.kathy".  Column 
index: "1".  Log entry identifier: "[BSL-1-1e2754f01]".  Reason: "NULL in a 
non-nullable column".  SQLSTATE=530AC
Dans certains cas, une erreur SQL5105N peut être renvoyée, indiquant que les données d'une colonne sont manquantes, comme dans le cas suivant :
SQL5105N  The statement failed because a Big SQL component encountered an
error.  Component receiving the error: "BigSQL IO".  Component returning the
error: "UNKNOWN".  Log entry identifier: "[BSL-1-1d7af4eb8]".  Reason:
"Missing required field: c2".  SQLSTATE=58040

Résolution du problème

Pour éviter ce problème, ne modifiez pas une table Datalake existante en ajoutant une nouvelle colonne avec une contrainte NOT NULL , surtout si la table contient déjà des données.

Si ce problème se pose, il peut être résolu en modifiant la table pour supprimer la contrainte NOT NULL de la colonne concernée.