一個成功人士的背后,必定曾經做出過勇敢而又孤獨的決定。
放棄不難,但堅持很酷~
我們都知道 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小時內與您取得聯系。