Maison base de données tutoriel mysql kettle api 执行转换

kettle api 执行转换

Jun 07, 2016 pm 03:10 PM
api import 执行 转换

import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.util.Date; import be.ibridge.kettle.core.Const; import be.ibridge.kettle.core.LogWriter; import be.ibridge.kettle.core.NotePadMeta; import b


import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;

import be.ibridge.kettle.core.Const;
import be.ibridge.kettle.core.LogWriter;
import be.ibridge.kettle.core.NotePadMeta;
import be.ibridge.kettle.core.database.Database;
import be.ibridge.kettle.core.database.DatabaseMeta;
import be.ibridge.kettle.core.exception.KettleException;
import be.ibridge.kettle.trans.StepLoader;
import be.ibridge.kettle.trans.Trans;
import be.ibridge.kettle.trans.TransHopMeta;
import be.ibridge.kettle.trans.TransMeta;
import be.ibridge.kettle.trans.step.StepMeta;
import be.ibridge.kettle.trans.step.StepMetaInterface;
import be.ibridge.kettle.trans.step.selectvalues.SelectValuesMeta;
import be.ibridge.kettle.trans.step.tableinput.TableInputMeta;
import be.ibridge.kettle.trans.step.tableoutput.TableOutputMeta;

/**
 *
 *

Title:
 * 本文描述了以下操作:

1)           建立一个新的转换(transformation)

2)           把转换(transformation)存储为XML文件

3)           生成需要在目标表运行的SQL语句

4)           执行转换(transformation)

5)           删除目标表,可以使测试程序可以反复执行(这一点可根据需要修改)。


 *

Description: TODO 类的功能描述


 *

Copyright: Copyright (c) 2003



 * @author 洪亮
 * @version 1.0
 *

------------------------------------------------------------


 *

修改历史


 *

  序号    日期       时间        修 改 人    修 改 原 因


 *

   1    2006-9-20   下午05:59:06     洪亮       创建 


 *
 */

public class TransBuilderME
{
    public static final String[] databasesXML = {
        "" +
        "" +
            "target" +
            "192.168.169.220" +
            "ORACLE" +
            "Native" +
            "NMSDB" +
            "1521" +
            "UCP" +
            "UCP" +
          "
",
         
          "" +
          "" +
              "source" +
              "192.168.169.220" +
              "ORACLE" +
              "Native" +
              "NMSDB" +
              "1521" +
              "UCP" +
              "UCP" +
            "

    };

    /**
     * Creates a new Transformation using input parameters such as the tablename to read from.
     * @param transformationName The name of the transformation
     * @param sourceDatabaseName The name of the database to read from
     * @param sourceTableName The name of the table to read from
     * @param sourceFields The field names we want to read from the source table
     * @param targetDatabaseName The name of the target database
     * @param targetTableName The name of the target table we want to write to
     * @param targetFields The names of the fields in the target table (same number of fields as sourceFields)
     * @return A new transformation
     * @throws KettleException In the rare case something goes wrong
     */
    public static final TransMeta buildCopyTable(String transformationName, String sourceDatabaseName, String sourceTableName, String[] sourceFields, String targetDatabaseName, String targetTableName, String[] targetFields) throws KettleException
    {
        LogWriter log = LogWriter.getInstance();
       
        try
        {
            //
            // Create a new transformation...
            //传输元信息
            TransMeta transMeta = new TransMeta();
            transMeta.setName(transformationName);//传输名称
           
            // Add the database connections
            for (int i=0;i            {
                DatabaseMeta databaseMeta = new DatabaseMeta(databasesXML[i]);//数据库元信息
                transMeta.addDatabase(databaseMeta);//传输元  中加入数据库元信息
            }
           
            DatabaseMeta sourceDBInfo = transMeta.findDatabase(sourceDatabaseName);//查找源数据库元信息
            DatabaseMeta targetDBInfo = transMeta.findDatabase(targetDatabaseName);//查找目标数据库元信息

           
            //
            // Add a note
            //
            String note = "Reads information from table [" + sourceTableName+ "] on database [" + sourceDBInfo + "]" + Const.CR;
            note += "After that, it writes the information to table [" + targetTableName + "] on database [" + targetDBInfo + "]";
            NotePadMeta ni = new NotePadMeta(note, 150, 10, -1, -1);//注释信息
            transMeta.addNote(ni);

            //
            // create the source step...
            //
            String fromstepname = "read from [" + sourceTableName + "]";//from步骤名称
            TableInputMeta tii = new TableInputMeta();//表输入元数据信息
            tii.setDatabaseMeta(sourceDBInfo);//为表输入 指定 数据库
            String selectSQL = "SELECT "+Const.CR;//拼接查询sql语句
            for (int i=0;i            {
                if (i>0) selectSQL+=", "; else selectSQL+="  ";
                selectSQL+=sourceFields[i]+Const.CR;
            }
            selectSQL+="FROM "+sourceTableName;
            tii.setSQL(selectSQL);//设置查询sql语句

            StepLoader steploader = StepLoader.getInstance();//???

            String fromstepid = steploader.getStepPluginID(tii);
            //步骤元数据信息
            StepMeta fromstep = new StepMeta(log, fromstepid, fromstepname, (StepMetaInterface) tii);
            fromstep.setLocation(150, 100);
            fromstep.setDraw(true);
            fromstep.setDescription("Reads information from table [" + sourceTableName + "] on database [" + sourceDBInfo + "]");
            //传输中 添加步骤
            transMeta.addStep(fromstep);
            //
            // add logic to rename fields
            // Use metadata logic in SelectValues, use SelectValueInfo...
            //选择字段(重命名)
            SelectValuesMeta svi = new SelectValuesMeta();
            svi.allocate(0, 0, sourceFields.length);
            for (int i = 0; i             {
             //设置源字段和目标字段
                svi.getMetaName()[i] = sourceFields[i];
                svi.getMetaRename()[i] = targetFields[i];
            }

            String selstepname = "Rename field names";
            //获取步骤插件ID
            String selstepid = steploader.getStepPluginID(svi);
            //创建步骤元数据信息
            StepMeta selstep = new StepMeta(log, selstepid, selstepname, (StepMetaInterface) svi);
            selstep.setLocation(350, 100);
            selstep.setDraw(true);
            selstep.setDescription("Rename field names");
            //添加步骤
            transMeta.addStep(selstep);

            //传输连接元数据信息(连接from和select)
            TransHopMeta shi = new TransHopMeta(fromstep, selstep);
            transMeta.addTransHop(shi);//添加到传输元对象
            fromstep = selstep;//然后设置from步骤为select步骤

            //
            // Create the target step...
            //
            //
            // Add the TableOutputMeta step...
            //设置目标步骤名称
            String tostepname = "write to [" + targetTableName + "]";
            //表输出元对象
            TableOutputMeta toi = new TableOutputMeta();
            toi.setDatabase(targetDBInfo);//设置数据库
            toi.setTablename(targetTableName);//设置表名
            toi.setCommitSize(3000);//设置批量提交数
            toi.setTruncateTable(true);//是否清除原有数据

            //获取步骤ID
            String tostepid = steploader.getStepPluginID(toi);
            //创建to步骤
            StepMeta tostep = new StepMeta(log, tostepid, tostepname, (StepMetaInterface) toi);
            tostep.setLocation(550, 100);
            tostep.setDraw(true);
            tostep.setDescription("Write information to table [" + targetTableName + "] on database [" + targetDBInfo + "]");
            transMeta.addStep(tostep);//添加步骤

            //
            // Add a hop between the two steps...
            //
            //创建连接 from--to
            TransHopMeta hi = new TransHopMeta(fromstep, tostep);
            transMeta.addTransHop(hi);

            // OK, if we're still here: overwrite the current transformation...
            return transMeta;
        }
        catch (Exception e)
        {
            throw new KettleException("An unexpected error occurred creating the new transformation", e);
        }
    }

    /**
     * 1) create a new transformation
     * 2) save the transformation as XML file
     * 3) generate the SQL for the target table
     * 4) Execute the transformation
     * 5) drop the target table to make this program repeatable
     *
     * @param args
     */
    public static void main(String[] args) throws Exception
    {
        long start = new Date().getTime();
        // Init the logging...
        LogWriter log = LogWriter.getInstance("TransBuilder.log", true, LogWriter.LOG_LEVEL_DETAILED);
       
        // Load the Kettle steps & plugins
        StepLoader stloader = StepLoader.getInstance();
        if (!stloader.read())
        {
            log.logError("TransBuilder",  "Error loading Kettle steps & plugins... stopping now!");
            return;
        }
       
        // The parameters we want, optionally this can be
        String fileName = "./NewTrans.xml";
        String transformationName = "Test Transformation";
        String sourceDatabaseName = "source";
        String sourceTableName = "emp_collect";
        String sourceFields[] = {
          "empno",      
          "ename",      
          "job",        
          "mgr",        
          "comm",       
          "sal",        
          "deptno",     
          "birthday"   
 
            };

        String targetDatabaseName = "target";
        String targetTableName = "emp_kettle01";
        String targetFields[] = {
          "empno01",      
          "ename01",      
          "job01",        
          "mgr01",        
          "comm",       
          "sal",        
          "deptno",     
          "birthday"
            };

       
        // Generate the transformation.
        //创建转换元对象
        TransMeta transMeta = TransBuilderME.buildCopyTable(
                transformationName,
                sourceDatabaseName,
                sourceTableName,
                sourceFields,
                targetDatabaseName,
                targetTableName,
                targetFields
                );
//        transMeta = new  TransMeta();
        // Save it as a file:
        //传输元对象 中获得XML,并输出
        String xml = transMeta.getXML();
        DataOutputStream dos = new DataOutputStream(new FileOutputStream(new File(fileName)));
        dos.write(xml.getBytes("UTF-8"));
        dos.close();
        System.out.println("Saved transformation to file: "+fileName);

        // OK, What's the SQL we need to execute to generate the target table?
        //获得sql语句,创建表语句
        String sql = transMeta.getSQLStatementsString();

        // Execute the SQL on the target table:
        //创建表
        Database targetDatabase = new Database(transMeta.findDatabase(targetDatabaseName));
        targetDatabase.connect();//连接数据库
        targetDatabase.execStatements(sql);//执行sql
       
        // Now execute the transformation...
        //执行传输任务
        Trans trans = new Trans(log, transMeta);
        trans.execute(null);
        trans.waitUntilFinished();//等待执行完毕
       
        // For testing/repeatability, we drop the target table again
//        targetDatabase.execStatement("drop table "+targetTableName);
        targetDatabase.disconnect();//断开数据库连接
       
        long end = new Date().getTime();
        System.out.println("运行时间:" + (end - start) / 1000 + "秒");
        long min = (end - start) / 1000 / 60;
        long second = (end - start) / 1000 % 60;
        System.out.println("运行时间:" + min + "分钟" + second + "秒");
    }


}
 

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Conseils pratiques pour convertir des lettres anglaises pleine chasse en demi-chasse Conseils pratiques pour convertir des lettres anglaises pleine chasse en demi-chasse Mar 26, 2024 am 09:54 AM

Conseils pratiques pour convertir des lettres anglaises pleine chasse en formes demi-largeur. Dans la vie moderne, nous sommes souvent en contact avec des lettres anglaises et nous devons souvent saisir des lettres anglaises lorsque nous utilisons des ordinateurs, des téléphones portables et d'autres appareils. Cependant, nous rencontrons parfois des lettres anglaises pleine chasse et nous devons utiliser la forme demi-largeur. Alors, comment convertir des lettres anglaises pleine chasse en demi-chasse ? Voici quelques conseils pratiques pour vous. Tout d’abord, les lettres et chiffres anglais pleine chasse font référence à des caractères qui occupent une position pleine largeur dans la méthode de saisie, tandis que les lettres et chiffres anglais demi-chasse occupent une position pleine largeur.

Explication détaillée de la méthode d'implémentation de conversion des mois PHP en mois anglais Explication détaillée de la méthode d'implémentation de conversion des mois PHP en mois anglais Mar 21, 2024 pm 06:45 PM

Cet article présentera en détail comment convertir des mois en PHP en mois en anglais et donnera des exemples de code spécifiques. Dans le développement PHP, nous devons parfois convertir des mois numériques en mois anglais, ce qui est très pratique dans certains scénarios de traitement de dates ou d'affichage de données. Les principes de mise en œuvre, les exemples de code spécifiques et les précautions seront expliqués en détail ci-dessous. 1. Principe de mise en œuvre En PHP, vous pouvez convertir des mois numériques en mois anglais en utilisant la classe DateTime et la méthode de format. Date

Comment convertir de la musique qq au format mp3 Convertir de la musique qq au format mp3 sur téléphone mobile Comment convertir de la musique qq au format mp3 Convertir de la musique qq au format mp3 sur téléphone mobile Mar 21, 2024 pm 01:21 PM

QQ Music permet à tout le monde de regarder des films et de soulager l'ennui. Vous pouvez utiliser ce logiciel tous les jours pour satisfaire facilement vos besoins. Un grand nombre de chansons de haute qualité sont disponibles pour que tout le monde puisse les écouter. la prochaine fois que vous les écouterez, vous n'aurez pas besoin d'une connexion Internet. Les chansons téléchargées ici ne sont pas au format MP3 et ne peuvent pas être utilisées sur d'autres plateformes. Une fois l'abonnement expiré, il n'y a aucun moyen de les réécouter. , de nombreux amis souhaitent convertir les chansons au format MP3 Ici, l'éditeur explique Vous proposez des méthodes pour que tout le monde puisse les utiliser ! 1. Ouvrez QQ Music sur votre ordinateur, cliquez sur le bouton [Menu principal] dans le coin supérieur droit, cliquez sur [Transcodage audio], sélectionnez l'option [Ajouter une chanson] et ajoutez les chansons qui doivent être converties ; les chansons, cliquez pour sélectionner Convertir en [mp3]

Comment convertir des lettres anglaises pleine chasse en lettres demi-chasse Comment convertir des lettres anglaises pleine chasse en lettres demi-chasse Mar 25, 2024 pm 02:45 PM

Comment convertir des lettres anglaises pleine chasse en lettres demi-chasse Dans la vie quotidienne et au travail, nous rencontrons parfois des situations où nous devons convertir des lettres anglaises pleine chasse en lettres demi-chasse, par exemple lors de la saisie de mots de passe informatiques, de la modification de documents ou concevoir des mises en page. Les lettres et chiffres anglais pleine chasse font référence à des caractères de même largeur que les caractères chinois, tandis que les lettres anglaises demi-chasse font référence à des caractères de largeur plus étroite. En fonctionnement réel, nous devons maîtriser quelques méthodes simples pour convertir les lettres anglaises pleine chasse en lettres demi-chasse afin de pouvoir traiter le texte et les chiffres plus facilement. 1. Lettres anglaises pleine largeur et lettres anglaises demi-largeur

Tutoriel PHP : Comment convertir un type int en chaîne Tutoriel PHP : Comment convertir un type int en chaîne Mar 27, 2024 pm 06:03 PM

Tutoriel PHP : Comment convertir un type Int en chaîne En PHP, la conversion de données entières en chaîne est une opération courante. Ce didacticiel expliquera comment utiliser les fonctions intégrées de PHP pour convertir le type int en chaîne, tout en fournissant des exemples de code spécifiques. Utiliser cast : En PHP, vous pouvez utiliser cast pour convertir des données entières en chaîne. Cette méthode est très simple. Il vous suffit d'ajouter (string) avant les données entières pour les convertir en chaîne. Vous trouverez ci-dessous un exemple de code simple

Découvrez rapidement la conversion de valeurs ASCII en PHP Découvrez rapidement la conversion de valeurs ASCII en PHP Mar 28, 2024 pm 06:42 PM

La conversion de valeurs ASCII en PHP est un problème souvent rencontré en programmation. ASCII (American Standard Code for Information Interchange) est un système de codage standard permettant de convertir des caractères en nombres. En PHP, nous devons souvent effectuer des conversions entre caractères et nombres via le code ASCII. Cet article expliquera comment convertir les valeurs ASCII en PHP et donnera des exemples de code spécifiques. 1. Changez les personnages

Guide d'utilisation de l'API Oracle : exploration de la technologie d'interface de données Guide d'utilisation de l'API Oracle : exploration de la technologie d'interface de données Mar 07, 2024 am 11:12 AM

Oracle est un fournisseur de systèmes de gestion de bases de données de renommée mondiale et son API (Application Programming Interface) est un outil puissant qui aide les développeurs à interagir et à s'intégrer facilement aux bases de données Oracle. Dans cet article, nous approfondirons le guide d'utilisation de l'API Oracle, montrerons aux lecteurs comment utiliser la technologie d'interface de données pendant le processus de développement et fournirons des exemples de code spécifiques. 1.Oracle

exe en php : une stratégie efficace pour réaliser l'expansion des fonctions exe en php : une stratégie efficace pour réaliser l'expansion des fonctions Mar 04, 2024 pm 09:36 PM

EXE vers PHP : une stratégie efficace pour étendre les fonctions. Avec le développement d'Internet, de plus en plus d'applications ont commencé à migrer vers le Web pour obtenir un accès utilisateur plus large et des opérations plus pratiques. Dans ce processus, la demande de conversion de fonctions initialement exécutées sous forme de fichiers EXE (fichiers exécutables) en scripts PHP augmente également progressivement. Cet article explique comment convertir EXE en PHP pour réaliser une extension fonctionnelle et donne des exemples de code spécifiques. Pourquoi convertir EXE en PHP multiplateforme : PHP est un langage multiplateforme

See all articles