• Kettle安装及使用


    优秀的文章:https://www.cnblogs.com/lsy-blogs/p/8268318.html

    一、Kettle概念

    Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。

    Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。

    Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。

    Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

    二、下载和部署

    下载kettle压缩包,因kettle为绿色软件,解压缩到任意本地路径即可.

    下载kettle包,并解压http://community.pentaho.com/projects/data-integration/

    压缩包:(这里使用的是Kettle6.1版本)

    解压:

    三、Kettle环境配置

    1、安装JDK(略)

    2、测试JDK安装成功(略)

    JDK安装步骤见《kettle安装部署及远程执行.docx》

    强调:kettle6.1版本,必须配套使用JDK1.7及以上版本。

    3、运行Kettle

    Windows下找到$KETTLE_HOME/spoon.bat,双击运行.

     

    欢迎界面如下图所示:

    四、Kettle组件介绍与使用

    1 、Kettle使用

    Kettle提供了资源库的方式来整合所有的工作,;

    1)创建一个新的transformation,点击保存到本地路径,例如保存到D:/etltest下,保存文件名为Trans,kettle默认transformation文件保存后后缀名为ktr;

    2)创建一个新的job,点击保存到本地路径,例如保存到D:/etltest下,保存文件名为Job,kettle默认job文件保存后后缀名为kjb;

     

    2 、组件树介绍

    2.1 、Transformation的主对象树和核心对象分别如下图:

     

    ransformation中的节点介绍如下:

    Main Tree:菜单列出的是一个transformation中基本的属性,可以通过各个节点来查看。

    DB连接:显示当前transformation中的数据库连接,每一个transformation的数据库连接都需要单独配置。

    Steps:一个transformation中应用到的环节列表

    Hops:一个transformation中应用到的节点连接列表

    核心对象菜单列出的是transformation中可以调用的环节列表,可以通过鼠标拖动的方式对环节进行添加:

    Input:输入环节

    Output:输出环节

    Lookup:查询环节

    Transform:转化环节

    Joins:连接环节

    Scripting:脚本环节

    2.2 、Job的主对象树和核心对象分别如下图:

     

    Main Tree菜单列出的是一个Job中基本的属性,可以通过各个节点来查看。

    DB连接:显示当前Job中的数据库连接,每一个Job的数据库连接都需要单独配置。

    Job entries/作业项目:一个Job中引用的环节列表

    核心对象菜单列出的是Job中可以调用的环节列表,可以通过鼠标拖动的方式对环节进行添加。

    每一个环节可以通过鼠标拖动来将环节添加到主窗口中。

    并可通过shift+鼠标拖动,实现环节之间的连接。

     2.3 、kettle的简单使用

    DB连接

    我们可以看到转换的主对象树和核心对象区域,然后我们添加一个DB连接。

      选择“主对象树”,双击“转换”标签下的“DB连接”会弹出一个配置窗口。填入连接名称,选择连接类型,配置数据库设置,然后测试下配置是否正确。

      由于kettle没有将所有数据库的Driver文件集成,所以如果想连接指定的数据库,需要自己下载JDBC驱动,放入指定的lib目录下。添加完JDBC驱动后,必须重启kettle才能正确加载驱动(添加oracle数据库的jdbc驱动,参见6、常见问题 6.1【Kettle】JDBC连接oracle报找不到驱动)。

     

    注:在转换之前需要创建转换所需的表,原始表和转换的目标表。

      点击“核心对象”标签页中的“输入”,选择“表输入”拖到“转换”区域。

      双击“表输入”图标弹出表输入对话框,填入步骤名称,选择数据库连接,点击“获取SQL查询语句”,或者直接写入SQL语句,填写附件信息,点击“预览”按钮查看执行结果,没有错误,点击“确认”关闭对话框。

     

    点击“核心对象”—“输出”,选择“Excel输出”拖入到转换区,双击Excel输出图标,弹出对话框,选择文件名和其它附加参数,点击确认

     

    点击输入表的图标,同时按下shift键,再点击输出文件,将两者连接起来。然后双击Excel输出进行配置。

     

    最后一步就是执行kettle脚本,点击工具栏的播放箭头即可。

     

    点击“启动”开始转换,在转换过程中会出现转换的信息,如下图所示。

     

    完成转换后,我们可以在Excel输出目录中查看转换结果。

     

    注:时间字段转换到Excel为空,修改SELECT语句中使用TO_CHAR转换成字符串,例如:to_char(start_time,’yyyy-mm-dd HH24:MM:SS’) as start_time.

    注:Excel(2007之前版本)中的记录不能超过65535条,否则会自动关闭文件,导致转换失败。

    至此,一个简单的数据迁移脚本,从oracle数据库导出数据到EXCEL文件中就大功告成了。  

    3、使用举例1

    3.1、建立转换

    选中列表中的的“表输入”、“表输出”、“插入/更新”,拖拽到右侧工作区。鼠标选中节点键盘按shift键,拖拽即可连线。下图是一个转换,有两个动作,一是直接从数据源表同步数据到目标表,一是检查源表的插入和更新,同步到目标表。

     

    黑色线为生效,灰色线为失效,节点和连接可双击进行编辑。

     

    可预览数据是否正确。

     

    双击编辑表输出动作。

     

    要获取的字段设置如下所示:

     

    点击“Enter field mapping/输入字段映射”进行字段选择。

     

    选择要用的字段后点确定,注意字段的约束条件。

    编辑好后点击上面的执行即可。

    左侧参数暂不说明,执行完成后可以观看下方的日志。

     

    双击编辑“插入/更新”动作。

    然后点击运行。 

    执行前,在源库里加条新纪录。确定作业执行正常后可以保存作业。

    3.2、建立执行的JOB/作业

    建立JOB的前提是有可以完整执行的作业,上面步骤定制的作业进行保存

    从左侧列表拖拽“START”,“Success”,“转换”,“发送邮件”到工作区并连接,如下图。

    然后双击“START”动作进行编辑

     

    然后双击编辑“Transformation”活动。

    转换文件名选择上一步编辑好的转换位置

     

    编辑完成后直接点击运行即可。

     

    运行后查看日志。

     

    当任务执行以后可以查看相对应的日志,也可自行配置日志。

     

    五、常见问题解决

    1 、【Kettle】JDBC连接oracle报找不到驱动

    初次接触kettle,环境都配置好以后,启动kettle的spoon,新建作业,配置jdbc的oracle数据源连接,报找不到驱动。

    解决办法:
    1)、下载OJDBC14.jar包
    2)、 将该包拷贝到kettle的~data-integrationlibswt或者~ data-integrationlib路径下都可以。3、重启kettle,重新配置数据源连接。问题解。

    2、 IP地址输入错误

     

    3、数据库实例输入错误

    复制代码
    错误连接数据库 [GCS] : org.pentaho.di.core.exception.KettleDatabaseException: 
    Error occurred while trying to connect to the database
    
    Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
    Listener refused the connection with the following error:
    ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    The Connection descriptor used by the client was:
    192.168.1.46:1521:ORCL1
    
    org.pentaho.di.core.exception.KettleDatabaseException: 
    Error occurred while trying to connect to the database
    
    Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
    Listener refused the connection with the following error:
    ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    The Connection descriptor used by the client was:
    192.168.1.46:1521:ORCL1
    复制代码

    4、用户名密码错误

     

    六、注意事项

    1、表输入中书写sql若有参数,图中替换SQL语句里的变量必须勾上

     

    2、若开发步骤中由一个步骤变俩个步骤,需要分清楚,分发与复制。分发数据轮流进入目标步骤,复制是俩个步骤同时进入。

    3、俩个表输入步骤做记录集(表关联)关联,必须提前将关联字段排序,不然会漏掉数据

     

    七、kettle组件介绍说明

    1、文本文件输入(text input)读取大量不同的文本文件。大多是通过工具生成的CSV文件。

    2、表输入(table Input):常用来利用连接和SQL,从数据中读取信息,自动生成基本的SQL语句。

    3、获取系统信息(get system info):这个步骤从 Kettle 环境中获取信息。

    4、生成行(Generate Rows :这个步骤输出一定数量的行,缺省为空。可选包括一定数量的静态字段。

    5、Cube输入(文件反序列化)(De-serialize from file):从二进制 Kettle Cube 文件中读取数据行。 备注:这个步骤仅仅用来存储短期数据。不同版本之间不保证文件的格式一样。

    6、XBase输入: 使用这一步可以读取大多数被称为 XBase family派生的 DBF文件。

    7、Excel输入:利用这个步骤可以从 Kettle 支持的系统的 Excel文件里面读取数据。

    8、XML输入:这个步骤允许你读取存储在 XML 文件中的数据。它也提供一个接口,你可以定义你想读取的文件名、XML 文件的数据重复部分、获取的字段等。你可以指定元素或属性字段。

    9、获取文件名(Get File Names):这个步骤可以获取系统的文件名信息。

    10、表输出(Table output)这个步骤可以存储信息到数据库表中。

    11、插入/更新(Insert/Update):这个步骤利用查询关键字在表中搜索行。如果行没有找到,就插入行。如果能被找 到,并且要被更新的字段没有任何改变,就什么也不做。如果有不同,行就会被更新。

    12、更新(Update ):这个步骤类似于插入/更新步骤,除了对数据表不作插入操作之外。它仅仅执行更新操作。

    13、删除(Delete)这个步骤类似于上一步,除了不更新操作。所有的行均被删除。

    14、Cube output(序列化到文件)(Serialize to file):这一步骤存储数据到一个二进制文件。这个步骤有个优势就是回读的时候,文本文件的内容不需要解析。这是因为元数据也同时存储在 CUBE 文件里面。

    15、XML输出:这个步骤允许你从源中写入行到一个或者多个 XML 文件。

    16、EXCEL输出:利用这个步骤,在 Kettle 支持的系统中,你可以写入数据到一个或者多个Excel 文件中。

    17、Access 输出(Microsoft Access Output): 允许你在转换中创建一个新的 Access 数据库文件作为输出。

    18、数据库查询(Database lookup):这个步骤类型允许你在数据库表中查找值。

    19、流查询(Stream lookup):这个步骤类型允许你从其它步骤中查询信息。首先,“源步骤”的数据被读到内存中,然后被用来从主要的流中查询数据。

    20、调用数据库存储过程(Call DB Procedure):这个步骤允许你运行一个数据库存储过程,获取返回结果。

    21、HTTP 客户端(HTTP Cient):HTTP 客户端根据一个附带条件的基准 URL,来调用一个简单的调用。

    22、字段选择  (Select values) :这个步骤常常用来 选择字段  重命名字段  指定字段的长度或者精度  

    下面是三个不同标签的功能:  

             选择和修改:指定需要流到输出流中的字段的精确顺序和名称  

             删除:指定必须从输出流中删除的字段  

             元数据:修改元数据字段的名称、类型、长度和精度  

    23、过滤记录(Filter rows):这个步骤允许你根据条件和比较符来过滤记录。 一旦这个步骤连接到先前的步骤中,你可以简单的单击“<field>”,“=”和“<value>” 区域来构建条件。  

    24、排序记录(Sort rows):这个步骤利用你指定的字段排序行,无论他们是按照升序还是降序。

    备注:当行数超过 5000 行的时候,Kettle 使用临时文件来排序行。

    25、添加序列(Add sequence):这个步骤在流中增加一个序列。一个序列是在某个起始值和增量的基础上,经常改变的整数值。你可以使用数据库的序列,也可以使用 Kettle 决定的序列。

    备注:Kettle 序列在同一个转换中是唯一使用的。每一次转换运行的时候,序列的值又会重新循环一次(从开始值开始)

    26、空操作-什么都不做(Dummy-do nothing):这个操作什么都不做。它的主要作用是,在你想测试什么的时候,充当一个占位符。例如有一个转换,你至少需要两个彼此连接的步骤。如果你想测试文本文件输入步骤,你可以将它连接到一个 Dummy 步骤。

    27、行转列(Row Normaliser):这个步骤转动表,标准化数据。

    28、拆分字段(Split Fields):这个步骤允许你根据分隔符来拆分字段。

    29、去除重复记录(Unique rows):这个步骤从输入流中称移除重复的记录。

    30、分组(Group By)这个步骤允许你通过定义分组的字段来计算值。

    例如:计算产品的平均销售额,获取库存的黄色衬衫的数量等等。

    31、设置为空值(Null if):如果某个字符串的值等于指定的值,设置那个值为空。

    32、计算器(Calculator ):这个步骤提供一个功能列表,可以在字段值上运行。

    计算器的一个重要优势是,它有着几倍于常用的 JavaScript 脚本的速度。

    33、增加 XML (XML Add ):这个步骤允许你将在 XML 中的行字段内容编码,XML 以字符串字段的形式添加到行中。

    34、增加常量(Add constants ):这个步骤很简单,主要是添加常量到流中。它的使用也很容易:用字符串形式指定名称,类型和值。利用选择的数据类型指定转换格式。

    36、行转列(Row Denormaliser ):这个步骤允许你通过查询键值对来反向规格化数据。也可以立即转换数据类型。

    37、行扁平化(Flattener ):这个步骤允许你扁平化预备的数据。

    38、值映射(Value Mapper ):这个步骤简单的映射字符串,从一个值映射到另一个值。通常你想解中转换表的问题,不管怎么说,这是一种可选的方案:简单的将转换表作一部分。

    例如:如果你想替换 Language codes,你可以:

    使用的字段名:LanuguageCode 目标字段名:LanguageDesc

    源值/目标值:EN/English,FR/French,NL/Dutch,ES/Spanish,DE/German,…

    39、被冻结的步骤(Blocking step ):它冻结所有的输出,直到从上一步骤来的最后一行数据到达,最后一行数据将发送到下一步。你可以使用这个步骤触发常用插件、存储过程和 Java Script等等。

    记录关联(笛卡尔输出)(Join Rows-Cartesian Product ):这个步骤允许你组合输入流中的所有行(笛卡尔输出)。

    40、数据库连接(Database Join ):这个步骤允许你使用先前步骤的数据,运行一个数据库查询。能够指定查询参数:在 SQL 查询中使用“?” ; 在 SQL 查询中使用数据网格中的字段

    42、合并记录(Merge rows ):这个步骤允许你比较两个行流。如果你想在两个不同的时间比较比较数据,这是非常有用的。它常被用于数据仓库源系统没有包含最后更新日期的情况。

    两个行流被合并,一个是引用流(旧数据),一个比较流(新数据)。每次都是行的最后版本通过进入下一步骤。行有以下标记:

    “identical”:关键字在两个流中都存在,并且值相同

    “changed”: 关键字在两个流中都存在,但是一个或者更多的值不同

    “new”:引用流中没有找到关键字

    “deleted”: 比较流中没有找到关键字

    比较流中的数据进入下一步骤,除非在“删除“的情况。

    43、存储合并(Stored Merge ):这个步骤合并来自多个输入步骤的数据行,并且这些行用指定的关键字排序。

    44、合并连接(Merge Join) :这个步骤将来自两个不同的步骤输入的数据执行一个高效的合并。合并选项包括INNER、LEFT OUTER、RIGHT OUTER、FULL OUTER。

    备注:这个步骤将输入的行按指定的字段存储

    45、Java Script 值(Java Script Value ):这个步骤允许你用 JavaScript 语言做复杂的运算。使用的 JavaScript 引擎是 Rhino 1.5R5。

    46、改进的 Java Script 值(Modified Java Script Value ):这个步骤是“Javascript Values”的进改版本,它可以提供更好的效率,也更容

    易使用。

    47、执行 SQL 语句(Execute SQL script ):在这个步骤中你可以执行 SQL 脚本,或者在转换初始化的时候执行,或者在步骤的每一个输入行执行

    49、联合更新/查询(Combination lookup/update ):这个步骤允许你在一个 junk-dimesion 表里存储信息。

    50、映射(Mapping ):如果你希望某个转换多次运行,你可以将重复的部分添加到一个映射中。映射是一个这样的转换:指定输入如何从映射输入中到达 ;指定输入字段如何转换:字段被添加或者删除

    51、从结果获取记录(Get rows from result ):这个步骤返回在一个任务中先前步骤生成的行。你可以进入选择先前步骤生成的元数据字段。

    52、复制记录到结果(Copy rows to result ):这个步骤允许你在一个任务中将行数据(内存中的)传递到下一个步骤

    53、设置变量(Set Variable):这个步骤允许你在一个任务中或者虚拟机中设置变量。它仅仅可以用一行数据来设置变量值。

    54、获取变量(Get Variable ):这个步骤允许你获取一个变量,它可以返回行或者附加值到输入行。

    备注:你需要指定完整的变量格式${variable}或者%%variable%%。

    55、从以前的结果获取文件(Get files from result ):每次在转换、任务、文件细节、任务条目、步骤等处理、使用或者创建一个文件时,文件被捕获并且附加到结果中。你可以使用这个步骤访问那些信息。

    56、复制文件名到结果(Set files in result):在某种情况下,我们可以操纵输出结果中的文件列表。例如 mail 任务条目可以使用文件列表来关联邮件,可能你不需要发送所有的文件,你可以在此步骤中指定你想要发送的邮件。

    57、记录注射器(Injector ):注射器主要是针对以下人使用:想利用 Kettle API 和 JAVA 来注射记录到转换中。

    58、套接字读入器(Socket Reader):套接字读入器是通过 TCP/IP 协议将数据从一个服务器向另一个服务器传输。

    59、套接字输写器(Socket Writer):套接字输写器是通过 TCP/IP 协议将数据从一个服务器向另一个服务器传输。

    60、聚合行(Aggregate Rows ):这个步骤允许你在所有行的基础上快速的聚集行。

    61、流 XML 输入(Streaming XML Input):这个步骤主要提供值的解析,它信赖于 SAX 解析器,在大文件解析上能提供更好的性能。

    它与 XML 输入非常相似,仅仅在内容和字段制表符上略有不同。

    62、中止(Abort ):这个步骤允许你在观察输入的时候中止步骤。它的主要用途是错误处理,在一定数量的行流过错误的连接时中止转换。

    63、Oracle 批量装载(Oracle bulk loader ):这个步骤允许你大批量加载数据到 Oracle 数据库,它将用一个正确的装载格式,然后调用 Oracle 的 SQL*Loader 数据加载工具加载到指定的表中。

    转发自:https://www.cnblogs.com/zhaihongchang/p/9956676.html

  • 相关阅读:
    Django-中间件
    Django-cookie与session
    Django-用户认证组件
    Django-forms组件
    Django-forms校验
    Django-ajax上传文件(request数据都可以在,request.body中找到)
    Django-Ajax传递json数据
    form表单文件上传
    Django-ROM(字段,参数)
    Django-模板的继承(母版,include)
  • 原文地址:https://www.cnblogs.com/Bkxk/p/10478039.html
Copyright © 2020-2023  润新知