MySQL Connectorでデータ量が多い場合に分割して取込している方いますか?

MySQL Connectorでデータ量(件数や1レコードあたりのサイズ)が多い場合に分割等何か工夫して取込している方いますでしょうか?どの様に行っているか参考にさせていただきたいです。

 

現在

select * from table_name where 条件;

という形でデータを取り込んでいるのですが、対象件数が数百万件あります。

 

ある時急に取込が10数分だったものが数時間レベルで遅くなり確認したところ

1撃で取れる件数(データ量)が多すぎてDB側がボトルネックになってしまっていました。

1撃で取れる件数を少なくすると解決できたため

 

select * from table_name where 条件 and 分割条件; -> dataset01

select * from table_name where 条件 and 分割条件-> dataset02

・・・

select * from table_name where 条件 and 分割条件-> dataset10

の様な形でconnectorの設定を沢山用意しスケジュール設定で同時刻に並行で走らせ

その後dataflow-ETLで結合(追加)で全件保持しているdatasetを作って解決させました。

 

ただ

・このやり方より良いものはあるか

・スケジュール変える時に全datasetの設定変更するの大変

・複数のdatasetがインプットのdataflowは実行のトリガーが設定しづらい(全てのdatasetをトリガーにすると実行中だったり何度も走ってしまうので全てのdatasetの取込が終わっただろうという時間にダミーのdatasetの更新をトリガーとしてdataflowをキックしています)

ということもあり、

もし、皆様の中で自分と同じような状況で「こういう方法でやっている」(早くて簡単)というものがあれば参考にしたいと思い質問させていただきました。

 

 

Comments

  • ysb
    ysb Member

    UNION ALLのような処理をするのであれば、

    Blendで、DataFusionのタイプを「行を追加」でやる方が、

    設定も簡単かつ実行のトリガーも気にしないで済みますし、更新時間も一瞬です。

     

    あと気になったのですが、

    where 条件の部分は、Indexを貼っているカラムを利用されていますか?