in

TimberLandChapel.com Community Stage

技術者はたゆまぬ努力と一瞬のひらめき。。。
TimberLandChapel は日々研鑽する技術者をサポートします。DevPartner U.G. を立ち上げました。(2007.08.20)

データフロー内にてフラットファイルの行数文処理について

最新の投稿は、投稿日時: 2008-11-20 19:58 投稿者: timberlandchapel です。スレッドには 3 件の返答があります。
ページ 1 / 1 (4 アイテム)
投稿のソート: 前へ 次へ
  • 2008-11-19 19:25

    • karen
    • 貢献度トップ 10
    • 登録日 : 2008-10-15
    • 投稿数 16

    データフロー内にてフラットファイルの行数文処理について

    またまたお世話になります。

    CSVファイルを、テーブルに挿入する機能を作成しています。
    取り込むCSVファイルの中で、親子関係を示す属性があります。
    この属性を確認して、子供の行のカラムに、親の属性を設定して更新させたいのですが、
    データフロー上での、フラットファイルの行数分処理を繰り返す処理の仕方が解りません。

    例 CSVファイル
    ID,階層,親ID
    A,0,
    B,1,A
    C,1,A
    D,2,B
    E,3,D

    実行後テーブル
    ID,階層,親ID,親1,親2,親3
    A,0, , , ,
    B,1,A,A,,
    C,1,A,A,,
    D,2,B,A,B,
    E,3,D,A,B,D

    この例ですと、IDのAが一番の親となり
    IDのBが親IDがAなので、Aを親1に設定される。
    IDのEの親がDなので、Dで設定された親1と親2を参照して設定Eの親1の親2に設定する。
    どうしても、フラットファイルの行分繰り返さないと
    実現出来ないような気がします。

    私の失敗した実装方法は、
    ■データフロー
     1.フラットファイルを階層の昇順に変更させる。
     2.フラットファイル情報をワークテーブルにコピーさせる。
     3.「スクリプトコンポーネント」で、親IDを基にワークテーブルから親情報を取得し、追加カラムに設定する。
     4.テーブルに挿入する。
    この実装方法だと、昇順された親の一行だけ意図した結果になり
    後の行は処理されませんでした。

    申し訳ありませんが、アドバイスを頂ければと思います。
  • 2008-11-20 8:03 返答元:

    Re: データフロー内にてフラットファイルの行数文処理について

    お疲れ様です。TimberLandChapel です。

    なんともまぁ,また大変な実装ですね。

    その階層の情報がきちんと木構造になるのであれば,

    スクリプト変換の中で新しい子要素が出てくるたびに一時テーブルにその親情報を追加していけば,

    参照コンポーネントでルックアップすれば実現できそうですが。

    つまり,キーに自分自身の階層を持って,自分からルートに向かって辿る階層情報を値にもつ一時テーブルを構築して,そこから参照する

    こうすればループは必要ないようにおもいますが。 

     

    木構造にならないのであれば,

    スクリプト変換でふつうに実装するしかないでしょうね。

    /----------
     TimberLandChapel
     TimberLandChapel.com Community Stage 管理者
    ----------/
  • 2008-11-20 11:01 返答元:

    • karen
    • 貢献度トップ 10
    • 登録日 : 2008-10-15
    • 投稿数 16

    Re: データフロー内にてフラットファイルの行数文処理について

    TimberLandChapel 様

    アドバイス有難うございます。
    アドバイスを元に、スクリプトコンポーネントで実装して行きたいと思います。
    ここで申し訳ないのですが、基本的な質問をさせて頂きたいです。

    1.データフローにて「スクリプトコンポーネント」以外の一時テーブル参照方法
    制御フローにて一時テーブルを作成します。
    データフローで、このテーブルに値を挿入したいので「OLE DBコマンド」等を使用する場合
    接続マネージャの設定をしないと怒られるので、
    OLE DBソースを指定して、一時テーブルに更新するクエリを書いた場合、
    テーブルを認識しません。どのようにすれば良いのでしょうか。

    2.データフローにて「スクリプトコンポーネント」内でデータセットの参照方法
    「【SSIS Lightning】項目数が不揃いな CSV ソースファイルの欠落部分を NULL 値としてパイプする」
    を参考にすると、スクリプトコンポーネントからCSVファイルを呼んでいますが、
    メモリ上にあるCSVの情報をスクリプトコンポーネントで参照出来ないのでしょうか。

    質問ばかりで、申し訳ありませんが宜しくお願いします。
  • 2008-11-20 19:58 返答元:

    Re: データフロー内にてフラットファイルの行数文処理について

    お疲れ様です。TimberLandChapel です。

     1.

    一時テーブルが維持されるセッションがきちんと維持されていないからでしょう。

    RetainSameConnection プロパティを True に設定すればよいはずです。

    2.

    メモリ上にあるCSVというのがなんだかわかりません。

    RAMディスクではないですよね?

    /----------
     TimberLandChapel
     TimberLandChapel.com Community Stage 管理者
    ----------/
ページ 1 / 1 (4 アイテム)
Powered by Community Server (Non-Commercial Edition), by Telligent Systems