はじめに
本記事では "ゆる~く" HULFT Squareのご紹介をします。
HULFT Squareについてはこちらの公式HP、公式マニュアルへ。
以下内容はご参考となりますので、実際にご検証、マニュアルのご参照をお願い致します。
今回の内容
受発注業務でよくある。。。先入れ先出し。。。FIFOをHULFT Square単体で
やってみます。
【先入れ先出し(FIFO)に使用する時刻】
HULFT Squareストレージに格納されているファイルの最終更新日時を用いて、
ファイルの順序制御を行います。
S3に保存された日時を使う方法も実装できると思っていますが、
今回は見逃してください。
$\huge{↓やることイメージ↓}$
S3に保存されているデータを取得し、HULFT Squareストレージ内で更新日時を比較します。
HULFT Squareのフォルダ構成は以下の様に設定しています。
連携の流れ
①S3コネクタにてHULFT Squareストレージの"受信用フォルダ"へダウンロード。
②HULFT Squareストレージの"処理用フォルダ"内にファイルが存在しないことを
条件に "受信用フォルダ" 内にて、更新日時が最も古いファイルを
"処理用フォルダ" へ移動。
③"処理用フォルダ"へファイル作成を契機にデータ変換処理を行い、
処理完了時にファイルを "退避用フォルダ" へ移動。
先入れ先出し(FIFO)のフローはこんな感じ。
スクリプト(処理)を3つ作成し以下の様にファイルを遷移させます。
スクリプト毎に起動方法(ジョブ)が異なるのもポイントです。
HULFT Squareのジョブについて
スクリプト(処理)を何を契機に起動するか指定できます。
詳細はこちらの公式マニュアルをどうぞ~
次にスクリプトA~Cの内容を説明します。
スクリプトA処理内容
スクリプト名 :01_ファイル取得
スクリプトの目的 :S3から "受信用フォルダ" へダウンロード
ジョブ(起動する契機):スケジュールジョブ
これはS3からダウンロードしてくるだけ。
今回は正常系のみの作成です。
スクリプトB処理内容
スクリプト名 :02_ファイル移動
スクリプトの目的 :ファイル毎の更新日時比較 + "処理用フォルダ" へファイル移動
ジョブ(起動する契機):スケジュールジョブ
このスクリプトは処理が多いですね。。
少し長くなりそうなので、処理毎にざっくり説明します。
見ただけでおおよそわかる方は次のスクリプトへどうぞ。。
① 02_Tran存在確認(ファイルシステム読み取り)
"処理用フォルダ"(02_Tran)にファイルが存在していないことを確認しています。
if(条件分岐)の条件に設定します。
② list取得(ファイル名一覧取得)
"受信用フォルダ"(01_RCV)にファイルが存在していることを確認しています。
①と②でアイコンが異なる理由
この処理の負荷テストを行った際に気づいたことなのですが、
①で使用している「ファイルシステム読み取り」はファイルパスも取得しているからか、指定したフォルダにファイル数が多い場合はパフォーマンスが落ちました。
今回の処理では、「指定フォルダのファイル数」、「ファイルの更新日時」が取得できれば良いのでファイル名一覧取得にしました。
ちなみに①の処理が「ファイルシステム読み取り」なのは怠慢です、、
③ if(条件分岐)
①で指定した "処理用フォルダ" にファイルが存在しないこと、②で指定した
"受信用フォルダ" にファイルが存在していることを条件にしています。
④ foreach(繰り返し(データ件数)処理)
②から黄色の線(データフロー)が引いてある通り、"受信用フォルダ"にて
取得したファイル数分ループ処理を行います。
ループする処理は⑤のmappingになります。
⑤ mapping(1)(mapping)
こんな処理をしています。
条件の以前ロジックと、分岐のスイッチ判定を使用して更新日時の比較を行っています。
ループ処理の中に配置していますので
1ループ目はそのままスクリプト変数に値が格納され
・
・
・
2ループ目は
2ファイル目のファイル更新日時と1ファイル目のファイル更新日時の比較をし、
2ファイル目の更新日時が1ファイル目の更新日時以前であれば2ファイル目の
ファイル名を「Move_Filename」へ出力。
以後であれば1ファイル目のファイル名を「Move_Filename」へ出力。
・
・
・
3ループ目は
3ファイル目のファイル更新日時と2ファイル目のファイル更新日時の比較をし、
3ファイル目の更新日時が2ファイル目の更新日時以前であれば3ファイル目の
ファイル名を「Move_Filename」へ出力
以後であれば「Move_Filename」に格納されているファイル名を「Move_Filename」へ
出力。
・
・
・
といった感じです。
⑥ 移動(移動処理)
⑤のループ処理にて一番古いファイルを "受信用フォルダ" から "処理用フォルダ"へ
移行しています。
移行元のファイルを指定する際には「Move_Filename」スクリプト変数を
使用しています。
⑦ S3_BKUP移動(ファイル/フォルダコピー処理)
スクリプトAではS3に対してポーリングを行いダウンロード処理をしています。
スクリプトAの処理パフォーマンス向上の為に、ダウンロードを行っているフォルダから
バックアップ用のフォルダへコピーする処理です。
⑧でこのファイルを削除します。
⑧ S3_移動ファイル削除(ファイル/フォルダ削除処理)
⑦にて移動したファイルを移動元(S3の受信用フォルダ)から削除する処理です。
スクリプトC処理内容
スクリプト名 :03_変換処理_ファイル移動
スクリプトの目的 :変換処理 + 処理済ファイルを "処理用" ➡ "退避用フォルダ" へ
ファイル移動
ジョブ(起動する契機):ファイルイベントジョブ
この処理は "処理用フォルダ" にファイルが作成されたタイミングで処理が起動するように
「ファイルイベントジョブ」を設定しています。
ですので "処理用フォルダ" へのlist取得(ファイル名一覧取得処理)から始まります。
"処理用フォルダ" にはファイルが1つだけ存在する状態ですので、list取得したファイル名を
変数代入(mapping)にてスクリプト変数に格納します。
青枠の部分は変換処理ですのでお好きに作って下さい!今回はCSVtoDBとしました。
最後に処理したファイルを "処理用フォルダ" から "退避用フォルダ" へ移行して
終わり!!!
さいごに
今回はHULFT Squareだけで簡易的に先入れ先出し(FIFO)を行いました。
S3に格納されるのだから、SQS使えばいいじゃん!その通りですね。
限定的な使いかたかもしれませんが、
こんなこともできます~!というご紹介と思って頂ければ幸いです。
動いている動画はちょっと大変そう追記できればと思います。
以上!