zoukankan      html  css  js  c++  java
  • 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:UsersS0111Desktop最新运营中心KPI20190615.zip</zipfilename>
          <compressionrate>1</compressionrate>
          <ifzipfileexists>0</ifzipfileexists>
          <wildcard />
          <wildcardexclude />
          <sourcedirectory>D:DEV_TOOLSkettlepdi-ce-7.1.0.0-12data-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:UsersAdministratorDesktop报表平台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>duanfeixia@chinalife.com.hk</destination>
          <destinationCc />
          <destinationBCc />
          <replyto>xubo@chinalife.com.hk</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>
    

      

     ps: 详细示例请从github中下载源码信息~ (打开查看详情,需要本机已安装kettle)

    github地址: https://github.com/DFX339/kettle_operate 

  • 相关阅读:
    Angularjs实现分页--并展示
    angularjs后台查询所有,前台实现分页显示 https://my.oschina.net/gmd/blog/670895
    springmvc导出excel到本地,弹出下载路径选择框
    文件下载
    springmvc测试类中如何引入controller与service,request,respon
    读取数据到txt中
    junit测试时报错 ass not found com.mogodb.test.test java.lang.ClassNotFoundException: com.mogodb.test.test at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPri
    pom.xml中添加client jar包
    angluarjs+springmvc实现excel上传并解析,对个别字段进行非空校验,txt生成,txt生成的条件为某列必须为某值且只提供固定的几列发送到ftp
    python的min()函数也可用于比较tuple
  • 原文地址:https://www.cnblogs.com/DFX339/p/11047047.html
Copyright © 2011-2022 走看看