批量生成表结构
一 使用kettle 自带功能
在工具向导里面,找到复制多表向导
选择 对应输入 输出的连接
选择需要抽取的表
输入job名称 及 连接地址
kettle可以自动检测在目标表中没有的表,并创建好对应转换
二 自制批量建表job 研究中
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {if (first) {first = false;/* TODO: Your code here. (Using info fields)FieldHelper infoField = get(Fields.Info, "info_field_name");RowSet infoStream = findInfoRowSet("info_stream_tag");Object[] infoRow = null;int infoRowCount = 0;// Read all rows from info step before calling getRow() method, which returns first row from any// input rowset. As rowMeta for info and input steps varies getRow() can lead to errors.while((infoRow = getRowFrom(infoStream)) != null){// do something with info datainfoRowCount++;}*/}Object[] r = getRow();//本地连接获取目标数据库连接org.pentaho.di.core.database.DatabaseMeta dbmeta = getTransMeta().findDatabase("B_Mysql_1");if(dbmeta!=null){org.pentaho.di.core.database.Database db=new org.pentaho.di.core.database.Database(dbmeta);try{db.connect();//String tablename = getVariable("table_name");String tablename = 'bpc';//在日志中显示创建表名logBasic("开始创建表:" + tablename);if(tablename!=null && tablename.trim().length()>0){logBasic("123");String sql = db.getDDLCreationTable(tablename,data.inputRowMeta );//${TABLENAME}// 目前错误在这里,找不到表结构logBasic("124");//sql = sql.replace("TABLE", "TABLE public.");db.execStatement(sql.replace(";", ""));logBasic(sql);}}catch(Exception e){logError("创建表出现异常",e);}finally{db.disconnect();}}return false;}
批量抽取数据
说明:变量名称 table_name 存放表名称
整体步骤说明,获取表名称,依次执行表抽取
获取表名步骤
新建表 table_name 将需要进行抽取的表名存入
查询 table_name 数据 字段别名 table_name,将输入存入结果集中
数据抽取步骤
建立表输入表输出 测试抽取其中一个表
将表输入表输出表名替换成变量名 table_name 写法 ${table_name}

