2

フラットファイルを使用する ETL を開発しました。フラット ファイルのサイズは 250 MB ~ 300 MB です。ファイルがフォルダに存在する場合、それは絶対にうまく機能しています。ただし、ファイルが生成モードの場合は失敗します。

例: この ETL パッケージは、ファイルがフォルダーに存在するかどうかを確認するために午前 8 時から午前 10 時まで実行されます。現在、ファイルの生成が開始されている場合はいつでも(午前9時としましょう)、現在まで10 MBです。ETL はファイルの処理を開始し、4 ~ 5 分後にハングして失敗します (ファイルがフォルダーに存在するかどうかを読み取るスクリプト タスクでハングします)。

ファイルの生成が完全に完了したときにのみ SSIS パッケージをトリガーする最良の方法は何ですか?

注: ファイルの生成を制御することはできません。

4

2 に答える 2

1

For Loop Containerブール変数で a を追加しますbFileAccessible

  • 初期式は@bFileAccessible=False
  • 評価式は@bFileAccessible==False

内部にReadWriteVariableと次の C# スクリプトをFor Loop Container追加します (メソッドのみを表示)。Script TaskUser::bFileAccessibleMain()

    public void Main()
    {
        try
        {
            using (Stream stream = new FileStream("Path\to\your\file", FileMode.Open))
            {
                Dts.Variables["bFileAccessible"].Value = true;
            }
        }
        catch
        {
            Dts.Variables["bFileAccessible"].Value = false;
        }

        Dts.TaskResult = (int)ScriptResults.Success;
    }

また、ファイル名に変数を使用し、少し待機間隔を設定する必要があります。スクリプトの詳細については、こちらを参照してください。

于 2013-03-20T09:38:02.980 に答える
1

毎回ファイルの変更時刻を確認し、以前のものと同じものを比較してください....それは良い論理ではありませんが、完璧な代替手段がない場合は良い考えです

于 2013-03-20T10:07:23.643 に答える