|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : janvier 2007 Messages : 149 ![]() |
Bonjour,
J'aimerai dupliquer d'un SGBD (SQL Server) à un autre SGBD (MySQL), une base de données complete de plusieurs tables sans avoir à faire chaque table indépendament. Est ce possible avec Talend ? (Pour le moment, je n'y arrive pas) Si oui, comment ? Merci G |
|
00
|
|
|
#2 | |
|
Membre émérite
![]() ![]() |
Citation:
Ou es tu bloquer dans la creation de ton job, qu'as tu reussi à faire? Voila qq elements tout de meme Avoir les listes des tables en provenance de M$ SQL Server : Dans un tMSSqlInput, indique comme schéma un unique champ (que l'on nomera tablename) et spécifie comme requete soit SELECT table_name FROM information_schema.tables WHERE table_type='BASE TABLE' ou bien si tu preferes appeler la proc stock prévue à cet effet spécifie plutot : SELECT name FROM sysobjects WHERE type='U' Chacune des tables de ta base de données va donc arriver row apres row et sera disponible par exemple via la variable $tMSSqlInput_1['tablename'] ($tMSSqlInput_1 est le nom du composant, tablename le nom du champs dans le schéma de sortie du tMSSqlInput). Pour écrire un fichier dump portant le nom de la table en question (row apres row soit table apres table) je ne connais pas de tete comment faire dans M$ SQLServer (un peu de googling devrait te donner la solution, le mieux cela serait de paramètrer la facon de faire le dump afin qu'il soit conforme aux données d'entrées de ta base de données). Cela constitut le sous job 1. Tu le relies avec un runBefore au sous job 2. Le sous job2 va consister en un tFileList (lire tous tes fichiers de dump sql server) afin de les insérer en bulk dans la table correspondante MySQL (composant tMysqlOutputBulkExec dont le champ table sera rempli par le nom du fichier via la variable $_globals{tFileList_1}{CURRENT_FILE}. N'oublie pas d'utiliser l'autocomplétion via Ctrl+Space pour que TOS écrive tout seul les différents nom de variables disponibles). En quelques composants tu devrais pouvoir y arriver! Le truc un peu compliqué dans ton cas c'est que tu ne connais pas à l'avance le schéma des tables que tu veux manipuler. J'espere que ces qq pistes te permettrons de résoudre ton problème! Cédric |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : janvier 2007 Messages : 149 ![]() |
Merci pour votre réponse
J’utilise la dernière version de TOS (TOS-Win32-r3065-V2.0.0) avec la génération en java. La structure MYSQL n’est pas crée car il y a un 25 tables donc c’est assez lourd et j’aimerai faire avoir un job qui soit indépendant de ma structure de table afin de le réutiliser en ayant juste a changer le SGBD source et destinataire Comme je n’etais pas sur de la faisabilité de ce que je demande, je n’ai pas fait grand chose hormis les DB connections aux 2 SGBD. J’ai suivi vos recommandations. J’ai donc pour la 1ere partie : tDBInput ----------------------------------------> tExternalSortOutput Si j’ai bien compris, je dois obtenir en lançant uniquement ce job, autant de fichier nom_de_table.txt que de table dans ma base. Quelques questions : 1 – Lorsque j’entre la requête : "SELECT table_name FROM information_schema.tables WHERE table_type='BASE TABLE'", j’ai un schéma construit par defaut qui contient : Catalog_name, Default_Character_..., …, … Schema_Name et Schema_Owner. Pourquoi remplacer tout par tablename ? 2 - Pour créer mes fichiers, j’ai mis comme filename : « C:/... /workspace/"$tMSSqlInput_1['tablename']".txt" mais visiblement, ca ne convient pas. Quelle serait la chaine a mettre ? 3 – Une fois que j’ai mes fichiers, il me reste juste à faire un select * from table pour récupérer toutes mes données (le sous job 3) ? Merci par avance Guillaume |
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : janvier 2007 Messages : 149 ![]() |
Un pti up
|
|
00
|
|
|
#5 | |
|
Membre émérite
![]() ![]() |
Citation:
1/ Dans ce cas, tu peux deja créer en masse les schémas sources adaptés. (via le repository>Metadata>DbCon>Create DBCon puis create Table Schema, select all...) 2/ Ensuite tu crees un DBCon (via le repository>Metadata>DbCon>Create DBCon) pour ta base de données de sortie (ne cree pas de schema, utilise plutot les fonctions d'autopropagate de tes schemas sources) 3/ Creer un job et depose un tDBMSSQLInput, un tMySQLOutput, relie les via un lien row (bouton droit sur le tDBMSSQLInput) 4/ Configure le tMSSQLInput avec la DBCON source définie en 1/, met le schemaType sur Repository et configure le tMySQLOutput avec la DBCON définie en 2/. Ajoute l'action 'Create Table if not exist' (ou drop and create table suivant si tu veux faire un annule et remplace à chaque fois que tu fais tourner ton job) dans ton tMySQLOutput 5/ Ensuite "copy/paste" ton mini-job 24 fois . Sur chacun de tes tMSSQLInput, selectionne le schema suivant et clique sur le bouton GuessQuery 6/C'est fini, normalement tu as fait cette opération en moins d'un 1 heure et tu as 25 jobs indépendants ce qui va te permettrent de pouvoir facilement et graphiquement les séquencer (relie les différents tMSSqlInput via des liens RunBefore, RunAfter) suivant l'ordre que tu veux (tu as ders tables peres à insérer avant des tables filles) surtout si ton MySQL est en InnoDB et que tu as des foreign keys, gerer les erreurs independamment pour chacune de tes 25 réplications, de rajouter pour certaines tables des transformations spécifiques (ajout d'un tMap au milieu, utilisation d'une routine spécifique, utiliser les fonctions de date car tu as besoin d'un format un peu différent entre ta source et ta destination)... Bon courage! Cédric |
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Inscription : janvier 2007 Messages : 149 ![]() |
Merci pour ta réponse !
Je suis entrain de bencher ma machine avec ce gros job ^^ ca mouline depuis 10min
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Inscription : janvier 2007 Messages : 149 ![]() |
Alors j'ai eu une erreur et en regardant dans les proprietés, il n'etait pas possible de lui dire de créer la table si elle n'existait pas :/
![]() J'ai lancé Talend V2 M1 et il ya : Action on table et Action on data C'etait juste pour faire remonter l'info, jvais utiliser la M1 pour faire mes jobs |
|
00
|
|
|
#8 | |
|
Membre émérite
![]() ![]() |
Citation:
Je te conseille de rester en Talend V2.0.0 et d'utiliser un projet de type Perl si tu as besoin de cette fonction. Cédric |
|
|
00
|
|
|
#9 | |
|
Membre habitué
![]() Inscription : janvier 2007 Messages : 149 ![]() |
Bonjour,
Je finis par posté l'erreur que j'ai, aprés m'etre cassé la tete dessus pendant un bon moment :/ C'est surement un truc tout simple mais je trouve pas J'ai recré un projet en Perl pour pouvoir agir sur les tables et notamment faire le fameux "Create Table if Not Exist". Lorsque je lance le job (sur une table n'ayant pas de clé étrangere) j'obtiens une erreur : Citation:
![]() Si vous avez une idée |
|
|
00
|
|
|
#10 | |
|
Membre habitué
![]() Inscription : janvier 2007 Messages : 149 ![]() |
La suite labas : http://talendforge.org/forum/viewtop...pid=2579#p2579
Pour résumer, je pensais que Talend recuperai la taille des char de MS SQL Server mais en fait il faut les préciser. Rbillerey du support Talend m'a donné un tip interessant afin de verifier le code sql generé par Talend. Il faut editer le fichier : Citation:
On obtient dans la console d'erreur le code sql et on voit donc plus simplement la ou on s'est planté. Un grand merci a RBillerey et Cedric pour leur aide.
|
|
|
00
|
|
|
#11 | |
|
Invité de passage
![]() |
Citation:
J'aimerai faire le même exercice mais avec 75 tables, que conseil tu comme autre méthode ? J'ai téléchargé Talend 4.0.3 et j'ai une base oracle vers une base postgresql... Merci d'avance pour ta résponse ! @# |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com