整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

「实战」Kettle自定义jar包供JavaScri

「实战」Kettle自定义jar包供JavaScript使用

一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。

放弃不难,但坚持很酷~

我们都知道 Kettle 是用 Java 语言开发,并且可以在 JavaScript 里面直接调用 java 类方法。所以有些时候,我们可以自定义一些方法,来供 JavaScript 使用。

本篇文章有参考自:https://www.xiaominfo.com/2019/08/13/kettle-12/

一、在 java 项目中创建工具类

在项目中,创建 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 目录下。如下图所示:

三、编写 JavaScript 脚本

重启 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 包一样…

四、FAQ

上面这个错误究竟是怎么回事呢?我也很奇怪。于是我就用压缩工具也看了看 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








核心功能详解

1. 数据提取(Extract)

  • 广泛的数据源支持 :Kettle 可以从各种数据源中提取数据,包括传统关系数据库(如 Oracle、MySQL、SQL Server)、NoSQL 数据库(如 MongoDB、Cassandra)、文件系统(如 CSV、JSON、XML)、大数据平台(如 Hadoop、HDFS)、云存储(如 Amazon S3、Google Cloud Storage)、Web 服务(REST、SOAP)和消息队列(如 Kafka)。

  • 灵活的数据提取方式 :支持全量提取、增量提取、变更数据捕获(CDC),适应不同业务场景的数据需求。


2. 数据转换(Transform)

  • 数据清洗 :通过内置的清洗组件,如去重、过滤、填充缺失值、标准化数据格式等,保证数据的质量和一致性。

  • 复杂数据转换 :支持各种复杂的数据转换操作,包括数据聚合、分组、拆分、排序、连接(JOIN)、数据映射、数据类型转换等。

  • 脚本和自定义代码 :支持通过 JavaScript、Groovy、Java 等脚本语言进行自定义的数据处理,满足特定业务需求。

3. 数据加载(Load)

  • 多种目标支持 :Kettle 可以将处理后的数据加载到多种目标,包括数据仓库(如 Teradata、Snowflake)、数据库(如 MySQL、PostgreSQL)、大数据存储(如 HDFS、Hive)、云平台、文件系统等。

  • 批量和实时加载 :支持批量加载和实时流处理,确保数据的及时性和可用性。


架构细节

1. 核心组件

  • Spoon :图形化设计工具,用于设计、测试和调试 ETL 流程。用户可以通过拖拽组件和连接线,直观地构建数据流和作业。

  • Pan :用于执行数据转换的命令行工具。通常用于自动化脚本和批处理任务。

  • Kitchen :用于执行作业的命令行工具。作业可以包含多个转换步骤和条件逻辑,适用于复杂的 ETL 流程。

  • Carte :轻量级 Web 服务器,用于远程执行和监控 ETL 作业和转换,支持分布式处理和远程管理。

2. 运行时架构

  • 执行引擎 :Kettle 的执行引擎支持并行处理和多线程,能够高效地执行复杂的数据转换和加载任务。

  • 连接池 :通过配置连接池,Kettle 可以优化数据库连接的使用,提高性能和资源利用率。

  • 日志和监控 :Kettle 提供详细的日志和监控功能,可以记录每个 ETL 步骤的执行情况,支持故障排查和性能优化。


实际应用场景

1. 客户360度视图

  • 数据整合 :从 CRM、ERP、营销自动化、客户支持等系统提取数据,清洗并整合到统一的数据仓库中。

  • 数据分析 :利用整合后的数据,分析客户行为、偏好和价值,为营销和客户服务提供支持。

2. 供应链管理

  • 实时数据同步 :使用 Kettle 实时同步供应链各环节的数据,包括采购、库存、生产、物流等,确保数据的一致性和实时性。

  • 数据分析 :分析供应链效率、库存水平和物流状况,优化供应链流程,降低成本,提高效率。

3. 财务数据整合

  • 跨系统数据整合 :从不同财务系统(如 ERP、财务管理软件)中提取数据,进行清洗和整合,形成统一的财务视图。

  • 报表生成和分析 :生成各种财务报表,支持财务分析和决策。


在数据中台中的具体贡献

1. 数据整合

  • 全局数据视图 :Kettle 可以将企业各个业务系统中的数据进行整合,形成全局的数据视图,支持数据驱动的业务决策。

  • 数据流管理 :通过设计和管理数据流,实现数据从源头到目标系统的高效流动和转换。

2. 数据治理

  • 数据质量控制 :在 ETL 过程中,对数据进行清洗、校验和标准化,确保数据的质量和一致性。

  • 元数据管理和数据血缘 :记录数据的来源、转换过程和目标位置,支持数据的可追溯性和治理。

3. 数据服务化

  • API 接口 :通过 Kettle 提供的数据服务接口,支持前端应用和其他系统实时获取和使用数据。

  • 数据集市 :按需加载数据到业务部门的数据集市,提供个性化的数据服务,支持业务应用和分析需求。


高级功能和优化

1. 高级调优

  • 性能调优 :优化 SQL 查询、使用批量处理、合理配置并行处理,提高 ETL 过程的性能。

  • 资源管理 :通过连接池管理、内存优化和资源分配,提升系统的资源利用效率。

2. 自动化和调度

  • 自动化作业 :利用 Kitchen 和 Pan 工具,实现 ETL 作业的自动化执行和调度。

  • 调度系统集成 :与操作系统的调度工具(如 Windows Task Scheduler、Linux Cron)集成,实现定时执行和监控。

3. 安全和权限管理

  • 数据安全 :在 ETL 过程中,确保数据传输和存储的安全性,支持加密和访问控制。

  • 权限管理 :通过用户权限管理,控制对数据和 ETL 作业的访问权限,确保数据的安全和合规。


使用教程


1. 安装与环境配置

1.1 下载和安装

  1. 下载

    • 访问 Pentaho 的官网下载页面,下载 Pentaho Data Integration(Kettle)的最新版本。下载链接:Pentaho Data Integration Download

  2. 解压

    • 将下载的 ZIP 文件解压到本地目录。

  3. 启动 Spoon

    • 进入解压后的目录,运行 spoon.bat (Windows)或 spoon.sh (Linux/MacOS)来启动 Spoon。

1.2 环境配置

  1. Java 环境

    • 确保安装了 JDK(Java Development Kit),并将 JAVA_HOME 环境变量指向 JDK 安装路径。

  2. 数据库驱动

    • 如果要连接到特定数据库,需要下载对应的 JDBC 驱动,并将驱动 JAR 文件放入 lib 目录中。

2. 基础操作

2.1 连接数据源

  1. 新建连接

    • 打开 Spoon,选择 “File” -> “New” -> “Database connection”。

    • 配置数据库连接参数,包括数据库类型、主机地址、端口、数据库名称、用户名和密码。

  2. 测试连接

    • 配置完成后,点击 “Test” 按钮,确保连接成功。

2.2 数据提取与预览

  1. 新建转换(Transformation)

    • 选择 “File” -> “New” -> “Transformation”。

    • 从左侧的组件面板中,拖拽 “Table Input” 组件到工作区。

  2. 配置 SQL 查询

    • 双击 “Table Input” 组件,配置数据库连接和 SQL 查询,点击 “Preview” 按钮预览数据。

3. 设计 ETL 过程

3.1 数据转换

  1. 添加转换组件

    • 在转换中添加所需的组件,如 “Filter Rows” 进行数据过滤,“Sort Rows” 进行数据排序等。

  2. 连接组件

    • 使用鼠标右键连接各个组件,设计数据流。

  3. 配置组件

    • 双击组件进行配置,如设置过滤条件、排序字段等。

3.2 数据加载

  1. 添加目标组件

    • 拖拽 “Table Output” 组件到工作区,连接到转换组件的输出。

  2. 配置目标表

    • 双击 “Table Output” 组件,配置目标数据库连接和目标表,定义字段映射关系。

4. 作业管理

4.1 创建作业(Job)

  1. 新建作业

    • 选择 “File” -> “New” -> “Job”。

    • 拖拽 “Start” 和 “Transformation” 组件到工作区,连接起来。

  2. 配置作业步骤

    • 双击 “Transformation” 组件,选择要执行的转换文件。

    • 添加其他步骤,如 “Mail” 发送通知邮件、“Shell” 执行脚本等。

4.2 调度作业

  1. 设置调度

    • 在作业设计界面中,添加 “Job Scheduler” 组件,配置执行时间和频率。

    • 或者使用操作系统的调度工具(如 Windows Task Scheduler 或 Linux Cron)来调度执行 Kettle 作业。

5. 高级功能

5.1 使用脚本

  1. JavaScript 组件

    • 在转换中添加 “Modified JavaScript Value” 组件,编写自定义 JavaScript 代码进行复杂的数据处理。

  2. 用户定义函数

    • 编写和调用用户定义函数(UDF),以扩展 Kettle 的功能。

5.2 数据库连接池

  1. 配置连接池

    • 在 Spoon 中配置数据库连接池,提高数据库连接的复用性和性能。

5.3 性能优化

  1. 调优转换和作业

    • 优化 SQL 查询,减少数据量和提高处理速度。

    • 使用批量处理,减少数据库操作的次数。

    • 合理设置并行处理,充分利用多核 CPU 性能。

6. 实践案例

6.1 数据仓库建设

  1. 数据提取

    • 从多个业务系统提取数据,清洗并转换为统一的格式。

  2. 数据加载

    • 将清洗后的数据加载到数据仓库的事实表和维度表中,设计星型或雪花型模型。

6.2 实时数据同步

  1. 数据监听

    • 使用 Kettle 监听数据库变化(如 CDC),实时提取变更数据。

  2. 流处理

    • 实时处理变更数据,并同步到目标系统,如数据仓库或 NoSQL 数据库。









描述 Kettle 执行流程

  1. 启动 Spoon

    • 使用 Spoon 设计和测试转换(Transformation)和作业(Job)。

    • 配置数据库连接、数据源和目标,创建 ETL 流程。

  2. 设计转换和作业

    • 在 Spoon 中拖拽组件(如 Table Input、Filter Rows、Table Output 等)到工作区。

    • 通过连接组件,设计数据流和处理逻辑。

    • 配置每个组件的详细参数和脚本。

  3. 保存转换和作业

    • 将设计好的转换和作业保存为 .ktr (Transformation 文件)和 .kjb (Job 文件)。

  4. 执行作业和转换

    • 使用 Kitchen(命令行工具)来执行作业,或者使用 Pan 来执行单个转换。

    • 通过命令行参数指定要执行的 .ktr .kjb 文件。

  5. 数据提取(Extract)

    • 从指定的数据源中提取数据。数据源可以是关系型数据库、NoSQL 数据库、文件、Web 服务等。

    • 使用 Table Input 或其他输入组件读取数据。

  6. 数据转换(Transform)

    • 在数据提取之后,使用各种转换组件对数据进行清洗、过滤、转换和聚合。

    • 可以使用 Filter Rows、Sort Rows、Join Rows、Add Constants 等组件。

    • 使用脚本组件(如 Modified JavaScript Value)进行复杂的转换逻辑。

  7. 数据加载(Load)

    • 将转换后的数据加载到目标系统,如数据仓库、数据库、文件系统等。

    • 使用 Table Output 或其他输出组件将数据写入目标位置。

  8. 日志和监控

    • 在执行过程中,Kettle 记录详细的日志,包含每个步骤的执行时间、处理的数据量、错误信息等。

    • 使用 Carte 或其他监控工具查看和管理执行情况。

详细流程步骤

  1. 启动 Spoon

    • 启动 Spoon 应用,打开设计界面。

  2. 设计转换和作业

    • 在 Spoon 中,创建新的转换(Transformation)。

    • 从左侧面板中拖拽 “Table Input” 组件到工作区,用于从数据源提取数据。

    • 配置 “Table Input” 组件的数据库连接和 SQL 查询。

    • 添加 “Filter Rows” 组件,用于数据清洗和过滤。

    • 配置过滤条件,将数据流连接到下一个组件。

    • 添加 “Table Output” 组件,用于将数据加载到目标系统。

    • 配置目标数据库连接和目标表。

  3. 保存转换和作业

    • 保存转换为 .ktr 文件,作业为 .kjb 文件。

  4. 执行作业和转换

    • 打开命令行,使用 kitchen.sh -file=/path/to/job.kjb 执行作业,或者 pan.sh -file=/path/to/transformation.ktr 执行转换。

  5. 数据提取(Extract)

    • “Table Input” 组件从数据源提取数据,根据配置的 SQL 查询获取所需数据。

  6. 数据转换(Transform)

    • 数据流经 “Filter Rows” 组件,根据设置的过滤条件处理数据,去除不符合条件的数据。

    • 可以添加其他转换组件进行进一步的数据处理和清洗。

  7. 数据加载(Load)

    • 处理后的数据通过 “Table Output” 组件加载到目标系统。

    • 配置字段映射关系,确保数据正确插入目标表。

  8. 日志和监控

    • 查看 Spoon 中的日志窗口,监控每个步骤的执行情况。

    • 使用 Carte 或其他监控工具,远程监控和管理 ETL 过程。