本文へ移動
Digdag 更新日: 2026年5月2日 約5分で読めます

Digdagのparallel設定を最適化する方法|夜間バッチを高速化する実務設計

Treasure Data の ワークフローエンジン「Digdag」には、複数のタスクを並列実行できる _parallel オプションがあります。

夜間バッチで30本ものクエリを回すとき、「とりあえず5にしておこう」「Prestoの同時実行数が5だから合わせよう」と設定していませんか?

実はその判断、処理効率を大幅に落としている可能性があります。

parallel設定の正しい仕組みと、Presto・Hiveを組み合わせた最大効率バッチの作り方を解説します。


parallel設定の大きな誤解

まず前提として、_parallel の動作を正しく理解する必要があります。

よくある誤解:「parallel: 5 = 常時5個並列実行」

これは間違いです。

_parallel: 5 と設定すると、Digdag はタスクを5個ずつグループ化して実行します。

具体的には以下のように動作します。

グループ1:クエリ1, 2, 3, 4, 5 → 全て完了するまで待機
グループ2:クエリ6, 7, 8, 9, 10 → グループ1完了後に開始
グループ3:クエリ11, 12, ... → 以下同様

グループ内の全タスクが完了しないと、次のグループが始まりません。


parallel: 5 の致命的な問題

30クエリを実行する夜間バッチを例に考えましょう。

クエリ4番だけが1時間かかる重いクエリだったとします。

_parallel: 5 に設定している場合、こうなります。

グループクエリ所要時間
グループ1クエリ1〜51時間(クエリ4が終わるまで全員待機)
グループ2クエリ6〜10グループ1完了後に開始
………

クエリ1, 2, 3, 5が数分で終わっても、クエリ4の1時間が終わるまでグループ全体が止まります。

次のクエリ6は、たとえ実行できる状態でも待ち続けます。これが parallel 設定の罠です。


解決策:parallel: 100 にする

30クエリを実行したいなら、_parallel: 100 など実行クエリ数より大きな値を設定してください。

この場合の動作はこうなります。

全30クエリが一斉にキューへ投入
↓
Prestoの同時実行上限(例:5)まで即座に実行スタート
↓
実行が完了したクエリの分だけ、キュー待ちのクエリが順次開始

先ほどのシナリオで再現すると、

  • クエリ4(1時間)は1時間かかるが、他のクエリはその間もどんどん進む
  • クエリ2が5分で終われば、すぐにクエリ6が始まる
  • クエリ4が終わり次第、残りのキューから次のクエリが流れる

遅いクエリが他の処理を止めることがなくなります。これが最大効率です。


Prestoの同時実行数はparallel設定では変わらない

ここで重要な補足があります。

Prestoの同時実行数の上限は、COMPUTE UNITS(契約プラン)によって決まります。一般的には3〜5クエリが上限です。

「じゃあ parallel: 5 にすれば無駄なくちょうどいいのでは?」と思うかもしれませんが、それは間違いです。

parallel設定はPrestoの同時実行数に影響しません。parallel設定はDigdag側のグループ管理の話であり、Prestoのキューとは独立しています。

_parallel: 100 にしても、Prestoには同時実行上限の制御があるため、上限を超えた分は自動的にQueueで待機します。過負荷にはなりません。

むしろ parallel を実行数に合わせることで、Queue管理の効率が落ち、処理が遅くなります。
ただし、Queueの上限は255だったはずなので余裕をみて100にした方が良いです。255を超えてQueueを入れるとエラーになります。

Hiveの並列実行についても同様の考え方が当てはまります。


Presto × Hive の組み合わせでさらに高速化

parallel設定の最適化に加えて、PrestoとHiveを使い分けることで処理時間をさらに大幅に削減できます。

Prestoが得意なこと

  • 小〜中規模データの高速集計
  • インタラクティブなリアルタイムに近い分析
  • レスポンスが必要なクエリ

Hiveが得意なこと

  • 大規模データのバッチ処理
  • 夜間に流す重い集計・変換処理
  • 時間がかかっても確実に完了させたい処理

夜間バッチでは、重いクエリはHiveに、軽いクエリはPrestoに振り分けることで、エンジンの特性を最大限に活かせます。

この使い分けと _parallel: 100+ の組み合わせで、処理時間が数分の1〜数十分の1になるケースも珍しくありません。


まとめ:Digdag parallel設定の鉄則

項目内容
parallel の意味タスクをN個ずつグループ化する設定。同時実行数の上限ではない
推奨値実行クエリ数より大きな値(例:30クエリなら100以上)
Prestoの同時実行数COMPUTE UNITSで決まる。parallel設定では変えられない
Hiveとの使い分け重いバッチはHive、軽い集計はPrestoで最大効率化

夜間バッチで「なんとなくparallel: 5」にしている方は、ぜひ一度 _parallel: 100 に変えて実行時間を比較してみてください。劇的に改善する可能性があります。


MarTech Farmをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む