3. サンプルアプリケーションの説明¶
ここでは、このチュートリアルで作成するバッチアプリケーションの仕様や設計について説明します。 この内容を頭に入れておくことで、以降のチュートリアルの説明が理解しやすくなるでしょう。
3.1. アプリケーションの概要¶
このチュートリアルで作成するバッチアプリケーションは「カテゴリ別売上金額集計バッチ」という名前のアプリケーションです。
カテゴリ別売上金額集計バッチを簡単に説明すると、売上トランザクションデータ、商品マスタ、店舗マスタを入力として、 トランザクションとマスタを結合しつつ各種エラーチェックを行った後に、売上データを商品マスタのカテゴリ毎に集計するアプリケーションです。
入出力データはCSV形式で定義されたファイルです。このバッチの実行結果は、集計結果を格納した「集計ファイル」、及びエラーチェックに該当した売上データを格納した「エラーレコードファイル」になります。
3.3. データ構造¶
カテゴリ別売上金額集計バッチが扱う入出力データの論理的なデータ構造を示します。
3.3.1. 売上明細 ( sales_detail
)¶
このバッチの入力となるトランザクションデータで、このバッチのメイン処理である売上集計の元となる売上データが含まれます。
項目名 | フィールド名 | データ型 |
---|---|---|
売上日時 | sales_date_time |
日時 |
店舗コード | store_code |
文字列 |
商品コード | item_code |
文字列 |
数量 | amount |
数値 |
販売単価 | unit_selling_price |
数値 |
販売金額 | selling_price |
数値 |
3.3.2. 店舗マスタ ( store_info
)¶
このバッチの入力となるマスタデータで、売上明細データの整合性チェックなどに使用します。
項目名 | フィールド名 | データ型 |
---|---|---|
店舗コード | store_code |
文字列 |
店舗名称 | store_name |
文字列 |
3.3.3. 商品マスタ ( item_info
)¶
このバッチの入力となるマスタデータで、売上集計のグループキーとなる商品カテゴリコードを管理します。 その他、売上明細データの整合性チェックなどにも使用します。
項目名 | フィールド名 | データ型 |
---|---|---|
商品コード | item_code |
文字列 |
商品名 | item_name |
文字列 |
商品部門コード | department_code |
文字列 |
商品部門名 | department_name |
文字列 |
商品カテゴリコード | category_code |
文字列 |
商品カテゴリ名 | category_name |
文字列 |
商品単価 | unit_selling_price |
数値 |
マスタ登録日 | registered_date |
日付 |
マスタ適用開始日 | begin_date |
日付 |
マスタ適用終了日 | end_date |
日付 |
3.4. 外部入出力仕様¶
カテゴリ別売上金額集計バッチの入出力データ形式や配置に関する仕様を示します。
3.4.1. データフォーマット¶
入出力データのフォーマットに関する仕様を示します。
- このバッチのすべての入出力データはCSVフォーマット形式を持つファイル(CSVファイル)として扱う。
- 各CSVファイルの文字エンコーディングはUTF-8として扱う。
- 各CSVファイルの1行目は各項目の内容を示すヘッダとして扱い、実データとしては扱わない。
- 各CSVファイルの日付項目のフォーマットは
yyyy-MM-dd
、日時項目のフォーマットはyyyy-MM-dd HH:mm:ss
とする。
3.4.2. ファイル配置と編成¶
入出力データの配置と編成に関する仕様を示します。 なお、ファイルの入出力には実行環境によって規定された「規定ディレクトリ」があるものとします。
3.4.2.1. 売上明細¶
- 規定ディレクトリ配下の
sales
ディレクトリ中にある、拡張子*.csv
を持つファイルを入力として扱う。 - バッチ起動時に指定される日付を表す文字列に従って入力するファイルを選択する。
日時,店舗コード,商品コード,数量,販売単価,販売金額
2011-04-01 10:30:00,0001,4922010001000,3,120,360
2011-04-01 10:31:00,0001,4922010001001,2,330,660
2011-04-01 10:32:00,0001,4922010001000,2,120,240
...
3.4.2.2. 店舗マスタ¶
- 規定ディレクトリ配下の
master
ディレクトリ中にある、ファイル名store_info.csv
を持つファイルを入力として扱う。
店舗コード,名称
0000,スーパーあさくさ本社
0001,スーパーあさくさ品川店
0002,スーパーあさくさ渋谷店
...
3.4.2.3. 商品マスタ¶
- 規定ディレクトリ配下の
master
ディレクトリ中にある、ファイル名item_info.csv
を持つファイルを入力として扱う。
商品コード,商品名,部門コード,部門名,カテゴリコード,カテゴリ名,単価,登録日,適用開始日,適用終了日
4922010001000,ミルクチョコレートM,110,菓子,1600,チョコレート菓子,120,2010-04-01,2010-04-01,2019-12-31
4922010001001,PREMIUM アソートチョコレート,110,菓子,1600,チョコレート菓子,330,2010-04-01,2010-04-01,2019-12-31
4922010001002,アーモンドクランチミニ,110,菓子,1600,チョコレート菓子,140,2010-04-01,2010-04-01,2019-12-31
...
3.4.2.4. カテゴリ別売上集計¶
- 規定ディレクトリ配下の
result/category
ディレクトリに対して、ファイル名result.csv
を持つファイルを処理結果として出力する。 - ファイル中の項目「売上合計」の降順でソートして出力する。
カテゴリコード,販売数量,売上合計
1600,28,5400
1300,12,1596
1401,15,1470
3.4.2.5. エラー情報¶
- 規定ディレクトリ配下の
result/error
ディレクトリに対して、バッチ起動時に指定された日付文字列を接頭辞に持つファイル (例:2011-04-01.csv
)を処理結果として出力する。 - ファイル中の項目「ファイル名」の昇順でソートして出力する。
ファイル名,日時,店舗コード,商品コード,メッセージ
hdfs://<host:port>/user/asakusa/target/testing/directio/sales/2011-04-01.csv,2011-04-01 19:00:00,9999,4922010001000,店舗不明
hdfs://<host:port>/user/asakusa/target/testing/directio/sales/2011-04-01.csv,2011-04-01 10:00:00,0001,9999999999999,商品不明
hdfs://<host:port>/user/asakusa/target/testing/directio/sales/2011-04-01.csv,1990-01-01 10:40:00,0001,4922010001000,商品不明
3.5. バッチ処理仕様¶
カテゴリ別売上金額集計バッチの データフロー図 に対応する各処理の仕様を示します。
3.5.1. 1.店舗マスタ結合¶
- 売上明細に対して、店舗マスタを「店舗コード」をキーとして結合し、マスタが存在した売上明細を集計の対象とする。
- 該当する店舗マスタが存在しなかった売上明細は、後述の 4.エラー情報編集 に従いエラー情報として出力する。