ストリームベースのDB変換ツール(3)

Oracle対応と自動的にテーブルを作成する機能拡張をした版*1を作成しました。あと、SQL Azureに対しても使ってみましたが、とりあえず問題なく動作しました。

このツールは使い道ですが、もともとは開発時にデータベース変更があるとテストデータの変更が大変なのでツールを作成していたのですが、そのアイデアがベースになっています。WFや検証・導出ルール(Expression)を組み合わせることで簡易的なロジックを追加できることで、もう少し便利になるのではと思っています。

データ移行シナリオ

データの移行は、転送元としてテーブルやView、SELECT文が指定できます。転送先はテーブルを指定するのですが、転送元と同じデータベース(接続先)であれば新規テーブルを自動的に作成することができます。もし一部のデータのみを移行するのであれば、対象外にしたいデータの_Skipフィールドに対してtrueを設定すればOKです。これはWFのルールでも指定可能です。
変換ルールは、変換元のカラムを指定する方法と変換式(Expression)が利用できます。またWFで指定することもできます。


データ検証シナリオ

データの検証は、データ移行の前作業として行われることになると思いますが、必須チェックと正規表現チェックが用意されていて、エラーがあると_ErrorCodeが設定されるので、_Skipフィールドと連動させるとエラー以外のデータを移行することもできます。_SkipフィールドのExpressionに対してtrueを設定することでデータ検証のみ実行できます。

簡易バッチシナリオ

おおくのバッチ処理は結局のところデータ検証・変換・出力なので上の2つのシナリオでまかなえることも多くあります。ソートやマージ処理もSQL文で十分ですし、ワークテーブルに出力して処理をつなげると複雑なこともできます。あとは、SQL文では難しい複雑な計算式を含んだ集約処理ですが、このツールではBreak Expressionに集約用のキーを指定できます。この式の結果が変化した単位にデータがバッファリングされます。ExpressionではBで参照可能でLINQ式を適用することができます。

S.Discount + (float)B.Sum(x=>x.UnitPrice * x.Quantity) * 0.01

*1:Oracle版はODP.NETを利用しているので、ODP.NETをインストールしてから(ソース)をコンパイルする必要があります