条件付きレイヤーの条件と判定に使われる値の型について

自分が解決に時間がかかった箇所を、備忘録を兼ねて記事を作成。

今回使用するフロー

filegetで読み込んだレコードを、マッパーの中で条件付きレイヤーを使って条件に一致したレコードのみを出力します。

マッパーの中身と条件付きレイヤーの条件

2つ目のフィールド「Integerの場合」が0ではないなら値が渡されます。

読み込むCSVの内容

行の目印となるアルファベット1文字と条件付きレイヤーの判定に使われる値の2つのフィールドで構成されています。

A,0
B,0.00
C,0.11
D,1
E,1.00
F,1.11

ストリームのデータ型

上記のCSVファイルの2つ目のレコードをIntegerで読み込みます。

フローの実行

この条件でフローを実行するとfilegetではすべてのレコードが取得できますが、条件付きレイヤーのあるマッパーでD,1の行しか値が渡されません。エラーも起きないため、条件付きレイヤーの「!= 0」の条件に「0」ではない0.11、1.00、1.11が当てはまらないことに気付きにくいです。

解決方法

フィールドの型(下図ではデータ型)を小数点のある値も扱えるDoubleにすることで、CからFのレコードも条件付きレイヤーで値が渡されます。

また、2つ目のフィールドの型がIntegerの状態でマッパーでのレイヤーを条件なしにするとフロー実行でエラーになるので、うまく値が取得できていないことに気づけます。

下図では2番目のレコードの0.00でエラーになっていることがわかります。