Kettle実行ログ記録
4602 ワード
オリジナル文章、転載は出典を明記してください.http://qq85609655.iteye.com/blog/2173882
kettle.propertiesではパラメータを定義できます.
ログを記録すると、ロックが行われます.kettle作業が非常に多い場合は、テーブルロックやキューがjobログを待っている場合は、効率に大きな影響を与えます.及び作業のスケジュール.
transの下に変数を設定するステップがあります.
jobテストを書きました.
ETL運行ログテスト.zip
Transログは正常に記録できますが、jobログは記録できません.
合点がいかない.納得がいかないです.バージョンの問題だと思って、最新バージョンのpdi-ce-5.2.0-209に更新しました.問題は相変わらずです.
まさか、Kettleの設計Set Varablesは変数を設定します.その変数はtransにしか使えません.jobには使えませんか?
各jobは上のように手動で設定する必要がありますか?面倒くさいです.そうしたくないです.
Eclipseを開けて、Kettleのソースコードを調べて、長い間追跡して、具体的な原因を発見しました.kettleのBugですか?それともその使用思想のため、ソースコードを修正して、テストして解決しました.
私が使っているkettle 4.4のバージョンは、JobEntryJob.javaの種類を変更する方法が必要です.
jobを再起動し、を解決しました.
以後、各大きいjob、複雑なjobの運行ログを個々のテーブルに記録することができます.jobの運行状況を確認します.
再コンパイルされたJobEntryJob.classをkettle-engine.jarに再包装します.Ok!
ちょうど4.4バージョンの学生に会ったら、直接に添付ファイルのJobEntryJob.class.zipを解凍して、kettle-engine.jarの中の該当するクラスを交替してもいいです.
特に注意してください.Kettle 5.xバージョンとKettle 4.xバージョンは大きく変化しています.実際の方法によって修正が必要です.ここでは、私はKettle 4.4の修正コードだけを貼りました.他のバージョンについては、学生たちが自分で着手できます.
kettle.propertiesではパラメータを定義できます.
KETTLE_JOB_LOG_DB=dw1
KETTLE_JOB_LOG_TABLE=bi_etl_job_log_table
KETTLE_TRANS_LOG_DB=dw1
KETTLE_TRANS_LOG_TABLE=bi_etl_trans_log_table
全体設定で、kettleのjobとtransログを記録します.ログを記録すると、ロックが行われます.kettle作業が非常に多い場合は、テーブルロックやキューがjobログを待っている場合は、効率に大きな影響を与えます.及び作業のスケジュール.
transの下に変数を設定するステップがあります.
jobテストを書きました.
ETL運行ログテスト.zip
Transログは正常に記録できますが、jobログは記録できません.
合点がいかない.納得がいかないです.バージョンの問題だと思って、最新バージョンのpdi-ce-5.2.0-209に更新しました.問題は相変わらずです.
まさか、Kettleの設計Set Varablesは変数を設定します.その変数はtransにしか使えません.jobには使えませんか?
各jobは上のように手動で設定する必要がありますか?面倒くさいです.そうしたくないです.
Eclipseを開けて、Kettleのソースコードを調べて、長い間追跡して、具体的な原因を発見しました.kettleのBugですか?それともその使用思想のため、ソースコードを修正して、テストして解決しました.
私が使っているkettle 4.4のバージョンは、JobEntryJob.javaの種類を変更する方法が必要です.
public JobMeta getJobMeta(Repository rep, VariableSpace space) throws KettleException {
JobMeta jobMeta = null;
try {
switch(specificationMethod) {
case FILENAME:
jobMeta = new JobMeta((space != null ? space.environmentSubstitute(getFilename()) : getFilename()), rep, null);
break;
case REPOSITORY_BY_NAME:
if (rep != null) {
String realDirectory = environmentSubstitute(getDirectory());
RepositoryDirectoryInterface repositoryDirectory = rep.loadRepositoryDirectoryTree().findDirectory(realDirectory);
if (repositoryDirectory==null) {
throw new KettleException("Unable to find repository directory ["+Const.NVL(realDirectory, "")+"]");
}
jobMeta = rep.loadJob((space != null ? space.environmentSubstitute(getJobName()) : getJobName()), repositoryDirectory, null, null); // reads
} else {
throw new KettleException("Could not execute job specified in a repository since we're not connected to one");
}
break;
case REPOSITORY_BY_REFERENCE:
if (rep != null) {
// Load the last version...
//
jobMeta = rep.loadJob(jobObjectId, null);
} else {
throw new KettleException("Could not execute job specified in a repository since we're not connected to one");
}
break;
default:
throw new KettleException("The specified object location specification method '"+specificationMethod+"' is not yet supported in this job entry.");
}
if (jobMeta != null) {
jobMeta.setRepository(rep);
jobMeta.copyVariablesFrom(this);
}
return jobMeta;
} catch (Exception e) {
throw new KettleException("Unexpected error during job metadata load", e);
}
}
主にコードjobMeta.co pyVarables Fromを追加しました.前のステップを追加するSet Varablesの変数を設定します.jobを再起動し、を解決しました.
以後、各大きいjob、複雑なjobの運行ログを個々のテーブルに記録することができます.jobの運行状況を確認します.
再コンパイルされたJobEntryJob.classをkettle-engine.jarに再包装します.Ok!
ちょうど4.4バージョンの学生に会ったら、直接に添付ファイルのJobEntryJob.class.zipを解凍して、kettle-engine.jarの中の該当するクラスを交替してもいいです.
特に注意してください.Kettle 5.xバージョンとKettle 4.xバージョンは大きく変化しています.実際の方法によって修正が必要です.ここでは、私はKettle 4.4の修正コードだけを貼りました.他のバージョンについては、学生たちが自分で着手できます.