网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > JAVA > 新手入门 > 开发工具 > 开发技术:KETTLE JAVA API 开发实战记录  

开发技术:KETTLE JAVA API 开发实战记录

2006-09-26  作者:网管整理  来源:bitsCN.com  点评 投稿 收藏

//

            // create the source step...

网管朋友网www_bitscn_net

            //

网管u家u.bitscn@com

            String fromstepname = "read from [" + sourceTableName + "]";

中国网管联盟bitsCN.com

            TableInputMeta tii = new TableInputMeta(); 网管联盟bitsCN@com

            tii.setDatabaseMeta(sourceDBInfo); 网管u家bitscn.net

            String selectSQL = "SELECT "+Const.CR;

网管u家www.bitscn.net

            for (int i=0;i<sourceFields.length;i++)

网管u家bitscn.net

            {

网管朋友网www_bitscn_net

            /* modi by chq(www.chq.name): use * to replace the fields,经分析,以下语句可以处理‘*‘ */

中国网管联盟bitsCN.com

                if (i>0)

网管u家bitscn.net

                     selectSQL+=", ";

网管网www.bitscn.com

                else selectSQL+="  ";

网管u家bitscn.net

 

网管联盟bitsCN_com

                selectSQL+=sourceFields[i]+Const.CR; 中国网管联盟bitsCN.com

            } 网管有家www.bitscn.net

            selectSQL+="FROM "+sourceTableName;

网管u家bitscn.net

            tii.setSQL(selectSQL); 网管u家bitscn.net

 

网管有家bitscn.net

            StepLoader steploader = StepLoader.getInstance(); 网管u家bitscn.net

  网管网www_bitscn_com

            String fromstepid = steploader.getStepPluginID(tii); 网管有家www.bitscn.net

            StepMeta fromstep = new StepMeta(log, fromstepid, fromstepname, (StepMetaInterface) tii); 网管联盟bitsCN@com

            fromstep.setLocation(150, 100); 网管下载dl.bitscn.com

            fromstep.setDraw(true); 网管u家u.bitsCN.com

            fromstep.setDescription("Reads information from table [" + sourceTableName 网管朋友网www_bitscn_net

                                     + "] on database [" + sourceDBInfo + "]"); 网管有家bitscn.net

            transMeta.addStep(fromstep); 网管u家u.bitscn@com

 

网管bitscn_com

            //

网管联盟bitsCN@com

            // add logic to rename fields

网管联盟bitsCN@com

            // Use metadata logic in SelectValues, use SelectValueInfo...

中国网管联盟bitsCN.com

            // 网管有家www.bitscn.net

            /* 不必改名或映射 add by chq(www.chq.name) on 2006.07.20

网管网www_bitscn_com

            SelectValuesMeta svi = new SelectValuesMeta();

网管bitscn_com

            svi.allocate(0, 0, sourceFields.length); 网管下载dl.bitscn.com

            for (int i = 0; i < sourceFields.length; i++)

网管下载dl.bitscn.com

            {

网管u家bitscn.net

                svi.getMetaName()[i] = sourceFields[i]; 网管网www.bitscn.com

                svi.getMetaRename()[i] = targetFields[i];

网管联盟bitsCN_com

            } 网管u家u.bitsCN.com

 

网管有家bitscn.net

            String selstepname = "Rename field names";

网管论坛bbs_bitsCN_com

            String selstepid = steploader.getStepPluginID(svi);

网管论坛bbs_bitsCN_com

            StepMeta selstep = new StepMeta(log, selstepid, selstepname, (StepMetaInterface) svi);

网管联盟bitsCN_com

            selstep.setLocation(350, 100);

网管联盟bitsCN@com

            selstep.setDraw(true);

网管网www.bitscn.com

            selstep.setDescription("Rename field names"); 中国网管论坛bbs.bitsCN.com

            transMeta.addStep(selstep); 网管网www_bitscn_com

  网管网www_bitscn_com

            TransHopMeta shi = new TransHopMeta(fromstep, selstep);

网管网www.bitscn.com

            transMeta.addTransHop(shi); 网管论坛bbs_bitsCN_com

            fromstep = selstep; //设定了新的起点 by chq([link=http://www.chq.name]www.chq.name[/link]) on 2006.07.20 网管有家www.bitscn.net

            */

网管有家www.bitscn.net

            // 中国网管联盟bitsCN.com

            // Create the target step...

网管下载dl.bitscn.com

            //

网管u家u.bitscn@com

            //

网管联盟bitsCN_com

            // Add the TableOutputMeta step... 网管下载dl.bitscn.com

            // 中国网管论坛bbs.bitsCN.com

            String tostepname = "write to [" + targetTableName + "]";

网管网www_bitscn_com

            TableOutputMeta toi = new TableOutputMeta();

网管u家u.bitsCN.com

            toi.setDatabase(targetDBInfo);

网管网www_bitscn_com

            toi.setTablename(targetTableName);

网管u家u.bitsCN.com

            toi.setCommitSize(200);

网管u家bitscn.net

            toi.setTruncateTable(true);

网管论坛bbs_bitsCN_com

  网管联盟bitsCN_com

            String tostepid = steploader.getStepPluginID(toi);

网管网www_bitscn_com

            StepMeta tostep = new StepMeta(log, tostepid, tostepname, (StepMetaInterface) toi); 网管下载dl.bitscn.com

            tostep.setLocation(550, 100); 网管有家www.bitscn.net

            tostep.setDraw(true); 网管u家u.bitscn@com

            tostep.setDescription("Write information to table [" + targetTableName + "] on database [" + targetDBInfo + "]");

网管下载dl.bitscn.com

            transMeta.addStep(tostep);

网管下载dl.bitscn.com

  网管有家bitscn.net

            //

网管bitscn_com

            // Add a hop between the two steps...

中国网管联盟bitsCN.com

            //

网管有家www.bitscn.net

            TransHopMeta hi = new TransHopMeta(fromstep, tostep); 中国网管论坛bbs.bitsCN.com

            transMeta.addTransHop(hi); 网管bitscn_com

// OK, if we're still here: overwrite the current transformation...

中国网管联盟bitsCN.com

            return transMeta;

网管网www_bitscn_com

        }

网管下载dl.bitscn.com

        catch (Exception e)

网管u家www.bitscn.net

        {

中国网管联盟bitsCN.com

            throw new KettleException("An unexpected error occurred creating the new transformation", e);

网管联盟bitsCN_com

        }

网管网www_bitscn_com

    }

网管u家www.bitscn.net

 

网管u家u.bitscn@com

    /**

网管网www_bitscn_com

     * 1) create a new transformation 中国网管论坛bbs.bitsCN.com

     * 2) save the transformation as XML file

网管u家bitscn.net

     * 3) generate the SQL for the target table

网管下载dl.bitscn.com

     * 4) Execute the transformation 网管有家www.bitscn.net

     * 5) drop the target table to make this program repeatable

中国网管联盟bitsCN.com

     *

中国网管联盟bitsCN.com

     * @param args 网管u家u.bitscn@com

     */

网管朋友网www_bitscn_net

    public static void main(String[] args) throws Exception

网管朋友网www_bitscn_net

    {

网管下载dl.bitscn.com

       EnvUtil.environmentInit(); 网管联盟bitsCN_com

        // Init the logging... 网管u家bitscn.net

        LogWriter log = LogWriter.getInstance("TransBuilder.log", true, LogWriter.LOG_LEVEL_DETAILED);

网管论坛bbs_bitsCN_com

 

网管有家bitscn.net

        // Load the Kettle steps & plugins 网管网www_bitscn_com

        StepLoader stloader = StepLoader.getInstance();

网管u家bitscn.net

        if (!stloader.read())

网管下载dl.bitscn.com

        {

网管朋友网www_bitscn_net

            log.logError("TransBuilder",  "Error loading Kettle steps & plugins... stopping now!"); 网管下载dl.bitscn.com

            return; 网管u家u.bitsCN.com

        }

网管有家bitscn.net

  网管联盟bitsCN@com

        // The parameters we want, optionally this can be 网管网www_bitscn_com

        String fileName = "NewTrans.xml";

网管朋友网www_bitscn_net

        String transformationName = "Test Transformation";

中国网管论坛bbs.bitsCN.com

        String sourceDatabaseName = "source";

中国网管论坛bbs.bitsCN.com

        String sourceTableName = "testuser.source_table"; 网管u家u.bitsCN.com

        String sourceFields[] = {

网管网www_bitscn_com

               "*" 网管有家bitscn.net

               }; 网管联盟bitsCN_com

  网管u家u.bitscn@com

        String targetDatabaseName = "target"; 网管bitscn_com

        String targetTableName = "testuser.target_table";

网管u家u.bitscn@com

        String targetFields[] = { 网管有家bitscn.net

               "*"

网管u家www.bitscn.net

               }; 网管bitscn_com

 // Generate the transformation.

网管u家u.bitscn@com

        TransMeta transMeta = TransBuilder.buildCopyTable(

网管下载dl.bitscn.com

                transformationName, 网管网www_bitscn_com

                sourceDatabaseName, 网管论坛bbs_bitsCN_com

                sourceTableName, 网管bitscn_com

                sourceFields,

网管u家bitscn.net

                targetDatabaseName,

网管有家bitscn.net

                targetTableName, 网管朋友网www_bitscn_net

                targetFields

中国网管联盟bitsCN.com

                );

网管网www.bitscn.com

  网管下载dl.bitscn.com

        // Save it as a file:

网管u家u.bitscn@com

        String xml = transMeta.getXML(); 网管u家bitscn.net

        DataOutputStream dos = new DataOutputStream(new FileOutputStream(new File(fileName)));

中国网管联盟bitsCN.com

        dos.write(xml.getBytes("UTF-8"));

中国网管论坛bbs.bitsCN.com

        dos.close();

网管网www.bitscn.com

        System.out.println("Saved transformation to file: "+fileName);

中国网管联盟bitsCN.com

 

网管bitscn_com

        // OK, What's the SQL we need to execute to generate the target table? 网管论坛bbs_bitsCN_com

        String sql = transMeta.getSQLStatementsString();

网管u家u.bitsCN.com

 

网管下载dl.bitscn.com

        // Execute the SQL on the target table: 网管网www_bitscn_com

        Database targetDatabase = new Database(transMeta.findDatabase(targetDatabaseName));

网管有家www.bitscn.net

        targetDatabase.connect(); 网管朋友网www_bitscn_net

        targetDatabase.execStatements(sql); 网管bitscn_com

  中国网管联盟bitsCN.com

        // Now execute the transformation...

网管论坛bbs_bitsCN_com

        Trans trans = new Trans(log, transMeta);

网管有家bitscn.net

        trans.execute(null);

中国网管联盟bitsCN.com

        trans.waitUntilFinished(); 网管朋友网www_bitscn_net

  网管有家www.bitscn.net

        // For testing/repeatability, we drop the target table again

网管下载dl.bitscn.com

        /* modi by chq([link=http://www.chq.name]www.chq.name[/link]) on  2006.07.20 不必删表 网管联盟bitsCN_com

        //targetDatabase.execStatement("drop table "+targetTableName); 网管网www_bitscn_com

        targetDatabase.disconnect(); 网管网www_bitscn_com

    }

网管网www_bitscn_com

  网管u家u.bitscn@com

  网管u家u.bitscn@com

}

网管下载dl.bitscn.com

TAGs   实战   记录   开发       "   <   //   the   String   libext      
 上一篇:IntelliJ IDEA 版本5以及6的用户配置   下一篇:新手入门:使用 AppFuse 的七个理由
开发技术:KETTLE JAVA API 开发实战记录 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: