Après plusieurs discussions ouvertes sur le forum de DVP dans la catégorie ETL/Talend, les versions Talend for Data Integration antérieures à 5.2 ne sont pas compatibles avec la version 7 de java.
C’était déjà le cas pour pour la version entreprise concernant la Web Application de gestion « Administration Center » (en tout cas pour l’avoir tester avec la version 4.1.3). Mais après pour ce problème c’était surtout dû à la non compatibilité Tomcat/Talend.
Lire la suite
Archives mensuelles : janvier 2013
Filtrage non égalitaire avec Oracle
Ce titre d’article semble bateau au premier abord mais il me semble essentiel de parler de cette expérience pour le moins « étrange » avec un filtre sur j’ai effectué sur Oracle ces jours-ci.
Lire la suite
Ajouter une année à une date
Pour ajouter une année à une date on aurait tendance à faire :
1 | select sysdate + 365 AS ANNEE_SUP from dual; |
Ou :
1 | select ADD_MONTHS(sysdate, 12) AS ANNEE_SUP from dual; |
Mais en fin de compte la bonne syntaxe est :
1 | select sysdate + interval '1' year AS ANNEE_SUP from dual; |
Jointures BETWEEN dans les tMap avec Talend
Avec les versions inférieures à la version 5 de Talend for Data Integration, on ne pouvait faire que des jointures égalitaires dans les tMap :
Mais avec la version 5, il est maintenant possible de faire des jointures >, < =. Un vrai plus surtout quand très peu d’ETL le propose :
Maintenant après l’avoir testé sur la version 5.1.1 (TOS for Data Integration), cela ne fonctionne pas. En regardant le code on comprend mieux pourquoi : on a beau mettre autre chose que « = », le code généré continue à mettre « = »… en espérant que cette option marchera dans les prochaines versions…
Parallélisation des lookups dans Talend
La version 5 de Talend Enterprise for Data Intregration propose la parallélisation du chargement des lookups dans les composants tMap. (Non disponible dans TOS for Data Integration).
Le gros avantage étant bien évidement un gain de temps significatif sur des sous-jobs ayant de multiples lookups. Par contre l’option est intéressante uniquement si votre serveur d’exécution comporte plusieurs processeurs.
En attente de tests approfondis mais cette option fait rêver !
Compter les lignes des tables d’un schéma en PL/SQL
Pour compter le nombre de lignes de toutes les tables d’un schéma Oracle il est nécessaire d’utiliser le bloc anonyme suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | DECLARE nbLignes NUMBER := 0; BEGIN FOR C1 IN ( select TABLE_NAME from user_tables ) LOOP EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || C1.TABLE_NAME INTO nbLignes; DBMS_OUTPUT.PUT_LINE(C1.TABLE_NAME || ': ' || nbLignes); END LOOP; END; |
Il est bien évidement possible de filtrer les tables en ajoutant une instruction WHERE dans la requête du curseur C1
Création et alimentation d’une dimension DATE
Lors de la création d’un entrepôt de données, bien souvent, il contient une dimension DATE contenant la liste des dates depuis l’année 1900 jusqu’à l’année 2999. Cette table contenant plusieurs attributs comme par exemple :
- La date au format date
- La date au format chaine de caractère sous la forme DD/MM/YYYY
- La date au format numérique sous la forme YYYYMMDD
- Le jour de l’année
- …
Voici donc un exemple de création de DIM_DATE en Oracle.
Lire la suite
Modification d’une séquence Oracle en PL/SQL
Pour modifier une séquence existante il est nécessaire de la supprimer puis de la recréer. Pour effectuer cela facilement, il est possible de tester son existence dans un bloc PL/SQL anonyme et en fonction de son existence de la supprimer puis la créer :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | DECLARE existe NUMBER(1) := 0; seqName VARCHAR2(30) := 'MA_SEQUENCE'; BEGIN select COUNT(*) INTO existe from user_sequences WHERE SEQUENCE_NAME = seqName; IF existe = 1 THEN EXECUTE IMMEDIATE 'DROP SEQUENCE ' || seqName; END IF; EXECUTE IMMEDIATE 'create sequence ' || seqName || ' increment by 1 start with 1 minvalue -2 nocycle noorder nocache'; END; |