Vérification des valeurs par défaut dans un schéma récupéré

EnrichVersion
6.5
EnrichProdName
Talend Open Studio for Big Data
Talend Data Fabric
Talend Real-Time Big Data Platform
Talend Data Services Platform
Talend Open Studio for ESB
Talend Big Data Platform
Talend Big Data
Talend ESB
Talend Open Studio for MDM
Talend MDM Platform
Talend Open Studio for Data Integration
Talend Data Integration
Talend Data Management Platform
task
Qualité et préparation de données > Systèmes tiers > Composants Database
Création et développement > Systèmes tiers > Composants Database
Gouvernance de données > Systèmes tiers > Composants Database
EnrichPlatform
Studio Talend

Vérification des valeurs par défaut dans un schéma récupéré

Cet article vous permet d'éviter les erreurs de syntaxe pouvant survenir lors de la réutilisation de valeurs par défaut d'un schéma récupéré d'une table de base de données.

Lorsque vous récupérez le schéma d'une table de base de données, le Studio Talend récupère automatiquement la valeur par défaut de chaque champ et gère leur type en fonction. Par exemple, le Studio entoure les valeurs de type String de guillemets simples mais laisse les fonctions et les expressions sans modification. Cependant, il peut arriver qu'une fonction ou expression d'une base de données ne soit pas reconnue et soit traitée en tant que String et donc entourée de guillemets simples. Dans ce cas, une erreur de syntaxe ou un résultat d'exécution inattendu sera retourné(e) lorsque vous utilisez cette fonction ou expression pour créer des tables de bases de données.

Environnement

Vous pouvez rencontrer ce type d'erreur dans toutes les versions du Studio Talend.

Symptômes/Description

L'exemple suivant vous permet de comprendre ce type d'erreurs de syntaxe.

Dans une base de données Oracle se trouve une table nommée T1 :

CREATE TABLE T1
 (    ID NUMBER(5,0) NOT NULL ENABLE,
      DESCRIPTION VARCHAR2(50) DEFAULT 'no_description',
      CREATE_DATE DATE DEFAULT sysdate,
      CREATE_BY VARCHAR2(10) DEFAULT user
 )

Dans cette table, le type de données de la colonne CREATE_DATE est DATE et la valeur par défaut est configurée pour obtenir la date actuelle du système. Le type de données de la colonne CREATE_BY est VARCHAR2 et la valeur par défaut est configurée pour obtenir le nom de l'auteur connecté.

Lorsque le schéma de la table est récupéré dans le Studio Talend, le résultat s'affiche comme suit :

Les valeurs par défaut des colonnes CREATE_DATE et CREATE_BY sont mal interprétées, comme String et sont entourées de guillemets simples. Même si cette mauvaise interprétation n'affecte pas la lecture des données ou l'écriture de données dans la table, elle peut conduire à des résultats inattendus lorsque vous utilisez ce schéma récupéré pour créer une table avec un tCreateTable ou un composant de sortie de base de données, comme le tOracleOutput dans un Job, car cette mauvaise interprétation rend la structure de la table, dans l'instruction CREATE, différente de la table originale.

Utilisez le Job suivant pour comprendre plus en détails. Ce Job reflète un processus d'intégration de données typique, migrant une table d'une base de données vers une autre base de données et crée la table cible du même nom à l'aide d'un composant tOracleOutput. Les composants d'entrée et de sortie utilisent le schéma récupéré mentionné précédemment.

Dans le code généré du Job, l'instruction CREATE générée depuis le schéma du tOracleOutput est la suivante :

stmtCreate_tOracleOutput_1
        .execute("CREATE TABLE "
                + tableName_tOracleOutput_1
                + "(ID NUMBER(5,0)   not null ,DESCRIPTION VARCHAR2(50)  default 'no_description' ,CREATE_DATE DATE default 'sysdate' ,CREATE_BY VARCHAR2(10)  default 'user' )");

Les valeurs par défaut des colonnes CREATE_DATE et CREATE_BY sont différentes de celles de la table originale. Les valeurs, imprécises, par défaut dans cette instruction conduisent soit à l'échec de l'exécution du Job, soit à la génération de valeurs non attendues pour ces deux colonnes.

Résolution

Le Studio Talend récupère toutes les informations et les valeurs par défaut de la table, lorsqu'il récupère un schéma de table. Cependant, d'un point de vue technique, il n'est pas toujours possible de savoir si une valeur par défaut est une fonction ou une constante. Dans l'exemple décrit ci-dessus, la valeur par défaut de la colonne CREATE_BY, dans la table originale est une fonction retournant le nom des utilisateurs connectés, mais, à cause des guillemets simples dans l'instruction générée, la chaîne de caractères "user" sera retournée durant l'exécution.

Pour éviter ce problème, vous devez vérifier par vous-même que la valeur par défaut d'une fonction ou une expression a bien été gérée après récupération. Si ce n'est pas le cas, vous devez supprimer manuellement les guillemets simples. Dans cet exemple, vous devez supprimer les guillemets simples autour des valeurs par défaut des colonnes CREATE_DATE et CREATE_BY.