Kettle工具常用操作


1.設置共享DB連接

設置DB連接共享后,可以避免每次創建轉換時,重復創建相同數據源的窘境。

2.Kettle引入自定義java的工具jar包

2.1.編寫Java工具類

2.2.將項目打成jar包

2.3.將jar包拷貝到Kettle的lib目錄下,然后啟動kettle工具

2.4.kettle創建JavaScript腳本,引入並使用自定義jar包類;

//Script here

var utl = new Packages.com.pga.pky.FormatUtils();

var optTime = utl.char2Date(OPT_TIME);

建議使用兼容模式對變量進行取值,賦值操作。(圖示沒有使用兼容模式)

3.Kettle引入自定義js文件

代碼示例如下:

//Script here
//js文件相對於kettle工具根目錄的路徑
var path =getVariable("Internal.Transformation.Filename.Directory", "相對路徑");

LoadScriptFile(path +"/common_Functions.js");
//-----------------------------------------------------------------------------------

var mpType =  getVariable("MPTYPE","");
var cycleCount = str2num(getVariable("COLLECT_CYCLE_COUNT","1"));
var prevCycle = str2num(getVariable("CYCLE_PREV_VALUE","0"));

//調用js文件中的方法
var colInfo = initCycleTime(mpType, prevCycle, cycleCount);
var startTime = date2str(colInfo[0], "yyyy-MM-dd HH:mm:ss");
var endTime = date2str(colInfo[1], "yyyy-MM-dd HH:mm:ss");
writeToLog("m","時間:"+startTime+" -> "+endTime);

3.1.獲取js的路徑參數

3.2.從StartScript加載文件

注意kettle調用示例:將一個javascript文件加載到實際的運行上下文中。應該從定義的StartScript調用此函數,否則,每次處理都會加載javascript文件行。

4.Linux服務器安裝kettle

4.1.kettle程序解壓到指定目錄即可

#查看jdk版本
java -version
#進入/pdi-ce-7.1.0.0-12/data-integration/目錄下
ls -l
#查看*.sh文件是否為可執行狀態
#如果為不可執行狀態,則執行
chmod +x *.sh
#測試是否賦權成功
./kitchen.sh

./kitchen.sh輸出信息如下:

#######################################################################
WARNING:  no libwebkitgtk-1.0 detected, some features will be unavailable
    Consider installing the package with apt-get or yum.
    e.g. 'sudo apt-get install libwebkitgtk-1.0-0'
#######################################################################
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
Options:
  -rep            = Repository name
  -user           = Repository username
  -pass           = Repository password
  -job            = The name of the job to launch
  -dir            = The directory (dont forget the leading /)
  -file           = The filename (Job XML) to launch
  -level          = The logging level (Basic, Detailed, Debug, Rowlevel, Error, Minimal, Nothing)
  -logfile        = The logging file to write to
  -listdir        = List the directories in the repository
  -listjobs       = List the jobs in the specified directory
  -listrep        = List the available repositories
  -norep          = Do not log into the repository
  -version        = show the version, revision and build date
  -param          = Set a named parameter <NAME>=<VALUE>. For example -param:FILE=customers.csv
  -listparam      = List information concerning the defined parameters in the specified job.
  -export         = Exports all linked resources of the specified job. The argument is the name of a ZIP file.
  -custom         = Set a custom plugin specific option as a String value in the job using <NAME>=<Value>, for example: -custom:COLOR=Red
  -maxloglines    = The maximum number of log lines that are kept internally by Kettle. Set to 0 to keep all rows (default)
  -maxlogtimeout  = The maximum age (in minutes) of a log line while being kept internally by Kettle. Set to 0 to keep all rows indefinitely (default)

4.2.kettle從資源庫獲取ETL腳本

#找到安裝kettle用戶的用戶目錄
cd ~
#將windows中用戶目錄下的.kettle(隱藏文件)文件夾拷貝到當前目錄(Linux下的用戶目錄)
ls -a	#查看所有文件,包含隱藏文件
#進入.kettle文件夾,修改/查看資源庫配置文件repositories.xml

配置文件內容

<?xml version="1.0" encoding="UTF-8"?>  
<repositories> 
  <connection>
      .....
  </connection>  
  <repository>  <id>KettleFileRepository</id>  
    <name>fileRepository</name>  
    <description>filereposity</description>  
    <read_only>N</read_only>  
    <hides_hidden_files>N</hides_hidden_files>  
    <connection>.....</connection>
  </repository>  
</repositories>  

5.啟動kettle轉換腳本和作業腳本

啟動命令語法:

#執行job
sh /opt/kettle/kitchen.sh -rep=資源庫名稱 -user=(登陸資源庫的)用戶名 -pass=密碼  -dir=腳本所在目錄 -job=腳本名 -level=Basic > /opt/kettle/log/etl.log

#執行轉換
sh /opt/kettle/pan.sh -rep=資源庫名稱 -user=(登陸資源庫的)用戶名 -pass=密碼  -dir=腳本所在目錄 -trans=腳本名 -level=Basic > /opt/kettle/log/etl.log

參考腳本:

#!/bin/sh
REP='fileRepository'
USER="$1"
PASS="$2"
DIR="$3"
FILE="$4"
TYPE="$5"

if test -e /opt/kettle/log"$DIR"
then
	echo '日志目錄已存在'
else
	mkdir -p /opt/kettle/log"$DIR"
	echo '日志目錄已創建'
fi
if [ "$TYPE" = "JOB" ] || [ "$TYPE" = "job" ]; then
	nohup sh /opt/kettle/pdi-ce-7.1.0.0-12/data-integration/kitchen.sh -rep="$REP" -user="$USER" -pass="$PASS"  -dir="$DIR" -job="$FILE" -level=Basic > "/opt/kettle/log$DIR$FILE.log" 2>&1 & 
	echo '執行:kitchen.sh'
else
	nohup sh /opt/kettle/pdi-ce-7.1.0.0-12/data-integration/pan.sh -rep="$REP" -user="$USER" -pass="$PASS"  -dir="$DIR" -trans="$FILE" -level=Basic > "/opt/kettle/log$DIR$FILE.log" 2>&1 & 
	echo '執行:pan.sh'
fi

echo "賬號:$USER 密碼:$PASS"
echo "目錄:$DIR 文件:$FILE 類型:$TYPE"
echo "日志路徑:/opt/kettle/log$DIR$FILE.log"
exit

6.提升ETL腳本導入MySQL數據庫效率

useServerPrepStmts:如果服務器支持,是否使用服務器端預處理語句 默認值為“true” 調整為“ false”
rewriteBatchedStatements是否批量執行(對於insert,驅動則會把多條sql語句重寫成一條風格很酷的sql語句,然后再發出去。 官方文檔說,這種insert寫法可以提高性能【對delete和update,驅動所做的事就是把多條sql語句累積起來再一次性發出去】)“true”
useCompression壓縮數據傳輸,優化客戶端和MySQL服務器之間的通信性能 “true”

characterEncoding:此處也可以設置字符及編碼,用於解決數據庫字符集不同造成的中文亂碼問題。如:utf8

Kettle日志級別

Kettle的日志級別LogLevel分為以下幾個:

  • Nothing 沒有日志 不顯示任何輸出
  • Error 錯誤日志 僅僅顯示錯誤信息
  • Minimal 最小日志 使用最小的日志
  • Basic 基本日志 缺省的日志級別
  • Detailed詳細日志 給出日志輸出的細節
  • Debug 調試日志 調試目的,調試輸出
  • Rowlevel行級日志 打印出每一行記錄的信息

大批量數據轉換時,將日志級別調整為:Error 錯誤日志 僅僅顯示錯誤信息 ,也可以提升數據轉換速度。

7.js中可以通過getVariable(var, var)獲取的變量列舉:

內置變量

變量 描述
Internal.Kettle.Version 這是kettle的版本號,比如4.0.0
Internal.Kettle.Build.Version 這是kettle源代碼的SVN的修訂號
Internal.Kettle.Build.Date 這是kettle的build日期
Internal.Job.Filename.Directory 如果使用文件方式運行作業(.kjb),這個變量就是作業文件所在的目錄。里用這個變量用戶可以指定其它文件
Internal.Job.Filename.Name 如果使用文件方式運行作業(.kjb),這個變量就是作業文件名
Internal.Job.Name 當前正在執行的作業的名字
Internal.Transformation.Repository.Directory 如果使用資源庫方式執行轉換,這個變量是轉換所在資源庫目錄的路徑
Internal.Step.Partition.ID 如果一個步驟是以分區方式運行的,每個分區都有一個步驟拷貝。這個變量就是步驟拷貝所屬的分區ID
Internal.Step.Partition.Number 如果一個步驟是以分區方式運行的,每個分區都有一個步驟拷貝器。這個變量就是步驟拷貝所屬的分區編號,分區編號從0到分區個數減1
Internal.Slave.Transformation.Number 如果轉換在子服務器上以集群方式運行,這個變量就是子服務器的名字
Internal.Cluster.Size 如果轉換在子服務器上以集群方式運行,這個變量就是集群中子服務器的個數
Internal.Step.Unique.Number 這個變量是指定步驟的步驟拷貝的唯一編號。這個變量同樣適用於分區和集群環境。取值從0到步驟拷貝個數減1
Internal.Cluster.Master 若轉換以集群方式運行,如果是運行在主服務器上,這個值是Y,如果是運行在子服務器上,這個值是N
Internal.Step.Unique.Count 唯一的步驟拷貝個數。也適用於集群或分區的情況
Internal.Step.Name 正在執行的步驟的名字
Internal.Step.CopyNr 本地轉換的步驟拷貝號(不考慮集群的情況)

kettle變量

變量 描述
KETTLE_SHARED_OBJECTS 作業和轉換的共享對象文件的位置。默認的共享對象文件shared.xml,位於Kettle Home 目錄下。設置這個變量可以覆蓋默認值
KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL 如果這個變量設置為Y,空字符串和null是不同的,否則就是相同的(默認)
KETTLE_MAX_LOG_SIZE_IN_LINES kettle初始的最大日志行數。設置為0將保留所有日志行(默認)
KETTLE_MAX_LOG_TIMEOUT_IN_MINUTES kettle中日志行的最長保留時間(單位:分鍾)。設置為0將保留所有行(默認)
KETTLE_STEP_PERFORMANCE_SNAPSHOT_LIMIT 內存中的最大步驟性能快照數。設置為0將保留所有快照(默認)
KETTLE_PLUGIN_CLASSES 逗號分隔的類名列表,用來查找插件iandeannotation。參考http://wiki.pentaho.com/display/EAI/How+to+debug+a+Kettle+4+plugin
KETTLE_LOG_SIZE_LIMIT 如果在轉換和作業的日志表的配置izhong沒有設置“日志行數限制”參數,這類轉換和作業將統一使用這個參數作為最大日志行
  • TRANS:對於轉換日志表。
  • TRANS_PERFORMANCE:對於性能日志表。
  • STEP:對於步驟日志表。
  • JOB:對於作業日志表
  • JOBENTRY:對於作業項日志表。
  • CHANNEL:對於通道日志表。

kettle日志表變量

變量 描述
KETTLE_…_LOG_DB 設置日志表使用的數據庫連接的名字
KETTLE_…_LOG_SCHEMA 設置日志表使用的數據庫模式名
KETTLE_…_LOG_TABLE 設置日志表使用的日志表名

8.kettle中的參數在SQL腳本中的用法

上圖中的說明有問題,並不是CRUD的結果,而是語句執行的狀態值(具體內容還需繼續測試。。。)

9.kettle按條件執行sql腳本的問題

1.現象

在轉換腳本中按條件執行sql腳本存在問題,不管是否滿足條件sql腳本都會先於過濾組件執行一次。如下圖:

2.解決

上述問題可以在job中解決。如下圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM