批量生成表结构

一 使用kettle 自带功能

在工具向导里面,找到复制多表向导
image.png
选择 对应输入 输出的连接
image.png
选择需要抽取的表
image.png
输入job名称 及 连接地址
image.png
kettle可以自动检测在目标表中没有的表,并创建好对应转换
image.png

二 自制批量建表job 研究中

  1. public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
  2. if (first) {
  3. first = false;
  4. /* TODO: Your code here. (Using info fields)
  5. FieldHelper infoField = get(Fields.Info, "info_field_name");
  6. RowSet infoStream = findInfoRowSet("info_stream_tag");
  7. Object[] infoRow = null;
  8. int infoRowCount = 0;
  9. // Read all rows from info step before calling getRow() method, which returns first row from any
  10. // input rowset. As rowMeta for info and input steps varies getRow() can lead to errors.
  11. while((infoRow = getRowFrom(infoStream)) != null){
  12. // do something with info data
  13. infoRowCount++;
  14. }
  15. */
  16. }
  17. Object[] r = getRow();
  18. //本地连接获取目标数据库连接
  19. org.pentaho.di.core.database.DatabaseMeta dbmeta = getTransMeta().findDatabase("B_Mysql_1");
  20. if(dbmeta!=null)
  21. {
  22. org.pentaho.di.core.database.Database db=new org.pentaho.di.core.database.Database(dbmeta);
  23. try
  24. {
  25. db.connect();
  26. //String tablename = getVariable("table_name");
  27. String tablename = 'bpc';
  28. //在日志中显示创建表名
  29. logBasic("开始创建表:" + tablename);
  30. if(tablename!=null && tablename.trim().length()>0)
  31. {
  32. logBasic("123");
  33. String sql = db.getDDLCreationTable(tablename,data.inputRowMeta );//${TABLENAME}
  34. // 目前错误在这里,找不到表结构
  35. logBasic("124");
  36. //sql = sql.replace("TABLE", "TABLE public.");
  37. db.execStatement(sql.replace(";", ""));
  38. logBasic(sql);
  39. }
  40. }
  41. catch(Exception e)
  42. {
  43. logError("创建表出现异常",e);
  44. }finally{
  45. db.disconnect();
  46. }
  47. }
  48. return false;
  49. }

image.png

批量抽取数据

说明:变量名称 table_name 存放表名称

整体步骤说明,获取表名称,依次执行表抽取
image.png

获取表名步骤

新建表 table_name 将需要进行抽取的表名存入
查询 table_name 数据 字段别名 table_name,将输入存入结果集中
image.png

数据抽取步骤

建立表输入表输出 测试抽取其中一个表
将表输入表输出表名替换成变量名 table_name 写法 ${table_name}
image.png

批量抽取表.rar