Kettle实现从数据库中提取数据到Excel
Posted dfx339
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>
以上是关于Kettle实现从数据库中提取数据到Excel的主要内容,如果未能解决你的问题,请参考以下文章
利用kettle,怎样把数据导入到同一个excel,不同sheet中
ETL工具—Kettle数据的导入导出—Excel表到数据库