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

ジョブを構成するファイル

ジョブを構成するファイルはすべてサブシステムディレクトリの直下に置きます。 必要なファイルはジョブクラスによって異なりますが、 ジョブファイル(*.job)だけは常に必要です。

ジョブファイルの名前はそのままジョブIDとなります。 いまのところジョブIDは何にも使っていませんが、 そのうちテーブルに入ったりする可能性があるのでちゃんと付けるべきです。

推奨する命名規約

その他のファイルには必須の命名規約はありませんが、 SQLファイルは「"ジョブ名".sql」、 テーブル定義(create table)ファイルは「"テーブル名".ct」を推奨します。

またジョブ名は「"操作対象テーブル"-"操作"」と命名することを推奨します (ターゲットテーブルごとにファイルがまとまったほうが扱いやすいため)。

ジョブファイル(*.job)

ジョブファイルはYAML形式で、次のような内容です。

search_log/search_log-add.job ファイル

class: insert-delta
sql-file: search_log-add
dest-table: $schema.search_log
src-tables:
    search_log_wk: $schema.search_log_wk
delete-cond: "log_time >= (select min(log_time) from $schema.search_log_wk)"
analyze: true

ジョブファイルではジョブクラス(class)や、 ジョブクラスごとの引数(sql-file, dest-tableなど)を指定することができます。 どんな引数があるかはジョブクラスごとに異なるので、 ジョブクラス一覧から各ジョブクラスのマニュアルを参照してください。

またジョブファイル内ではシェルのように「$var」または「${var}」スタイルで variable.yml内の変数を参照できます。

SQLファイル(*.sql)

BricolageではSQLファイルでパラメーターを使うことができます。 パラメーターはすべてファイル冒頭で明示的に宣言しなければなりません。 参照するときはシェルのように $var または ${var} で参照できます。

--dest-table: weekly_stats
--src-tables: [weekly_si, weekly_sv, weekly_gr, weekly_ysi, items]
--params: [data_week_id]

insert into $dest_table
select
    date '2000-01-03' + ((si.week_id - 1) * 7) as data_date
    , si.week_id
    , si.item_id
    , i.display_name
    , si.si
    , sv.sv
    , gr.gr
    , ysi.ysi
from
    $weekly_si si
    left outer join $weekly_sv sv on si.week_id = sv.week_id and si.item_id = sv.item_id
    left outer join $weekly_gr gr on si.week_id = gr.week_id and si.item_id = gr.item_id
    left outer join $weekly_ysi ysi on si.week_id = ysi.week_id and si.item_id = ysi.item_id
    inner join $items i on si.item_id = i.id
where
    si.week_id >= $data_week_id
;

変数はファイル冒頭にSQLのコメント(-- TEXT)を使って宣言します。 このコメントは物理的にファイルの1行目・1文字目から、空行を入れずに書かなければいけません。

次のような宣言が利用できます。 コメント開始マーク(行頭の「--」)を取り除いたら YAML形式になるように書く必要があります。

  • dest-table
    • 書き込み対象テーブルの変数の宣言。
    • これだけは「dest_table」という名前の変数が定義される。
    • 設定値はデフォルトの値(テーブル名)となる。値は1つしか書けない(つまり書き込み対象テーブルは1つだけ)。
  • src-tables
    • 読み込み対象テーブルの変数の宣言。
    • [table1, table2, table3] のような形式で複数のテーブル変数を宣言できる。
    • 変数はデフォルトで変数名と同じ文字列で初期化される。
  • params
    • 任意の変数の宣言。
    • {var_name: default_value} のようにYAMLのハッシュ形式でデフォルト値を与えることができます。

変数の設定

SQLファイルなどで利用する変数の値は、 variable.yml、ジョブファイル、コマンドライン引数のいずれかで設定します。 1つの変数の値が複数の箇所で宣言された場合は、 コマンドライン引数、ジョブファイル、variable.ymlの順で優先されます。 (つまり特定の変数だけをコマンドライン引数で上書きすることもできます)

もし宣言した変数の値がジョブ開始時に設定されていない場合は、 ジョブを実行する前にエラーになります。

またジョブファイルで値を設定した変数が宣言されていない場合も 実行前にエラーになります。 (variable.ymlとコマンドライン引数では余分な変数も定義可能です)

このあたりはバッチ用なので厳密さ優先の仕様です。

Clone this wiki locally