
CData Sync のパイプラインは、複数のジョブや変換を 1 つの流れとして連結し、順序立てて実行するための機能です。ソースからのレプリケーションが終わった後に変換を走らせる、複数のジョブを終えてから後続処理に進むといった構成は珍しくありません。
これまでのパイプラインは、登録したステップを常に直列で実行する仕組みでした。そのため、本来は互いに依存関係のないジョブ同士であっても順番に実行するしかなく、ステップを増やすほどパイプライン全体の実行時間が積み上がっていく点が課題でした。また、ステップ間で共有できる値がなく、パイプラインの実行開始日時のような情報をステップごとに個別に取得したり、共通の設定値を各ステップに個別入力したりする必要がありました。
CData Sync V26.3 では、この 2 つの課題に対応する機能が追加されました。依存関係のないステップを同時に走らせる並列実行と、ステップ間で値を受け渡せるパイプライン変数です。本記事では検証に CData Sync 26.3.9704.0 を使用しています。
V26.3のパイプライン強化ポイント
V26.3 では、次の 2 点でパイプライン機能が強化されました。
ステップの並列実行 依存関係のないステップを同時に実行できるようになり、パイプライン全体の実行時間を短縮できます。
パイプライン変数 パイプラインの実行開始日時などのシステム属性や、ユーザーが定義した値を、パイプライン内の各ステップから参照できます。
ステップの並列実行
直列から並列へ
これに対し V26.3 では、既存のフローに並行する「並列ブランチ」を追加できるようになりました。並列ブランチを使うと、2 つ以上のステップを同時に実行できます。
各ブランチは互いに独立して実行され、ブランチ間の実行順序は保証されません。パイプライン全体は、すべてのブランチが完了するまで完了しない、という粒度で制御される点がポイントです。たとえば「ジョブ A」を含む本流に対して、ジョブ B とジョブ C を並列ブランチとして追加すると、A、B、C は同時に実行され、3 つすべてが終わった時点でパイプラインが完了します。
各ステップには「Stop flow if error」というトグルが用意されています。これを有効にすると、あるブランチが失敗した際に残りのブランチをキャンセルします。無効のままにしておくと、エラーが発生しても全ブランチが実行を継続し、すべてのブランチが終わるまでパイプラインは完了しません。

ユースケース
ステップの並列実行が効果を発揮するのは、次のような場面です。
パイプライン変数
概要
パイプライン変数は、パイプライン内の各ステップから参照できる値です。次の 2 種類があります。
1 つ目は、読み取り専用のシステム属性です。パイプラインが開始された時点で確定し、以降はステップ側から上書きできません。
システム属性 | 内容 |
|---|
{pipeline:id}
| 実行中のパイプラインのID |
{pipeline:name}
| 実行中のパイプラインの名前 |
{pipeline:runstartdate}
| パイプラインの実行開始日時 |
2 つ目は、ユーザー定義変数です。パイプラインの実行中に自由に値を設定できます。
いずれの変数も、パイプライン内であれば {pipeline:myvar} という記法で参照します。
使い方
パイプラインで「変数を設定する」を開き、イベントスクリプト内で タグを使ってユーザー定義変数を設定します。

パイプライン全体のオプションメニューから「変数を設定」を選択して開く操作を示しています。
属性名は _pipeline.myvar のようにドット区切りで指定しますが、これは参照時の記法とは異なる点に注意してください。

この設定はパイプラインの実行開始時に一度評価され、以降のすべてのステップから参照できるパイプラインレベルの変数として保持されます。並列実行されるステップからも同様に参照できるため、どのステップが先に完了するかを気にする必要はありません。
続いて、ジョブのクエリの中で定義済みの変数を参照します。参照時は前述のとおり {pipeline:myvar} という記法を使います。
REPLICATE [Table] SELECT '{pipeline:myvar}' AS [myvar] FROM [Table]
変換からも同じ記法でパイプライン変数を参照できます。DML 文の中で値を埋め込む例は次のとおりです。
UPDATE [Table] SET [pipeline_var1] = '{pipeline:var2}'
パイプライン変数のマージ優先度
パイプライン変数は、パイプライン全体に対するグローバルなデフォルト値として機能します。同じキーの値が前段ステップの出力や pre-job イベントの出力からも渡された場合は、そちらが優先され、パイプライン変数の値を上書きします。つまり優先順位は、前段ステップと pre-job イベントの出力がもっとも高く、パイプライン変数はそれらが存在しない場合に使われるデフォルト値という位置づけになります。
注意点
パイプライン変数を参照するように設定したジョブやタスクは、パイプライン内で実行されることが前提になります。そのため、該当のジョブやタスクを単独実行したり、タスク単位の再同期を個別に行ったりすると、パイプライン変数を解決できずエラーになります。パイプライン変数を利用しているジョブは、必ずパイプライン経由で実行する必要があります。
ユースケース
パイプライン変数が役立つのは、次のような場面です。
まとめ
複数のジョブや変換を組み合わせたパイプラインを運用している場合、CData Sync V26.3 の 2 つの機能強化により、実行時間の短縮とステップ間の状態共有の両面で効果が得られます。並列ブランチの追加方法やパイプライン変数の詳細については、公式ドキュメントのパイプラインのページもあわせてご確認ください。CData Sync の 30 日間無償トライアルはこちらからダウンロードいただけます。
また、使っていて気になった点やご不明な点があれば、お気軽にテクニカルサポートまでお問い合わせください。