Skip to content
Minero Aoki edited this page Jun 12, 2015 · 1 revision

SQLバッチフレームワークBricolage

Bricolage(ブリコラージュ)はSQLでデータを処理するバッチを構築するためのフレームワークです。 バッチのスケジューリング(定時起動)は現在実装していません。 Bricolageはその先の、スケジューラーから実行するコマンドを構築するところを狙っています。

なお、SQLとは言ってもいまのところRedshiftだけ考えています。 また、データをクライアント側に持ってきて処理するわけではなく、DB側で処理を完結させる前提です。 Bricolageが動作するホストでは基本SQLを投げるだけになるので、マシンパワーは必要ありません。

ちなみに"bricolage"という語は「できあいのものでうまいことする」という感じの意味です。 バッチは基本つぎはぎになりがちなので、そのイメージでBで始まる単語を付けました。

機能(1)ジョブの構築

ジョブ作成を簡単にするために次のような機能を提供します。

  1. テンプレートベースのジョブ定義
  2. SQLなどのパラメータ化

Bricolageでは「ジョブクラス」というジョブのテンプレートを提供します。 例えば次のようなジョブクラスが用意されています。

  • insert-delta: 1日分などのデータ差分だけを作成してターゲットテーブルに蓄積
  • insert: 単純INSERT。ターゲットテーブルのデータ洗い替えにも使える
  • sql: 任意のSQLを実行
  • load: DBにデータをバルクロード

開発者はまずジョブクラスを選択し、パラメーター(と言ってもSQLなども含む)を 設定することでジョブを作成します。パラメーター設定のみで、処理後に自動的に 統計をとったり、VACUUMをかけたりすることもできます。

また、BricolageではSQLの日付やテーブル名などをパラメータ化する方法も提供します。 パラメーターはジョブ定義のYAMLファイルやコマンドライン引数から柔軟に設定することができます。

機能(2)ジョブネットの実行

Bricolageではジョブネット(複数ジョブで構成されるツリー)を実行することもできます。 以下のような機能があります。

  1. ジョブネットの実行(逐次実行、並列実行、分岐、合流)
  2. 複数ジョブネットへの分割(複数ジョブネットの実行と依存関係の定義)
  3. ジョブネットの実行再開(エラーになったジョブから再開)

ジョブ間の依存関係を指定しておくと、その関係に従ってジョブをソートし、 順番に実行してくれます。並列実行、分岐、合流が使えます。

また、ジョブネットを複数の小さいジョブネットに分割して、 ジョブネット同士の連携を行うこともできます。

ジョブネットを実行していてエラーが起きた場合に、 エラーが発生したジョブからジョブネットの実行を再開することも可能です。

マニュアル

Bricolageで(まだ)できないこと

  • ジョブのスケジューリング(定時実行)
  • 冗長化など、ハードウェア障害対策