27. 練習問題

この練習問題は、Asakusa Frameworkへの理解を確認すること、このチュートリアルで紹介していない機能について学ぶこと、 [Asakusa Framework documentation] の読み方に慣れることなどを意図しています。

練習問題の回答は用意していませんが、ここに挙げている問題に取り組むことでAsakusa Frameworkに対してより深い理解が得られると思いますので、是非チャレンジしてみてください。

各バッチアプリケーションを作成したら、テストドライバーで動作を確認したり、YAESSを使って実際にバッチアプリケーションを実行してみてください。

27.1. 練習問題 1

1つのCSVファイルを読み込み、そのままの内容をCSVファイルに出力するバッチアプリケーションを作成しなさい。

27.1.1. ヒント

  • 演算子は不要です。
  • データフローの入力は、以下のようにそのまま出力に接続することができます。
final In<Hoge> input;
final Out<Hoge> output;
...

@Override
protected void describe() {
    output.add(input)
}

27.1.2. 応用問題

  • 出力ファイルの並び順を指定しなさい。
  • データの内容に応じて出力ファイル、またはディレクトリを分割しなさい。

27.2. 練習問題 2

CSVファイルを読み込み、レコードの内容によって出力ファイルを振り分けるバッチアプリケーションを作成しなさい。

例えば、ある項目が同じ値をもつレコードごとに振り分ける、数値の大小によって振り分ける、など。

27.2.1. ヒント

いくつかの実現方法が考えられますが、以下にその一例を紹介します。

これらの機能はそれぞれ実現できることや用途が異なるので、その違いについても考えてみてください。

27.2.2. 応用問題

振り分けたの出力のうちの1つを出力から除外しなさい。また、除外したレコードの内容をログに出力しなさい。

27.3. 練習問題 3

あるデータモデルに対して、レコードがもつ複数のプロパティを使った集計を行うバッチアプリケーションを作成しなさい。 例えば 売上明細 ( sales_detail ) に対して「数量」×「販売単価」の合計を求めるようなアプリケーションです。

27.3.1. ヒント

いくつかの実現方法が考えられますが、以下にその一例を紹介します。

また、演算子リファレンス上で上記の演算子における「性能特性」の違いについて、その意味を確認しなさい。

27.3.2. 応用問題

集計項目の値に不正な値(例えば「数量」が0など)が含まれているレコードに対しては集計から除外して、 該当レコードを集計結果とは異なるファイル(エラーレコードファイルなど)に出力しなさい。

27.4. 練習問題 4

あるデータに対して訂正情報を一括で反映するようなバッチアプリケーションを作成します。

対象データと訂正情報をキーで結合して、訂正情報が見つかった対象データは訂正情報がもつプロパティで対象データを更新して「処理済みファイル」に出力し、 訂正情報が見つからなかった対象データはそのまま「処理済みファイル」に出力しなさい(つまり入力となる対象データと出力となる処理済みファイルの件数は同じになります)。

27.4.1. ヒント

いくつかの実現方法が考えられますが、以下にその一例を紹介します。

また、演算子リファレンス上で上記の演算子における「性能特性」の違いについて、その意味を確認しなさい。

27.4.2. 応用問題

不正なキーをもつ訂正情報が含まれていることを想定して、対象データが見つからなかった訂正情報を「訂正エラーファイル」に出力しなさい。