Talend Open Studio (ETLツール) でデータ統合(9)~グローバル変数の利用と連続処理 [BI]
データのリカバリの時などに、数千万件のテーブルを集計してデータを流すことというのはよくあると思います。しかしその処理をtAggregateRowで単純にやろうとすると「メモリ足りないよん」とつれない返事をされて終わってしまうことがあります。
という状態になって困っていたので某社のサポートに聞いたらこれまたつれない返事が返ってきたので、自分でいろいろ試してこの方法にたどり着きました。
◯概要
DBからDISTINCTで日付一覧を取得、それをIterateに展開しグローバル変数にセット、それをIterate先の処理で利用すると、これが実現出来ます。今回のサンプルはtMapを使用していませんが、Iterate先をtAggregateRowにして、これに流しこむ先のクエリのWHERE句にグローバル変数を渡せば、区切った状態で連続処理が可能になります。
※以下はテスト用に作った全く別のジョブです。上記を実現するにはIterate先をtAggregateRowに作り変えて利用して下さい。
◯詳細1:全体像
こんなジョブです。Iterate先をテスト用にtSendMailにしています。
◯詳細2:クエリ
ここではテストのために販売テーブルから日付を2つ取ってきました。一覧を取得するにはDISTINCTで取ると良いでしょう。
◯詳細3:データからIterate(繰り返し)を生成
ここポイントです。tFlowToIterateというコンポーネントを使用します。キーというのがグローバル変数名(自分で勝手に命名して良い)、値はスキーマで定義したカラムを指定します。「グローバル変数名にデフォルト、、、」的な項目にチェックをしておくと、おそらくコンポーネント+"なんちゃらとかいう感じのグローバル変数がセットされるはずですが調べてないのでよく分かりません…。
◯詳細4:グローバル変数をIterate先で使用する
ここではtSendMailで件名に先ほど定義したグローバル変数をセットしました。これで日付が件名にセットされたメールが2通届きます。
という状態になって困っていたので某社のサポートに聞いたらこれまたつれない返事が返ってきたので、自分でいろいろ試してこの方法にたどり着きました。
◯概要
DBからDISTINCTで日付一覧を取得、それをIterateに展開しグローバル変数にセット、それをIterate先の処理で利用すると、これが実現出来ます。今回のサンプルはtMapを使用していませんが、Iterate先をtAggregateRowにして、これに流しこむ先のクエリのWHERE句にグローバル変数を渡せば、区切った状態で連続処理が可能になります。
※以下はテスト用に作った全く別のジョブです。上記を実現するにはIterate先をtAggregateRowに作り変えて利用して下さい。
◯詳細1:全体像
こんなジョブです。Iterate先をテスト用にtSendMailにしています。
◯詳細2:クエリ
ここではテストのために販売テーブルから日付を2つ取ってきました。一覧を取得するにはDISTINCTで取ると良いでしょう。
◯詳細3:データからIterate(繰り返し)を生成
ここポイントです。tFlowToIterateというコンポーネントを使用します。キーというのがグローバル変数名(自分で勝手に命名して良い)、値はスキーマで定義したカラムを指定します。「グローバル変数名にデフォルト、、、」的な項目にチェックをしておくと、おそらくコンポーネント+"なんちゃらとかいう感じのグローバル変数がセットされるはずですが調べてないのでよく分かりません…。
◯詳細4:グローバル変数をIterate先で使用する
ここではtSendMailで件名に先ほど定義したグローバル変数をセットしました。これで日付が件名にセットされたメールが2通届きます。
コメント 0