1

これをクラックする方法に関するいくつかのヒントをグーグルで検索しました。しかし、役立つヒットはありませんでした。今、SSISで同じことを達成できるかどうか疑問に思っています。

フォルダー内に複数の .csv ファイルがあります。私が達成しようとしているのは、次のことです。

  1. 各 .csv ファイルを開きます (ファイル名の変更としてパラメーターを使用します)
  2. 一部の列を削除
  3. 残りの列を特定の順序で再配置する
  4. .csv ファイルを保存します (Excel 確認メッセージ ボックスなし)。
  5. .csv ファイルを閉じます
  6. 処理済みのファイルを別のフォルダーに移動します。

フォルダー内のすべての .csv ファイルが処理されるまで、上記のプロセス全体を再開します。

最初は、For Each ループ コンテナーとプロセス実行タスクを使用してこれを実現できると考えていました。ただし、上記の目的を達成する方法に関するリソースを見つけることができません。

例: すべてのソース .csv ファイルのヘッダー:

コード| 名前| 値 1 | 値 2 | 値 3 | 日付| 数量| 価格| VALUE_ADD | ゾーン

列を削除する必要があります: NAME | VALUE_ADD | 各ファイルから ZONE を取り出し、以下の順序で列を並べ替えます。

希望する列の順序:

コード| 日付| 値 1 | 値 2 | 値 3 | 価格| 数量

これがSSIS内で可能であることは知っています。しかし、それを理解することはできません。事前にご協力いただきありがとうございます。

4

3 に答える 3

1

次の 4 つの手順を使用して簡単に実行できます。

  • 「フラット ファイル接続」を使用して CSV を開きます。
  • 「フラット ファイル ソース」コンポーネントを使用して CSV を読み取ります。
  • 「派生列」コンポーネントを使用して、列を再配置します。
  • 「フラット ファイルの宛先」コンポーネントを使用して、CSV を保存します。

ほら!

于 2012-10-09T12:06:32.130 に答える
1

多くの実験の後、望ましい結果を得ることができました。結局のところ、それはとてもシンプルに見えました。

このパッケージを作成する主な動機は、各ファイルを開き、いくつかの列を削除して残りの列を目的の形式に再配置するマクロを実行するという骨の折れるタスクを必要とする多数の .csv ファイルを持っていたことです。次に、Excel の確認ボックスをクリックした後、各ファイルを手動で保存する必要がありました。それはやりすぎでした。ワンクリックのアプローチが欲しかった。

私が行ったことの詳細な方法を示します。ソースとして複数の .csv ファイルからデータを取得し、必要な順序で目的の列のみを取得し、最終的に目的の出力を .csv ファイルとして新しい保存先に保存することに苦労している人々に役立つことを願っています。

簡単に言えば、私が使用しなければならなかったのは、使用することだけでした:

  • For Eachループ コンテナー
  • その中のデータ フロー タスク

また、データ フロー タスク内では次のようになります。

  • フラットファイルソース
  • フラットファイルの宛先
  • 2 つのフラット ファイル接続マネージャー- SourceDestinationにそれぞれ 1 つずつ。

また、3 つの変数(プロジェクト スコープを持つすべての文字列データ型) を使用する必要がありました。これには、 CurrFileNameDestFilePath、およびFolderPathという名前を付けました。

.

詳細な手順:

変数にデフォルト値を設定します。

CurrFileName:一時的な目的で、.scv ファイル (test.csv) の 1 つの名前を指定するだけです。

FolderPath:ソース .csv ファイルが配置されているパスを指定します ( C:\SSIS\Data\Input )

DestFilePath:処理されたファイルを保存する宛先パスを指定します ( C:\SSIS\Data\Input\Output )

手順 1 : For Each ループ コンテナーを [制御フロー] 領域にドラッグします。

ステップ 2 : コレクションで、列挙子を「Foreach File Enumerator」として選択します。

ステップ 3 : [列挙子の構成] の下の [フォルダー:] で、.csv ファイルが配置されているフォルダー パス (私の場合はC:\SSIS\Data\Input ) を指定し、[ファイル:] で拡張子を指定します (この場合: *. csv)

ステップ 4 : [ファイル名の取得] で、[名前と拡張子] ラジオ ボタンを選択します。

ステップ 5 : 次に、[変数マッピング] セクションに移動し、変数を選択します (私の場合: User::CurrFileName .

ステップ 6 : ソース接続を作成します (これをSrcConnectionと呼びます)。[接続マネージャー] 領域を右クリックし、フラット ファイル接続マネージャーを選択し、.csv ファイルの 1 つを選択します (一時的な目的で)。[詳細設定] タブに移動し、保持する列に必要な正しいデータ型を指定します。[OK] をクリックして終了します。

ステップ 7 : 次に、この新しく作成されたソース フラット ファイル接続の [プロパティ] に移動し、[] フィールドの横にある小さなボックスをクリックして、プロパティ式エディタを開きます。[Property] の下で [ConnectionString] を選択し、[式] スペースに@[User::FolderPath] + "\" + @[User::CurrFileName]と入力し、[OK] をクリックして終了します。

ステップ 8 : Windows エクスプローラーで、ソース フォルダー内に新しいフォルダーを作成します (この場合はC:\SSIS\Data\Input\Output)。

ステップ 9 : 宛先接続を作成します (これをDestConnectionと呼びましょう) - [接続マネージャー] 領域を右クリックし、フラット ファイル接続マネージャーを選択し、.csv ファイルの 1 つを選択します (一時的な目的で)。[詳細設定] タブに移動し、保持する列に必要な正しいデータ型を指定します。[OK] をクリックして終了します。

ステップ 10 : 次に、この新しく作成されたソース フラット ファイル接続の [プロパティ] に移動し、[]フィールドの横にある小さなボックスをクリックして、[プロパティ式エディタ] を開きます。[Property] の下で [ConnectionString] を選択し、[式] スペースに@[User::DestFilePath] + @[User::CurrFileName]と入力し、[OK] をクリックして終了します。

ステップ 11 : データ フロー タスクを Foreach ループ コンテナーにドラッグします。

ステップ 12 : データ フロー タスクでフラット ファイル ソースをドラッグし、フラット ファイル接続マネージャーでソース接続 (この場合はSrcConnection ) を選択します。[列] で、すべての列の選択を解除し、必要な列のみを (必要な順序で) 選択し、[OK] をクリックして終了します。

ステップ 13 : フラット ファイルの宛先をデータ フロー タスクにドラッグし、フラット ファイル接続マネージャーで宛先接続 (この場合はDestConnection ) を選択します。次に、[マッピング] セクションに移動し、マッピングが目的の出力に従っているかどうかを確認します。[OK] をクリックして終了します。

ステップ 14 : それだけです。パッケージを実行します。問題なく実行されるはずです。

これが役に立てば幸いです:-)

于 2012-10-10T11:46:59.597 に答える
0

これを行うために SSIS を使用する理由が明確ではありません: あなたのタスクは、データベースの外部でテキスト ファイルを操作することであると思われます。通常は、CSV 解析が適切な言語で記述された小さなスクリプトまたはプログラムでこれを行う方がはるかに簡単です。サポート (Perl、Python、PowerShell など)。これがより大きなパッケージの一部である必要がある場合は、プロセス実行タスクを使用してスクリプトを呼び出すだけです。SSIS は優れたツールですが、このような作業には非常に使いにくいと思います。

于 2012-10-09T20:53:36.053 に答える