■ はじめに
https://dk521123.hatenablog.com/entry/2019/10/04/000000
https://dk521123.hatenablog.com/entry/2020/09/10/174223
https://dk521123.hatenablog.com/entry/2020/09/09/000000
https://dk521123.hatenablog.com/entry/2020/09/11/154403
の続き。 開発環境を整えて、 初歩の初歩はでき、 サンプルデータがあるので、 今回は、簡単なETL処理を作ってみる。 これができれば、実践では仕様に従い、 足りない部分を都度都度調べていき、 知識を積み上げていけばいい気がする。 (結構、GoogleよりYouTubeで調べたほうが 実際に設定しているところがみえるのでいいかも)
今回学んだこと
1)Job からの Termination 呼び出し 2)以下の使い方 + Set variables ... 値の設定 + Get file names ... 対象パスからのファイル一覧 + Unique rows (HashSet) ... 重複値の排除
■ サンプル
a) 課題
* 以下「使用するサンプルデータ」のセールスデータから顧客一覧を作成する * セールスデータなので重複した顧客もいるのでそこは除外していく
使用するサンプルデータ
<Pentahoインストールパス>\data-integration\samples\transformations\files\sales_data.csv
b) ファイル構成
1)Job - main.kjb 2)Termination - subprocess-etl.ktr
1)Job - main.kjb
[Start] -> [Set variables (※1-1)] -> [Transformation (subprocess-etl.ktr)]
2)Termination - subprocess-etl.ktr
[Get file names (※2-1)] -> [CSV file input (※2-2)] -> [Unique rows (HashSet) (※2-3)] -> [Text file output (※2-4)]
c) 各要素の設定
※1-1:Set variables
* 子のTermination「subprocess-etl.ktr」 の各要素で使う定数を定義 * 以下のように Variables を設定する
# | Variable Name | Value | Variable scope type |
---|---|---|---|
1 | etl_type | customer_list_from_sales | Valid in the root job |
2 | target_path | <Pentahoインストールパス>\data-integration\samples\transformations\files | Valid in the root job |
3 | output_path | <任意のパス> | Valid in the root job |
* 今回は、以下の通り。 + <Pentahoインストールパス>:C:\work\pentaho\pdi-ce-9.0.0.0-423 + <任意のパス>:C:\work\temp * なお、「Variable scope type:Valid in the root job」がポイント
※2-1:Get file names
* 対象パス(「1-1:Set variables」で設定したtarget_path)内で 特定のファイル規則(sales_*.csv)で取得する * 以下のように Selected files を設定する
# | File/Directory | Wildcard(RegExp) | Exclude wildcard | Required | Include subfolders |
---|---|---|---|---|---|
1 | ${target_path} | sales_.*.csv | N | N |
※2-2:CSV file input
* 以下のように設定 + The filename field(data from previous steps) : filename + Delimiter : , * 以下をコピー&ペーストする(意外とできる) Name Type Format Length Precision Currency Decimal Group Trim type ------------------------------------------------------------------------------------------------------- ORDERNUMBER Integer # 15 0 . , both QUANTITYORDERED Integer # 15 0 . , both PRICEEACH Number #.# 5 2 . , both ORDERLINENUMBER Integer # 15 0 . , both SALES Number #.# 7 2 . , both ORDERDATE String 15 . , both STATUS String 10 . , both QTR_ID Integer # 15 0 . , both MONTH_ID Integer # 15 0 . , both YEAR_ID Integer # 15 0 . , both PRODUCTLINE String 12 . , both MSRP Integer # 15 0 . , both PRODUCTCODE String 8 . , both CUSTOMERNAME String 30 . , both PHONE String 16 . , both ADDRESSLINE1 String 40 . , both ADDRESSLINE2 String 9 . , both CITY String 14 . , both STATE String 10 . , both POSTALCODE String 8 . , both COUNTRY String 13 . , both TERRITORY String 5 . , both CONTACTLASTNAME String 10 . , both CONTACTFIRSTNAME String 9 . , both
※2-3:Unique rows (HashSet)
* セールス一覧から重複する顧客をDistinct的に除外する => 本来であれば「PHONE」「COUNTRY」などを クリーニングした方がいいが複雑すぎる内容になるのでやらない (例えば、表記ゆれ「United States」「USA」は 同じなので統一する必要がある、っといったこと) * 以下をコピー&ペーストする Fieldname ------------------- CUSTOMERNAME ADDRESSLINE1 ADDRESSLINE2 CITY
※2-4:Text file output
* [File]タブで以下のように設定 + Filename : ${output_path}\${etl_type}_ + Create Parent folder : チェックを付ける + Extension : tsv + Specify Data time format : チェックを付ける + Data time format : yyyyMMddHHmmss + Add filenames to result : チェックを付ける * [Content]タブで以下のように設定 + Compression : Zip * [Fields]タブでをコピー&ペーストする Name Type Format Length Precision Currency Decimal Group Trim Type Null ------------------------------------------------------------------------------------------------------------ CUSTOMERNAME String 50 both PHONE String 16 . , none ADDRESSLINE1 String 40 . , both ADDRESSLINE1 String 9 . , both CITY String 14 . , both STATE String 10 . , both POSTALCODE String 8 . , both COUNTRY String 13 . , both TERRITORY String 5 . , both CONTACTLASTNAME String 10 . , both CONTACTFIRSTNAME String 9 . , both
d) 出力結果
C:\work\temp\customer_list_from_sales_2020XXXXXXXXXXX.zip
出力ファイル「customer_list_from_sales_2020XXXXXXXXXXX.tsv」
CUSTOMERNAME PHONE ADDRESSLINE1 ADDRESSLINE1 CITY STATE POSTALCODE COUNTRY TERRITORY CONTACTLASTNAME CONTACTFIRSTNAME Land of Toys Inc. 2125557818 897 Long 897 Long NYC NY 10022 United States NA Yu Kwai Reims Collectables 26.47.1555 59 rue de 59 rue de Reims 51100 France EMEA Henriot Paul Lyon Souveniers +33 1 46 62 7555 27 rue du 27 rue du Paris 75508 France EMEA Da Cunha Daniel ・・・略・・・
関連記事
Pentaho ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2019/10/04/000000
Pentaho ~ 環境設定編 ~
https://dk521123.hatenablog.com/entry/2020/09/10/174223
Pentaho ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/09/09/000000
Pentaho ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/09/13/000209
Pentaho ~ DBを扱う ~
https://dk521123.hatenablog.com/entry/2020/09/11/154403