Talendを使ってみる その2の続きではない話
今回はTalend使いませんw
複製したデータをマージできない問題
Talendは1つのソースデータを複製したりしたあとデータ加工してまたマージ(合わせる)ことができません。
つまりなにか区分ごとに分けて並列処理させたり、大量データを分散処理させたりが難しいです。
解決策
最初からデータを分割しておく(中間ファイルを作成する)
ETLの流れの中で分割して合わせて~とやるとNGらしいので最初から分割したデータを用意しておく方法
※分割後加工して別ファイルで保存する方法もほぼ同じ
懸念点としては
・前処理としてデータ分割の時間がかかること(中間ファイルの場合は後処理でマージ)
・分割前データも必要な場合、置き場所が別に必要になること(ストレージが余分に必要になる)
・I/Oアクセスのリソースも必要になること
上記の懸念点はなにかテキストファイルに出力する想定で記載していますが、DBにテンポラリーテーブルを作成しても同じような問題は起こるかと思います。
ファイルに追加オプションを使う
ETLの処理の中で中間ファイルを作成する場合はファイル名を同じにして追加オプションにチェックを入れておけば別でマージ処理をする必要はありません
その場合も同時に1つのファイルにアクセスは出来ないので順番に書き込みをしていかないといけないですね
(DBの場合はトランザクション制御が必要)
ハッシュ保存する
ハッシュコンポーネントを使用してメモリーにデータ保存する方法
懸念点としては
・処理データでメモリが専有されてしまう
マシンのメモリを大量に積まなくてはいけなくなります
またデータ量次第ではそもそもメモリーに持ちきれない可能性があります(大量データを分散処理させている場合などは特に)
まとめ
今回の話はTalendの人から聞いた話をもとにしています。
解決策として書いた2つの方法は個人的にはいまいちだなと思っています。
Talendのよいところは無料で使えてJavaで動いているのでJavaエンジニアならなかを見ることで理解しやすい点だと思うので今回のようなケース含め大量データをさばくのは難しいのかなと思いました。
※
数十万件~数百万件くらいはなんとかなるかもしれませんが、数千~数億くらいになるとアウトだと思います。
あまり日本のETL案件でそこで大量データを対象にすることはないのかもしれませんが、直近でそういうお仕事をしていたので気になってしまいました。