documents:etl:pentaho:pentaho-011
目次
ユーザ定義Javaクラスにnullを喰わす場合
2024-10-27
入力データにnull値が来る場合の対処のメモ
定義
Jarファイル
ユーザ定義Javaクラスから呼び出す外部処理を格納したJarファイル内のクラスのコード。
- MakeTowTimes.java
package towTimesMethods; import java.math.BigDecimal; public class MakeTowTimes { private static BigDecimal ConstTow = new BigDecimal("2.0"); public static long Makelong(long num) { return num * 2; } public static double Makedouble(double num) { return num * 2; } public static Long MakeLong(Long num) { if (num == null) return 0L; return num * 2; } public static Double MakeDouble(Double num) { if (num == null) return 0D; return num * 2; } public static BigDecimal MakeBigDecimal(BigDecimal num) { if (num == null) return BigDecimal.ZERO; return num.multiply(ConstTow); } public static String MakeString(String str) { if (str == null) return ""; return str + str; } }
とりあえずテスト。各メソッドの動作確認できました。
pentahoのデータ変換定義
Spoonの該当パスに先のコードで生成したJarファイルをコピーしてからSpoonを起動してユーザ定義Javaクラスを定義します。
ステップ「データグリッド」
2レコード定義してます。
ステップ「ユーザ定義Javaクラス」
入力項目の内容をJarファイル内のクラスのメソッドで処理するコードを定義します。
実行結果
Jarファイル内のクラスのメソッドを呼び出せました。
入力にnullが含まれる場合
レコードを1つ追加します。
全項目がnullの1レコードが追加されました。
実行結果
はい、見事異常終了となりました。
原因箇所
long型、double型の処理を除去すると動作します。
以下の2点、項目がnullの時異常終了する模様です。どうもメソッドgetLong(), getDouble()の戻り値がnullになる模様です。
なので Long から long へのキャスト、Double から double へのキャストでエラーになる訳です。※nullで返るとは思わなんだ…
long a11 = get(Fields.In, "long値").getLong(r); double a12 = get(Fields.In, "double値").getDouble(r);
documents/etl/pentaho/pentaho-011.txt · 最終更新: 2024/10/26 16:34 by k896951