Kettle实现从数据库中提取数据到Excel

因为有个日常提数,工作日每天都要从数据库中提取数据,转换为excel,再以邮件的形式发给用户。

刚好近期同事在研究使用kettle自动提数且完成邮件的发送,觉得很实用又挺有意思的就学了一下这个技能~

首先我们需要新建 转换 

转换: 可以将数据从数据库中提取到excel中 

然后我们如果想要定时提取数据的话,可以新建 作业

作业: 可以定时执行转换任务,然后还可以将发送邮件耶~ (不过这个技能我还不是很熟悉,等我熟悉了再更新嘻嘻)

一 、 新建转换

1.点击 + 号 ,也就是新建 ,然后选择 转换

2. 从 核心对象 视图切换为 主对象树 , 然后开始建立我们的数据库连接

双击 DB连接,会出现下图标记的 3 弹窗

填写数据库连接信息,我这里选择连接oracle数据库,必要填写的信息为红色标记框所标记的  数据库ip  数据库名 端口号 用户名 密码

3.数据库信息填写完后我们可以点击测试按钮,看看是否能正常连接(提示为 正确连接到数据库【test】,表示信息填写没有问题)

4. 切换视图: 主对象树  切换到 核心对象,我们开始设立我们的输入与输出

5. 输入 : 我们 从输入的子菜单中选择  表输入

双击 表输入,会在右侧出现 表输入图标

双击右侧表输入图标,再次出现 下图标记4出现的弹窗

6. 在弹窗中,我们开始定义输入相关信息啦

关于sql语句,我们还有一点需要注意,就是日期形式的数据需要定义一下,不然导出的数据就会数值类型啦(49165..类似的)

oracle: to_char(‘2019-05-05‘,‘yyyy-MM-dd‘)

mysql: DATE_FORMAT(‘2019-05-05‘,‘‘%Y-%m-%d‘)

7. 输入定义好后,我们开始定义输出啦。 这里我们选择以excel的形式输出数据

选择核心对象下的 输出,双击输出下的子菜单 Microsoft Excel输出 ,会出现右侧的输出图标

双击右侧的输出图标,出现右侧 5标记的弹窗信息

8.定义详细的输出

选定输出文件的位置,如果不写绝对路径则会输出在 kettle启动文件 Sqoon.bat的统计目录下

下面记得选中Excel 2007 and above

最后点击确定

9.点击执行按钮,然后就根据提示选择 保存

10. 执行转换

11.执行成功后,我们回到桌面就会看到刚刚保存的文件啦~

二、新建 作业

1.点击 + 号,然后选择 作业

2.选择通用, START (双击,出现右侧开始图标)

3.在 START里面定义 怎么执行(我这里定义为每天9点执行)

4.双击通用下的 转换

5.配置转换相关信息

选中我们刚刚配置好的转换信息(保存位置看你自己之前保存在哪里哦,我是放在了桌面~) ,最后选择确定即可

6.点击执行,会要求我们先保存此次编辑的 作业信息 ,如下图

7. 保存好后,我们可以再次启动,运行啦~  (其实还可以导入文件 test.kjb)

最后提供一个发送邮件的 testzip.kjb  示例 (可直接使用kettle打开,更改邮件服务配置信息即可运行)

<?xml version="1.0" encoding="UTF-8"?>
<job>
  <name>testzip</name>
  <description />
  <extended_description />
  <job_version />
  <directory>/</directory>
  <created_user>-</created_user>
  <created_date>2019/06/17 11:35:43.098</created_date>
  <modified_user>-</modified_user>
  <modified_date>2019/06/17 11:35:43.098</modified_date>
  <parameters>
    </parameters>
  <slaveservers>
    </slaveservers>
  <job-log-table>
    <connection />
    <schema />
    <table />
    <size_limit_lines />
    <interval />
    <timeout_days />
    <field>
      <id>ID_JOB</id>
      <enabled>Y</enabled>
      <name>ID_JOB</name>
    </field>
    <field>
      <id>CHANNEL_ID</id>
      <enabled>Y</enabled>
      <name>CHANNEL_ID</name>
    </field>
    <field>
      <id>JOBNAME</id>
      <enabled>Y</enabled>
      <name>JOBNAME</name>
    </field>
    <field>
      <id>STATUS</id>
      <enabled>Y</enabled>
      <name>STATUS</name>
    </field>
    <field>
      <id>LINES_READ</id>
      <enabled>Y</enabled>
      <name>LINES_READ</name>
    </field>
    <field>
      <id>LINES_WRITTEN</id>
      <enabled>Y</enabled>
      <name>LINES_WRITTEN</name>
    </field>
    <field>
      <id>LINES_UPDATED</id>
      <enabled>Y</enabled>
      <name>LINES_UPDATED</name>
    </field>
    <field>
      <id>LINES_INPUT</id>
      <enabled>Y</enabled>
      <name>LINES_INPUT</name>
    </field>
    <field>
      <id>LINES_OUTPUT</id>
      <enabled>Y</enabled>
      <name>LINES_OUTPUT</name>
    </field>
    <field>
      <id>LINES_REJECTED</id>
      <enabled>Y</enabled>
      <name>LINES_REJECTED</name>
    </field>
    <field>
      <id>ERRORS</id>
      <enabled>Y</enabled>
      <name>ERRORS</name>
    </field>
    <field>
      <id>STARTDATE</id>
      <enabled>Y</enabled>
      <name>STARTDATE</name>
    </field>
    <field>
      <id>ENDDATE</id>
      <enabled>Y</enabled>
      <name>ENDDATE</name>
    </field>
    <field>
      <id>LOGDATE</id>
      <enabled>Y</enabled>
      <name>LOGDATE</name>
    </field>
    <field>
      <id>DEPDATE</id>
      <enabled>Y</enabled>
      <name>DEPDATE</name>
    </field>
    <field>
      <id>REPLAYDATE</id>
      <enabled>Y</enabled>
      <name>REPLAYDATE</name>
    </field>
    <field>
      <id>LOG_FIELD</id>
      <enabled>Y</enabled>
      <name>LOG_FIELD</name>
    </field>
    <field>
      <id>EXECUTING_SERVER</id>
      <enabled>N</enabled>
      <name>EXECUTING_SERVER</name>
    </field>
    <field>
      <id>EXECUTING_USER</id>
      <enabled>N</enabled>
      <name>EXECUTING_USER</name>
    </field>
    <field>
      <id>START_JOB_ENTRY</id>
      <enabled>N</enabled>
      <name>START_JOB_ENTRY</name>
    </field>
    <field>
      <id>CLIENT</id>
      <enabled>N</enabled>
      <name>CLIENT</name>
    </field>
  </job-log-table>
  <jobentry-log-table>
    <connection />
    <schema />
    <table />
    <timeout_days />
    <field>
      <id>ID_BATCH</id>
      <enabled>Y</enabled>
      <name>ID_BATCH</name>
    </field>
    <field>
      <id>CHANNEL_ID</id>
      <enabled>Y</enabled>
      <name>CHANNEL_ID</name>
    </field>
    <field>
      <id>LOG_DATE</id>
      <enabled>Y</enabled>
      <name>LOG_DATE</name>
    </field>
    <field>
      <id>JOBNAME</id>
      <enabled>Y</enabled>
      <name>TRANSNAME</name>
    </field>
    <field>
      <id>JOBENTRYNAME</id>
      <enabled>Y</enabled>
      <name>STEPNAME</name>
    </field>
    <field>
      <id>LINES_READ</id>
      <enabled>Y</enabled>
      <name>LINES_READ</name>
    </field>
    <field>
      <id>LINES_WRITTEN</id>
      <enabled>Y</enabled>
      <name>LINES_WRITTEN</name>
    </field>
    <field>
      <id>LINES_UPDATED</id>
      <enabled>Y</enabled>
      <name>LINES_UPDATED</name>
    </field>
    <field>
      <id>LINES_INPUT</id>
      <enabled>Y</enabled>
      <name>LINES_INPUT</name>
    </field>
    <field>
      <id>LINES_OUTPUT</id>
      <enabled>Y</enabled>
      <name>LINES_OUTPUT</name>
    </field>
    <field>
      <id>LINES_REJECTED</id>
      <enabled>Y</enabled>
      <name>LINES_REJECTED</name>
    </field>
    <field>
      <id>ERRORS</id>
      <enabled>Y</enabled>
      <name>ERRORS</name>
    </field>
    <field>
      <id>RESULT</id>
      <enabled>Y</enabled>
      <name>RESULT</name>
    </field>
    <field>
      <id>NR_RESULT_ROWS</id>
      <enabled>Y</enabled>
      <name>NR_RESULT_ROWS</name>
    </field>
    <field>
      <id>NR_RESULT_FILES</id>
      <enabled>Y</enabled>
      <name>NR_RESULT_FILES</name>
    </field>
    <field>
      <id>LOG_FIELD</id>
      <enabled>N</enabled>
      <name>LOG_FIELD</name>
    </field>
    <field>
      <id>COPY_NR</id>
      <enabled>N</enabled>
      <name>COPY_NR</name>
    </field>
  </jobentry-log-table>
  <channel-log-table>
    <connection />
    <schema />
    <table />
    <timeout_days />
    <field>
      <id>ID_BATCH</id>
      <enabled>Y</enabled>
      <name>ID_BATCH</name>
    </field>
    <field>
      <id>CHANNEL_ID</id>
      <enabled>Y</enabled>
      <name>CHANNEL_ID</name>
    </field>
    <field>
      <id>LOG_DATE</id>
      <enabled>Y</enabled>
      <name>LOG_DATE</name>
    </field>
    <field>
      <id>LOGGING_OBJECT_TYPE</id>
      <enabled>Y</enabled>
      <name>LOGGING_OBJECT_TYPE</name>
    </field>
    <field>
      <id>OBJECT_NAME</id>
      <enabled>Y</enabled>
      <name>OBJECT_NAME</name>
    </field>
    <field>
      <id>OBJECT_COPY</id>
      <enabled>Y</enabled>
      <name>OBJECT_COPY</name>
    </field>
    <field>
      <id>REPOSITORY_DIRECTORY</id>
      <enabled>Y</enabled>
      <name>REPOSITORY_DIRECTORY</name>
    </field>
    <field>
      <id>FILENAME</id>
      <enabled>Y</enabled>
      <name>FILENAME</name>
    </field>
    <field>
      <id>OBJECT_ID</id>
      <enabled>Y</enabled>
      <name>OBJECT_ID</name>
    </field>
    <field>
      <id>OBJECT_REVISION</id>
      <enabled>Y</enabled>
      <name>OBJECT_REVISION</name>
    </field>
    <field>
      <id>PARENT_CHANNEL_ID</id>
      <enabled>Y</enabled>
      <name>PARENT_CHANNEL_ID</name>
    </field>
    <field>
      <id>ROOT_CHANNEL_ID</id>
      <enabled>Y</enabled>
      <name>ROOT_CHANNEL_ID</name>
    </field>
  </channel-log-table>
  <pass_batchid>N</pass_batchid>
  <shared_objects_file />
  <entries>
    <entry>
      <name>Zip 压缩文件</name>
      <description />
      <type>ZIP_FILE</type>
      <zipfilename>C:\Users\S0111\Desktop\最新运营中心KPI20190615.zip</zipfilename>
      <compressionrate>1</compressionrate>
      <ifzipfileexists>0</ifzipfileexists>
      <wildcard />
      <wildcardexclude />
      <sourcedirectory>D:\DEV_TOOLS\kettle\pdi-ce-7.1.0.0-12\data-integration\网上保单贷款2019-06-18.xlsx</sourcedirectory>
      <movetodirectory />
      <afterzip>0</afterzip>
      <addfiletoresult>Y</addfiletoresult>
      <isfromprevious>N</isfromprevious>
      <createparentfolder>Y</createparentfolder>
      <adddate>N</adddate>
      <addtime>N</addtime>
      <SpecifyFormat>N</SpecifyFormat>
      <date_time_format>yyyy/MM/dd HH:mm:ss</date_time_format>
      <createMoveToDirectory>N</createMoveToDirectory>
      <include_subfolders>N</include_subfolders>
      <stored_source_path_depth>1</stored_source_path_depth>
      <parallel>N</parallel>
      <draw>Y</draw>
      <nr>0</nr>
      <xloc>368</xloc>
      <yloc>160</yloc>
    </entry>
    <entry>
      <name>START</name>
      <description />
      <type>SPECIAL</type>
      <start>Y</start>
      <dummy>N</dummy>
      <repeat>N</repeat>
      <schedulerType>0</schedulerType>
      <intervalSeconds>0</intervalSeconds>
      <intervalMinutes>60</intervalMinutes>
      <hour>12</hour>
      <minutes>0</minutes>
      <weekDay>1</weekDay>
      <DayOfMonth>1</DayOfMonth>
      <parallel>N</parallel>
      <draw>Y</draw>
      <nr>0</nr>
      <xloc>192</xloc>
      <yloc>176</yloc>
    </entry>
    <entry>
      <name>添加文件到结果文件中</name>
      <description />
      <type>ADD_RESULT_FILENAMES</type>
      <arg_from_previous>Y</arg_from_previous>
      <include_subfolders>N</include_subfolders>
      <delete_all_before>N</delete_all_before>
      <fields>
        <field>
          <name>C:\Users\Administrator\Desktop\报表平台\kettle每周提数</name>
          <filemask>*.zip</filemask>
        </field>
      </fields>
      <parallel>N</parallel>
      <draw>Y</draw>
      <nr>0</nr>
      <xloc>528</xloc>
      <yloc>176</yloc>
    </entry>
    <entry>
      <name>发送邮件</name>
      <description />
      <type>MAIL</type>
      <server>11.22.33.44</server>
      <port>25</port>
      <destination>[email protected]</destination>
      <destinationCc />
      <destinationBCc />
      <replyto>[email protected]</replyto>
      <replytoname />
      <subject>嗯嗯嗯嗯</subject>
      <include_date>N</include_date>
      <contact_person />
      <contact_phone />
      <comment>test mail</comment>
      <include_files>Y</include_files>
      <zip_files>N</zip_files>
      <zip_name />
      <use_auth>N</use_auth>
      <use_secure_auth>N</use_secure_auth>
      <auth_user />
      <auth_password>Encrypted </auth_password>
      <only_comment>Y</only_comment>
      <use_HTML>N</use_HTML>
      <use_Priority>N</use_Priority>
      <encoding>UTF-8</encoding>
      <priority>normal</priority>
      <importance>normal</importance>
      <sensitivity>normal</sensitivity>
      <secureconnectiontype>SSL</secureconnectiontype>
      <replyToAddresses />
      <filetypes>
        <filetype>GENERAL</filetype>
      </filetypes>
      <embeddedimages>
      </embeddedimages>
      <parallel>N</parallel>
      <draw>Y</draw>
      <nr>0</nr>
      <xloc>672</xloc>
      <yloc>176</yloc>
    </entry>
  </entries>
  <hops>
    <hop>
      <from>START</from>
      <to>Zip 压缩文件</to>
      <from_nr>0</from_nr>
      <to_nr>0</to_nr>
      <enabled>Y</enabled>
      <evaluation>Y</evaluation>
      <unconditional>Y</unconditional>
    </hop>
    <hop>
      <from>添加文件到结果文件中</from>
      <to>发送邮件</to>
      <from_nr>0</from_nr>
      <to_nr>0</to_nr>
      <enabled>Y</enabled>
      <evaluation>Y</evaluation>
      <unconditional>N</unconditional>
    </hop>
    <hop>
      <from>Zip 压缩文件</from>
      <to>添加文件到结果文件中</to>
      <from_nr>0</from_nr>
      <to_nr>0</to_nr>
      <enabled>Y</enabled>
      <evaluation>Y</evaluation>
      <unconditional>N</unconditional>
    </hop>
  </hops>
  <notepads>
  </notepads>
</job>

  

原文地址:https://www.cnblogs.com/DFX339/p/11047047.html

时间: 2024-10-18 21:32:58

Kettle实现从数据库中提取数据到Excel的相关文章

NPOI从数据库中导出数据到Excel

首先要添加NPOI.dll程序集 https://yunpan.cn/cMeSTELJSXmJJ  访问密码 8d83 把里面的程序集都添加到引用里 下面的代码是从数据库导出到Excel 1 public void DaoChuExcel(string path) 2 { //path是导出的excel要保存的路径 3 using (Stream fs = new FileStream(path, FileMode.Create, FileAccess.Write)) 4 { //创建一个表 5

Java实现Excel导入数据库,数据库中的数据导入到Excel

实现的功能: Java实现Excel导入数据库,如果存在就更新 数据库中的数据导入到Excel 1.添加jxl.jar mysql-connector-java.1.7-bin.jar包到项目的lib目录下­ 2.Excel文件目录:D://book.xls 3.数据库名:javenforexcel 4.表名:stu 5.编写类:连接mysql的字符串方法.插入的方法.实体类­­ 表结构如下 : 连接数据库的工具类 package com.javen.db; import java.sql.Co

java更改数据库中的数据

不废话,上代码 1 package com.ningmeng; 2 3 import java.sql.*; 4 5 /** 6 * 1:更改数据库中的数据 7 * @author biexiansheng 8 * 9 */ 10 public class Test04 { 11 12 public static void main(String[] args) { 13 // TODO Auto-generated method stub 14 try { 15 Class.forName("

用PHP向数据库中添加数据

显示页面(用户可见) <body><form action="chuli.php" method="post">  //将该页面接收的数据,交给chuli页面来处理<div>民族代号:<input type="text" name="code" /></div>       //创建一个div,放入接收器来接收code值<div>民族名称:<inpu

Sliverlight linq中的数组筛选数据库中的数据

首先 什么是linq呢 ? LINQ即Language Integrated Query(语言集成查询),LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性. 它是.NET框架的扩展,它允许我们以数据库查询的方式查询数据集合. 借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据. 接下来讲讲我工作中用到的 linq中的数组筛选数据库中的数据 public List GetList1(string cardPhone,string

是用JDBC从数据库中获取数据并以java对象返回

/** * * @param c * for example Person.class * @param primaryKeys * primaryKeys为主键,参数顺序和表中保持一致 如果id, name 为主键 类名为Person 则 getEntity(Person.class,1,"name") * @return */ public static Object getEntity(Class c, Object... primaryKeys) { PreparedState

Eclipse中java向数据库中添加数据

前面详细写过如何连接数据库的具体操作,下面介绍向数据库中添加数据. 注意事项:如果参考下面代码,需要 改包名,数据库名,数据库账号,密码,和数据表(数据表里面的信息) 1 package com.ningmeng; 2 3 import java.sql.*; 4 5 /** 6 * 1:向数据库中添加数据 7 * @author biexiansheng 8 * 9 */ 10 public class Test01 { 11 12 public static void main(String

用java向mysql数据库中插入数据为空

利用java面向对像编程,向数据库中插入数据时.遇到插入的数据为空的情况.在此做一小结: 1.数据库连接正正常 2.sql语句没有问题 3.程序没有报异常 4.代码: import java.util.Scanner; import org.junit.Test;public class JDBCTest { //2).在测试方法testAAddStudent()中 //1.获取从控制台输入的Student对象:Student student=getStudentFromConsole(); /

android 如何从服务器端的数据库中拿数据,在客户端显示类?

============问题描述============ android 如何从服务器端的数据库中拿数据,在客户端显示类? ============解决方案1============ 写一个网络访问的api,Android通过API取到数据, ============解决方案2============ 有種WebService的方法可以將資料用xml格式傳送取得 ============解决方案3============ 为神马要直接访问数据库呢 叫服务端给你开放几个接口不就行了么- - ===