一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。
放弃不难,但坚持很酷~
我们都知道 Kettle 是用 Java 语言开发,并且可以在 JavaScript 里面直接调用 java 类方法。所以有些时候,我们可以自定义一些方法,来供 JavaScript 使用。
本篇文章有参考自:https://www.xiaominfo.com/2019/08/13/kettle-12/
在项目中,创建 utils 工具类,比如 计算总页码 的一个方法。代码如下:
public class PaginationUtils {
/**
* 计算得到总页码
* @param totalRecords 总记录数
* @param pageSize 分页大小
* @return 总页码
*/
public static inttotalPage(String totalRecords,String pageSize){
int totalPage=0;
try{
BigDecimal records=new BigDecimal(totalRecords);
BigDecimal size=new BigDecimal(pageSize);
BigDecimal _tmp=records.add(size).subtract(new BigDecimal(1));
BigDecimal _tp=_tmp.divide(size).setScale(0,BigDecimal.ROUND_HALF_UP);
totalPage=_tp.intValue;
}catch (Exception e){
//error
}
return totalPage;
}
}
工具类方法开发完毕后,可通过 mvn clean package -DskipTests
命令进行打包,在 target 目录下,会生成一个 jar 文件。需要将这个 jar 包放到 kettle 的 lib 目录下。如下图所示:
重启 Kettle ,新建 JavaScript 脚本,计算总页码的 js 代码如下所示:
//计算总页码
var totalPage=com.study.spring.Utils.PaginationUtils.totalPage(countBySql,pageSize);
其实就是在 js 代码中声明 java 类+方法。
但是问题来了,kettle 在运行这段 JavaScript 脚本的时候,提示下面这样的错误:
不能编译 javascript: org.mozilla.javascript.EcmaError: TypeError: Cannot call property totalPage in object [JavaPackage com.study.spring.Utils.PaginationUtils]. It is not a function, it is "object". (<cmd>#22)
根据错误信息来看,其实还是没有找到相关类方法,和没放这个 jar 包一样…
上面这个错误究竟是怎么回事呢?我也很奇怪。于是我就用压缩工具也看了看 lib 目录下的其它 jar 包结构,发现人家都是这样式的:
而我刚才打的 jar 包目录是这样子的:
com 目录并没有在 jar 包的根路径下,自然是访问不到那个方法。
好,问题产生的原因找到了,然后再说一下解决办法:
在 pom.xml 文件中添加:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
pom 文件添加后的效果图如下所示:
再次打成的 jar 包内部结构为:
成功!com 目录已经在 jar 包的根路径下了。
将 jar 包替换到 kettle 的 lib 目录下,重启 Kettle ,再次通过 javascripts 调用自定义 jar 包成功!
ettle——javascript组件的使用
一,计算a+b的值
二,取date1的年,月,日
自定义常量数据如下:
javascript代码如下:
2023-2-27
广泛的数据源支持 :Kettle 可以从各种数据源中提取数据,包括传统关系数据库(如 Oracle、MySQL、SQL Server)、NoSQL 数据库(如 MongoDB、Cassandra)、文件系统(如 CSV、JSON、XML)、大数据平台(如 Hadoop、HDFS)、云存储(如 Amazon S3、Google Cloud Storage)、Web 服务(REST、SOAP)和消息队列(如 Kafka)。
灵活的数据提取方式 :支持全量提取、增量提取、变更数据捕获(CDC),适应不同业务场景的数据需求。
数据清洗 :通过内置的清洗组件,如去重、过滤、填充缺失值、标准化数据格式等,保证数据的质量和一致性。
复杂数据转换 :支持各种复杂的数据转换操作,包括数据聚合、分组、拆分、排序、连接(JOIN)、数据映射、数据类型转换等。
脚本和自定义代码 :支持通过 JavaScript、Groovy、Java 等脚本语言进行自定义的数据处理,满足特定业务需求。
多种目标支持 :Kettle 可以将处理后的数据加载到多种目标,包括数据仓库(如 Teradata、Snowflake)、数据库(如 MySQL、PostgreSQL)、大数据存储(如 HDFS、Hive)、云平台、文件系统等。
批量和实时加载 :支持批量加载和实时流处理,确保数据的及时性和可用性。
Spoon :图形化设计工具,用于设计、测试和调试 ETL 流程。用户可以通过拖拽组件和连接线,直观地构建数据流和作业。
Pan :用于执行数据转换的命令行工具。通常用于自动化脚本和批处理任务。
Kitchen :用于执行作业的命令行工具。作业可以包含多个转换步骤和条件逻辑,适用于复杂的 ETL 流程。
Carte :轻量级 Web 服务器,用于远程执行和监控 ETL 作业和转换,支持分布式处理和远程管理。
执行引擎 :Kettle 的执行引擎支持并行处理和多线程,能够高效地执行复杂的数据转换和加载任务。
连接池 :通过配置连接池,Kettle 可以优化数据库连接的使用,提高性能和资源利用率。
日志和监控 :Kettle 提供详细的日志和监控功能,可以记录每个 ETL 步骤的执行情况,支持故障排查和性能优化。
数据整合 :从 CRM、ERP、营销自动化、客户支持等系统提取数据,清洗并整合到统一的数据仓库中。
数据分析 :利用整合后的数据,分析客户行为、偏好和价值,为营销和客户服务提供支持。
实时数据同步 :使用 Kettle 实时同步供应链各环节的数据,包括采购、库存、生产、物流等,确保数据的一致性和实时性。
数据分析 :分析供应链效率、库存水平和物流状况,优化供应链流程,降低成本,提高效率。
跨系统数据整合 :从不同财务系统(如 ERP、财务管理软件)中提取数据,进行清洗和整合,形成统一的财务视图。
报表生成和分析 :生成各种财务报表,支持财务分析和决策。
全局数据视图 :Kettle 可以将企业各个业务系统中的数据进行整合,形成全局的数据视图,支持数据驱动的业务决策。
数据流管理 :通过设计和管理数据流,实现数据从源头到目标系统的高效流动和转换。
数据质量控制 :在 ETL 过程中,对数据进行清洗、校验和标准化,确保数据的质量和一致性。
元数据管理和数据血缘 :记录数据的来源、转换过程和目标位置,支持数据的可追溯性和治理。
API 接口 :通过 Kettle 提供的数据服务接口,支持前端应用和其他系统实时获取和使用数据。
数据集市 :按需加载数据到业务部门的数据集市,提供个性化的数据服务,支持业务应用和分析需求。
性能调优 :优化 SQL 查询、使用批量处理、合理配置并行处理,提高 ETL 过程的性能。
资源管理 :通过连接池管理、内存优化和资源分配,提升系统的资源利用效率。
自动化作业 :利用 Kitchen 和 Pan 工具,实现 ETL 作业的自动化执行和调度。
调度系统集成 :与操作系统的调度工具(如 Windows Task Scheduler、Linux Cron)集成,实现定时执行和监控。
数据安全 :在 ETL 过程中,确保数据传输和存储的安全性,支持加密和访问控制。
权限管理 :通过用户权限管理,控制对数据和 ETL 作业的访问权限,确保数据的安全和合规。
下载 :
访问 Pentaho 的官网下载页面,下载 Pentaho Data Integration(Kettle)的最新版本。下载链接:Pentaho Data Integration Download
解压 :
将下载的 ZIP 文件解压到本地目录。
启动 Spoon :
进入解压后的目录,运行 spoon.bat
(Windows)或 spoon.sh
(Linux/MacOS)来启动 Spoon。
Java 环境 :
确保安装了 JDK(Java Development Kit),并将 JAVA_HOME
环境变量指向 JDK 安装路径。
数据库驱动 :
如果要连接到特定数据库,需要下载对应的 JDBC 驱动,并将驱动 JAR 文件放入 lib
目录中。
新建连接 :
打开 Spoon,选择 “File” -> “New” -> “Database connection”。
配置数据库连接参数,包括数据库类型、主机地址、端口、数据库名称、用户名和密码。
测试连接 :
配置完成后,点击 “Test” 按钮,确保连接成功。
新建转换(Transformation) :
选择 “File” -> “New” -> “Transformation”。
从左侧的组件面板中,拖拽 “Table Input” 组件到工作区。
配置 SQL 查询 :
双击 “Table Input” 组件,配置数据库连接和 SQL 查询,点击 “Preview” 按钮预览数据。
添加转换组件 :
在转换中添加所需的组件,如 “Filter Rows” 进行数据过滤,“Sort Rows” 进行数据排序等。
连接组件 :
使用鼠标右键连接各个组件,设计数据流。
配置组件 :
双击组件进行配置,如设置过滤条件、排序字段等。
添加目标组件 :
拖拽 “Table Output” 组件到工作区,连接到转换组件的输出。
配置目标表 :
双击 “Table Output” 组件,配置目标数据库连接和目标表,定义字段映射关系。
新建作业 :
选择 “File” -> “New” -> “Job”。
拖拽 “Start” 和 “Transformation” 组件到工作区,连接起来。
配置作业步骤 :
双击 “Transformation” 组件,选择要执行的转换文件。
添加其他步骤,如 “Mail” 发送通知邮件、“Shell” 执行脚本等。
设置调度 :
在作业设计界面中,添加 “Job Scheduler” 组件,配置执行时间和频率。
或者使用操作系统的调度工具(如 Windows Task Scheduler 或 Linux Cron)来调度执行 Kettle 作业。
JavaScript 组件 :
在转换中添加 “Modified JavaScript Value” 组件,编写自定义 JavaScript 代码进行复杂的数据处理。
用户定义函数 :
编写和调用用户定义函数(UDF),以扩展 Kettle 的功能。
配置连接池 :
在 Spoon 中配置数据库连接池,提高数据库连接的复用性和性能。
调优转换和作业 :
优化 SQL 查询,减少数据量和提高处理速度。
使用批量处理,减少数据库操作的次数。
合理设置并行处理,充分利用多核 CPU 性能。
数据提取 :
从多个业务系统提取数据,清洗并转换为统一的格式。
数据加载 :
将清洗后的数据加载到数据仓库的事实表和维度表中,设计星型或雪花型模型。
数据监听 :
使用 Kettle 监听数据库变化(如 CDC),实时提取变更数据。
流处理 :
实时处理变更数据,并同步到目标系统,如数据仓库或 NoSQL 数据库。
启动 Spoon :
使用 Spoon 设计和测试转换(Transformation)和作业(Job)。
配置数据库连接、数据源和目标,创建 ETL 流程。
设计转换和作业 :
在 Spoon 中拖拽组件(如 Table Input、Filter Rows、Table Output 等)到工作区。
通过连接组件,设计数据流和处理逻辑。
配置每个组件的详细参数和脚本。
保存转换和作业 :
将设计好的转换和作业保存为 .ktr
(Transformation 文件)和 .kjb
(Job 文件)。
执行作业和转换 :
使用 Kitchen(命令行工具)来执行作业,或者使用 Pan 来执行单个转换。
通过命令行参数指定要执行的 .ktr
或 .kjb
文件。
数据提取(Extract) :
从指定的数据源中提取数据。数据源可以是关系型数据库、NoSQL 数据库、文件、Web 服务等。
使用 Table Input 或其他输入组件读取数据。
数据转换(Transform) :
在数据提取之后,使用各种转换组件对数据进行清洗、过滤、转换和聚合。
可以使用 Filter Rows、Sort Rows、Join Rows、Add Constants 等组件。
使用脚本组件(如 Modified JavaScript Value)进行复杂的转换逻辑。
数据加载(Load) :
将转换后的数据加载到目标系统,如数据仓库、数据库、文件系统等。
使用 Table Output 或其他输出组件将数据写入目标位置。
日志和监控 :
在执行过程中,Kettle 记录详细的日志,包含每个步骤的执行时间、处理的数据量、错误信息等。
使用 Carte 或其他监控工具查看和管理执行情况。
启动 Spoon :
启动 Spoon 应用,打开设计界面。
设计转换和作业 :
在 Spoon 中,创建新的转换(Transformation)。
从左侧面板中拖拽 “Table Input” 组件到工作区,用于从数据源提取数据。
配置 “Table Input” 组件的数据库连接和 SQL 查询。
添加 “Filter Rows” 组件,用于数据清洗和过滤。
配置过滤条件,将数据流连接到下一个组件。
添加 “Table Output” 组件,用于将数据加载到目标系统。
配置目标数据库连接和目标表。
保存转换和作业 :
保存转换为 .ktr
文件,作业为 .kjb
文件。
执行作业和转换 :
打开命令行,使用 kitchen.sh -file=/path/to/job.kjb
执行作业,或者 pan.sh -file=/path/to/transformation.ktr
执行转换。
数据提取(Extract) :
“Table Input” 组件从数据源提取数据,根据配置的 SQL 查询获取所需数据。
数据转换(Transform) :
数据流经 “Filter Rows” 组件,根据设置的过滤条件处理数据,去除不符合条件的数据。
可以添加其他转换组件进行进一步的数据处理和清洗。
数据加载(Load) :
处理后的数据通过 “Table Output” 组件加载到目标系统。
配置字段映射关系,确保数据正确插入目标表。
日志和监控 :
查看 Spoon 中的日志窗口,监控每个步骤的执行情况。
使用 Carte 或其他监控工具,远程监控和管理 ETL 过程。
*请认真填写需求信息,我们会在24小时内与您取得联系。