派生値を計算するための規則は、DbWriterConfig タグのサブタグである派生タグで指定します。次の表に、派生タグの属性を示します。
説明
データを集計する対象のオブジェクト。オブジェクトは次のいずれかです。
ホスト
キュー
プロジェクト
部署
ユーザー
グループ
派生値を計算する頻度を指定する時間範囲です。時間範囲は次のいずれかです。
hour
day
month
year
計算済みのデータを保持する変数の名前です。
次の表に、派生タグのサブ要素を示します。
派生値を計算する SQL 文です。この文は次のカラムを作成する必要があります。
time_start – time_end とともに、計算済みの値の期間を指定します。
time_end
value – 計算済みの派生値
SQL 文は次のプレースホルダを含むことができます。dbwriter は、規則に基づいて各クエリのプレースホルダを次のように置換します。
__time_start__ – クエリーの開始時間。dbwriter は、この規則から、直前に計算された最後の派生値を検索し、このタイムスタンプを次のクエリーの開始時間として使用します。
__time_end__ – クエリーの終了時間。このタイムスタンプは、最後に経過した時間範囲の終了を指定します。たとえば、時間範囲が day であり、派生値が 00:30 で計算された場合、00:00 が time_end として取得されます。
__key_0__, __key_1__, . , __key_n__ – 指定したオブジェクト型の主キーのコンポーネント。たとえば、sge_hosts テーブルには主キー h_hostname があります。ホストオブジェクト型に対して規則が処理された場合、sge_hosts テーブル内のエントリごとに 1 つのクエリーが実行され、SQL 文内の __key_0__ プレースホルダはホスト名により置き換えられます。
sge_queue テーブルは、q_qname および q_hostname から構成された複合的な主キーを持ちます。
dbwriter は、派生値の計算用の SQL 文を生成します。
自動生成された SQL 文は、次のテンプレートのようになります。
SELECT time_start, time_end, <function>(<value_field>) as value FROM ( SELECT TRUNC( <timestart_field>, <interval> ) as time_start TRUNC( <timestart_field>, <interval> ) + INTERVAL '1' <interval> as time_end, <value_field> FROM <object value table> WHERE <primary key field 0> = __key_0__ AND <primary key field 1> = __key_1__ AND . . . AND <parent key field> = (SELECT <parent key field> FROM <parent table> WHERE <parent filter> ) AND <timestart_field> <= {ts __time_start__ } AND <timeend_field> > {ts __time_end__ } GROUP BY time_start, time_end |
SQL テンプレートパラメータには次のものがあります。
説明
派生値を計算するための集計関数です。XML ファイルの auto タグの関数属性に由来します。
派生値のオブジェクトに依存します。
派生値のオブジェクトに依存します。
派生値のオブジェクトに依存します。
派生タグの内部属性に由来します。
値が格納されるデータベーステーブルの名前です。オブジェクトに依存します (host => host_values, user => user_values, . )。
値テーブルを親テーブルに結合するのに必要な主キーです。オブジェクトに依存します。
親の ID を保持するフィールドの名前です。オブジェクトに依存します。
親データベーステーブルの名前です。オブジェクトに依存します (host => host, user => user)。
親テーブル用のフィルタです。親テーブルの各エントリの派生値が計算されます (例: u_user = 'user1')。
自動生成された SQL 文の例を次に示します。
<derive object="host" interval="day" variable="d_load"> <auto function="AVG" variable="h_load" /> </derive> SELECT time_start, time_end, AGE(hv_dvalue) FROM ( SELECT TRUNC( hv_time_start, 'day' ) as time_start, TRUNC( hv_time_start, 'day' ) + INTERVAL '1' day as time_end, hv_dvalue FROM sge_host_values WHERE hv_variable = 'h_load' AND hv_parent = (SELECT h_id FROM sge_host WHERE h_hostname = 'foo.bar') AND hv_time_start <= {ts '2004-05-21 00:00:00.0'} AND hv_time_end > {ts '2004-05-17 00:00:00.0'} ) GROUP BY time_start, time_end |