現在、ファイル to DBの構成でファイルからDBへINSERT処理を実行している処理があるのですが、
時折、データが0件のファイル(ヘッダ行のみ)が連携されてしまい、テーブルも上書きで0件になってしまいます。
クラスメソッドさんのブログで出力ツールの手前にフォーミュラでNULLカラムを追加、値はNull()で
配置して、出力ツールのオプション「ファイル/テーブル名に接尾辞を取得」にチェック。
「ファイル名またはファイル名の一部を含むフィールド」に先ほどのNULLカラムをセットすることで、
データの上書きを回避できることは分かったのですが、この原理がよくわかりません。
また、InDB処理をしたいときに上記の方法だと回避できないので、
上記以外の方法でファイルの件数が0件の時にテーブルを0件で上書きするのを回避する方法はないでしょうか?
知見をお持ちであれば助言をいただければと存じます。
解決済! 解決策の投稿を見る。
やり方は色々とあるかと思います。
1.ファイル書き込みの部分をバッチマクロにして、件数が0であればツールコンテナを閉じるようなマクロにする(もしくは分岐ツールを利用)
2.「エラー時のWFの実行をキャンセルする」オプションを有効にし、メッセージツールでエラーを起こさせて止める(WFの流れ方を調整する必要があるかもしれません)
返答ありがとうございます。
早速2番についてトライしてみたところ、CSVファイル→DBへの書き込みは無事に中断できました。
ひとつ教えていただきたいのですが、件数0件で中断するタイミングとして、
書き込み前に判断して止めているのでしょうか?
気になっているのは、0件という判断をしてキャンセルされるまでの間に
処理が走ってしまうことがあるのかどうかを気にしておりまして。
ご存じだったらで良いので、教えていただけないでしょうか。
WF実行のベースはアイコンのID順のようですが、正確なところはよくわかっていません。
https://community.alteryx.com/t5/Engine-Works-Blog/The-Periodic-Table-of-Alteryx-tools/ba-p/64120
にあるAlteryxのアイコン周期表があるのですが、ここに書かれているブロッキングツール(データが全部来るまで処理を止めるツール)をうまく配置するとWFの流れる順序を制御できたりします。
ただ、今回のメッセージツールは優先的に実行されているように思います。
(メッセージタイプの設定を「エラー - このツールを通過するレコードを停止する」にしているせいではないかと思うのですが・・・)
もし先に書き込みが走るようになるようでしたらご相談いただければと思います。
返答ありがとうございます。
>ただ、今回のメッセージツールは優先的に実行されているように思います。
>(メッセージタイプの設定を「エラー - このツールを通過するレコードを停止する」にしているせいではないかと思うのですが・・・)
少ない試行回数ですが、優先的に処理を中断しているように感じております。
ひとまず、頂いた方法で実装をしてみて、なにか問題があれば再度検討をしたいと思います。
今回も具体的でわかりやすいアドバイスありがとうございました。