web-dev-qa-db-ja.com

SSISを使用して固定幅のフラットファイルをデータベースにインポートする方法は?

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

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

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

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

16
OBL

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

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

Flat file data

  • SQLサーバーデータベースで、SQL Scriptsセクションで提供される作成スクリプトを使用して、dbo.FlatFileという名前のテーブルを作成します。

  • 新しいSSISパッケージを作成し、SQL Serverデータベースに接続する新しいOLE DB接続マネージャーを追加します。OLE DB接続マネージャーの名前はasSQLServer

Connection manager

  • パッケージの制御フロータブで、Data Flow Taskを配置します。

Data flow task

  • データフロータスクをダブルクリックすると、データフロータブが表示されます。 [データフロー]タブで、Flat File Sourceを配置します。フラットファイルソースをダブルクリックすると、Flat File Source Editorが表示されます。 Newボタンをクリックして、Flat File Connection Manager Editorを開きます。

  • Flat File Source EditorのGeneralセクションで、Connection manager name(たとえばSource)およびフラットファイルの場所を参照し、ファイルを選択します。この例では、パスC:\temp\Fixed_Width_File.txtのサンプルファイルを使用します。ファイルにヘッダー行がある場合、ヘッダー行に値1を入力して、テキストボックスをスキップしてヘッダー行をスキップできます。

Flat file connection manager editor General

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

Flat file connection manager editor Columns

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

Flat file connection manager editor Advanced

  • 列名をFirstNameLastNameIdDateおよびRowDelimiterに名前変更します。

Flat file connection manager editor Advanced Renamed

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

Flat file connection manager editor Advanced Id column

Flat file connection manager editor Advanced Date column

  • Previewセクションをクリックします。データは列構成に従って表示されます。

Flat file connection manager editor Preview

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

Flat file editor connection

  • フラットファイルソースエディターで、[列]セクションをクリックします。フラットファイル接続マネージャーで構成された列がわかります。 RowDelimiterのチェックを外します。これは必要ないからです。

Flat file editor columns

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

Data flow task

  • OLE DB Destination Editor)で、SQLServerという名前のOLE DB Connection managerを選択し、テーブルまたはビューの名前ドロップダウン[dbo].[FlatFile]

OLE DB Destination connection

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

OLE DB Destination columns

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

Package execution

  • データベース内のテーブルdbo.FlatFileを照会すると、フラットファイルデータがデータベースにインポートされていることがわかります。

Data imported into table

このサンプルは、固定幅のフラットファイルをデータベースにインポートする方法についてのアイデアを提供するはずです。エラーロギングの処理方法については説明しませんが、これを使用すると、パッケージを操作するときに使い始めることができ、他の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
)
54
user756519

非常によく説明されています、シバ!あなたのチュートリアルと優れたイラストは、マイクロソフトが明らかにすべきであったことを指摘しています

  1. 固定長の行の幅には、キャリッジリターンとラインフィード(CR LF)文字が含まれている必要があること(プレビューでは行が正しく並んでいないことが示されたため、これがわかりました)
  2. これらのCR LF文字は、インポートされませんが、それらを含むように追加の列を定義するすべての重要なステップです。私もこれを理解しました。始めました。

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

誰かがエラーの原因を探しているときにこのページを見つけることを期待して、このエラーテキストに追加しました。事後であっても、あなたのTurorialは見つける価値があります!

1
Paul M Simpson

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

列DerivedColumn

FirstName SUBSTRING(Data、startFrom、Length);

ここで、FirstNameの幅は25です。そのため、0番目から派生列でSUBSTRING(Data、0、25)を指定して指定する必要があると考えた場合、

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

1
Amarnath