17

SSISパッケージを使用して固定幅のフラットファイルをデータベースにインポートする方法についてのチュートリアルはありますか?

さまざまな長さの列を含むフラットファイルがあります。

Column name    Width
-----------    -----
First name        25
Last name         25
Id                 9
Date               8

フラットファイルを列に変換するにはどうすればよいですか?

4

3 に答える 3

56

これは、 SSIS 2008 R2を使用して作成されたサンプルパッケージで、フラットファイルをデータベーステーブルにインポートする方法を説明しています。

  • Fixed_Width_File.txtスクリーンショットに示すように、データで名前が付けられた固定幅のフラットファイルを作成します。スクリーンショットでは、Notepad++を使用してファイルの内容を表示しています。キャリッジリターンやラインフィードなどの特殊文字を表示する機能があります。CR LF行区切り文字のキャリッジリターンラインフィードを示します。

フラットファイルデータ

  • SQL Serverデータベースで、 [ SQLスクリプト]dbo.FlatFileセクションにある作成スクリプトを使用して名前を付けたテーブルを作成します。

  • 新しいSSISパッケージを作成し、SQLServerデータベースに接続する新しいOLEDB接続マネージャーを追加します。OLEDB接続マネージャーの名前がSQLServerであると仮定します。

接続マネージャー

  • パッケージの[制御フロー]タブで、[データフロータスク]を配置します。

データフロータスク

  • データフロータスクをダブルクリックすると、[データフロー]タブが表示されます。[データフロー]タブで、フラットファイルソースを配置します。フラットファイルソースをダブルクリックすると、フラットファイルソースエディタが表示されます。[新規]ボタンをクリックして、フラットファイル接続マネージャーエディターを開きます。

  • フラットファイルソースエディタの[全般]セクションで、接続マネージャ名(たとえば[ソース])に値を入力し、フラットファイルの場所を参照してファイルを選択します。この例では、パスにサンプルファイルを使用していC:\temp\Fixed_Width_File.txtます。ファイルにヘッダー行がある場合は、ヘッダー行に値1を入力してテキストボックスをスキップし、ヘッダー行をスキップできます。

フラットファイル接続マネージャーエディター一般

  • [列]セクションをクリックします。選択に応じてフォントを変更します。CourierNewを選択したので、より少ないスクロールでより多くのデータを表示できます。69[行幅]テキストボックスに値を入力します。この値は、すべての列の幅の合計+行区切り文字の2です。正しい行幅を設定すると、[ソースデータ列]セクションに固定幅のファイルデータが正しく表示されます。ここで、適切な場所をクリックして、列の制限を決定する必要があります。以下のスクリーンショットのセクション4、5、6に注意してください。

フラットファイル接続マネージャーエディター列

  • [詳細]セクションをクリックします。前の手順で[列]セクションに設定した列制限に基づいて、5つの列が自動的に作成されます。5番目の列は行区切り文字用です。

フラットファイル接続マネージャーエディター高度

  • 列名の名前を、、、、、FirstNameおよびLastNameに変更しIdますDateRowDelimiter

フラットファイル接続マネージャーエディター高度な名前変更

  • デフォルトでは、列はDataType文字列[DT_STR]で設定されます。特定の列が異なるデータ型になることがかなり確実な場合は、[詳細設定]セクションで構成できます。Id列をデータ型に変更しfour-byte signed integer [DT_I4]、日付列をデータ型に変更しますdate [DT_DATE]

フラットファイル接続マネージャーエディターの高度なID列

フラットファイル接続マネージャーエディターの高度な日付列

  • [プレビュー]セクションをクリックします。データは、列の構成に従って表示されます。

フラットファイル接続マネージャーエディタープレビュー

  • フラットファイル接続マネージャーエディターで[ OK]をクリックすると、データフロータスクでフラットファイル接続がフラットファイルソースに割り当てられます。

フラットファイルエディタ接続

  • フラットファイルソースエディタで、[列]セクションをクリックします。フラットファイル接続マネージャーで構成された列に気付くでしょう。RowDelimiter必要ないので、チェックを外してください。

フラットファイルエディタの列

  • データフロータスクで、を配置しOLE DB Destinationます。フラットファイルソースからの出力をOLEDB変換先に接続します。

データフロータスク

  • OLE DB変換先エディターで、名前の付いたOLE DB接続マネージャーを選択し、テーブルの名前またはビューのドロップダウンを次のようにSQLServer設定します。[dbo].[FlatFile]

OLEDB宛先接続

  • OLE DB変換先エディターで、[マッピング]セクションをクリックします。フラットファイル接続マネージャーの列名はデータベースの列と同じであるため、マッピングは自動的に行われます。名前が異なる場合は、手動で列をマップする必要があります。[OK]をクリックします。

OLEDB変換先列

  • これでパッケージの準備が整いました。パッケージを実行して、固定幅のフラットファイルデータをデータベースにロードします。

パッケージの実行

  • データベース内のテーブルdbo.FlatFileをクエリすると、データベースにインポートされたフラットファイルデータに気付くでしょう。

テーブルにインポートされたデータ

このサンプルは、固定幅のフラットファイルをデータベースにインポートする方法についてのアイデアを提供するはずです。エラーロギングの処理方法については説明していませんが、これで開始でき、パッケージを操作するときに他のSSIS関連機能を見つけるのに役立ちます。

お役に立てば幸いです。

SQL Scripts

CREATE TABLE [dbo].[FlatFile](
    [Id] [int] NOT NULL,
    [FirstName] [varchar](25) NOT NULL,
    [LastName] [varchar](25) NOT NULL,
    [Date] [datetime] NOT NULL
)
于 2012-04-24T07:10:35.060 に答える
1

派生列変換では、各列にSUBSTRING()関数を使用できます。 例:

列DerivedColumn

FirstName SUBSTRING(Data、startFrom、Length);

ここで、FirstNameの幅は25であるため、0番目の位置から派生​​列で、SUBSTRING(Data、0、25);を指定して指定する必要があります。

他の列についても同様です。

于 2012-04-26T10:00:25.723 に答える
1

非常によく説明されています、Siva!あなたのチュートリアルと優れたイラストは、Microsoftが明確にすべきことを示しています

  1. 固定長の行の幅には、キャリッジリターンとラインフィード(CR&LF)の文字を含める必要があります(プレビューでは行が正しく整列していないことがわかったため、これを理解しました)
  2. インポートされない場合でも、これらのCRおよびLF文字を含む追加の列を定義するためのすべての重要なステップ。私もこれを理解しました。私が始める前にあなたの答えを見つけることによって私は恩恵を受けていただろう。

これらの2つがない場合、インポートを実行しようとすると、次のエラーメッセージが表示さ れます。列「列x」のデータ変換でステータス値4が返され、ステータステキスト「テキストが切り捨てられたか、ターゲットコードページで1つ以上の文字が一致しませんでした」 。」。

エラーの原因を検索しているときに誰かがこのページを見つけてくれることを願って、このエラーテキストに追加しました。事後であっても、あなたのツロリアルは見つける価値があります!

于 2012-07-03T17:03:02.190 に答える