Talend et MySql GROUP_CONCAT

Lors d’une mission récente, je me suis retrouvé confronté à un problème de configuration Mysql avec Talend : la limite du nombre de caractères de la fonction GROUP_CONCAT. De quoi s’agit t-il ? Comment augmenter cette taille maximale ? Quelle
Robin CHAUVINMis à jour le 24 Mars 2016
Logo_talend.jpg

Introduction

Lors dune mission récente, je me suis retrouvé confronté à un problème de configuration Mysql avec TalendTalend est un logiciel ETL permettant de faire de l'Extract, de la Transformation et du chargement (Load) de données. : la limite du nombre de caractères de la fonction GROUP_CONCAT.

De quoi sagit t-il ? Comment augmenter cette taille maximale ? Quelle est la bonne pratique ? Cest ce que nous allons voir rapidement dans cet article.

Rappel sur la fonction GROUP_CONCAT de MySql

La fonction GROUP_CONCAT() permet de regrouper les valeurs non nulles d’un groupe en une chaîne de caractère.

Par exemple, là où la requête suivante ramènerait 5 lignes (un nom par ligne)

FROM client

 

La requête suivante, elle, ramènerait une seule ligne, concaténation des 5 noms

FROM client

(Note : Si aucun SEPARATOR nest renseigné, le caractère de séparation par défaut est la virgule)

 

La chaîne de caractères résultante est cependant limitée en nombre de caractères (par défaut, à 1024 caractères daprès la documentation MySql, mais de mon expérience avec Talend, 342 caractères)

Pour contourner ce problème, il est possible de modifier ce paramètre par lune des requêtes suivantes :

SET SESSION group_concat_max_len = 1000000;

(Pour appliquer le paramètre jusquà que la session courant se termine)

 

SET GLOBAL group_concat_max_len = 1000000;

(Pour appliquer le paramètre jusquau prochain redémarrage du serveur)

Pour modifier le paramètre de version définitive, rendez vous dans le fichier de configuration de MySql

La fonction GROUP_CONCAT de MySql en détails sur http://sql.sh/fonctions/group_concat

 

Appliquer le paramètre avec Talend

Pour appliquer ce paramètre avec Talend, il est nécessaire de lancer la requête de paramétrage avant toute autre requête MySql. Pour ce faire, utiliser le composant tMysqlRow.

Le but dun job Talend nétant pas de modifier de manière définitive la configuration et le paramétrage du serveur MySql, je recommande lutilisation du SET SESSION (et non du SET GLOBAL).

Pour que ce paramètre soit appliqué à lensemble du job, il est obligatoire de créer une connexion MySql en début de job et de lutiliser pour chacune des requêtes concernées (et non pas, de fait, de créer une nouvelle connexion à chaque tMysqlInput).

 

Voici en image à quoi devrait ressembler votre job (hors traitements) 

talend_group_concat_mysql.jpg