web-dev-qa-db-ja.com

SSISがフラットファイルの最後のデータ行の最後のフィールドを切り捨てないようにするにはどうすればよいですか?

テキストファイルを解凍してロードするSSISパッケージがあります。デバッガーから、そして本番環境に向かう途中でアップロードされたさまざまなサーバーから、うまく機能しています。

今の私の問題はこれです:ファイルがロードされていて、すべてが順調に進んでいましたが、突然、最後のデータ行(エラーメッセージによる)で最後のフィールドが切り捨てられました。私たちが受け取ったファイルはおそらくめちゃくちゃになっていて、ひびが入っていて、すべてが順調だと思いました。

その_|_区切りファイル、テキスト修飾子なし、および_{CR}{LF}_行区切り文字として。切り捨てエラーのあるフィールドは行の最後のフィールド(この場合はファイル全体の最後のフィールド)であるため、区切り文字は_{CR}{LF}_であり、_|_

ファイルは元の状態に見え、Excelに問題なくロードしたこともあります。このファイルは、VS 2008のdeuggerを介してパッケージを実行しているローカルマシンで実行しましたが、完全に実行されました。誰かがこのような行動に何か問題がありましたか?それは私たちの実稼働環境であり、これらはピーク時間であるため、クラッシュする環境ではあまりテストできません。アドバイスをいただければ幸いです。

エラーメッセージ:

Description: Data conversion failed. The data conversion for column "ACD_Flag" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.". End Error Error: 2013-02-01 01:32:06.32 Code: 0xC020902A Source: Load ACD file into Table HDS Flat File 1 [9] Description: The "output column "ACD_Flag" (1040)" failed because truncation occurred, and the truncation row disposition on "output column "ACD_Flag" (1040)" specifies failure on truncation. A truncation error occurred on the specified object of the specified component. End Error Error: 2013-02-01 01:32:06.32 Code: 0xC0202092 Source: Load ACD file into Table [9] Description: An error occurred while processing file "MY FLAT FILE" on data row 737541.

737541はファイルの最後の行です。

更新:元々行区切り文字_{CR}_がありましたが、この問題を修正するために_{CR}{LF}_に更新しました...役に立たないものの

5
misterManager

だから私は答えを思いついた。他の答えは非常によく考えられており、良いですが、私は少し異なる手法を使用してこれを解決しました。

フラットファイルのデータを調べても意味がなかったため、実際の切り捨ての可能性はほとんどなくなりました...切り捨ては絶対に発生しませんでした。そこで、エラーメッセージの後半に焦点を当てることにしました:or one or more characters had no match in the target code page

いくつかの激しいGoogleの後で、私はこのようないくつかのサイトを見つけました: http://social.msdn.Microsoft.com/Forums/en-US/sqlintegrationservices/thread/6d4eb033-2c45-47e4-9e29-f20214122dd3/

基本的には、切り捨てが行われていないことがわかっている場合は、コードページが一致しない文字があるため、1252 ANSI Latin Iから65001 UTF-8に切り替えると違いが生じるはずです。

これは本番環境に移行されており、本番環境だけがこの問題を抱えている環境なので、正しい修正が行われたことを100%確認したかったので、もう1つ変更を加えました。テキスト修飾子はありませんでしたが、SSISはフラットファイル接続マネージャーの各列のデフォルトのText_QualifiedプロパティをTRUEに保持しています。私はそれらすべてをfalseに設定しました(問題の列だけでなく)。したがって、パッケージは修飾子が必要であるとは認識しません。次に、修飾子に移動して<none>を参照し、修飾子を検索しません...フラットアウトでは修飾子ピリオドを使用しません。

これらの2つの変更の間に、パッケージは最終的に正常に実行されました。両方の変更が同じリリースで行われ、本番環境でこのエラーが発生しただけであり、実験目的で異なるものを切り替える余裕がないため、どちらの変更が最終的に行われたかを話すことはできませんが、私が行った変更は、これら2つだけでした。

注意すべき点の1つ:このパッケージを実行している本番マシンは10.50.1617であり、私が開発しているマシン(およびテストしているほとんどのマシン)は10.50.4000です。 Ops DBAで発生する可能性のある問題としてこれを提起しましたが、すべての一貫性が保たれることを願っています。

うまくいけば、これは同様の問題を抱えている他の人の助けになるでしょう。誰かが追加情報や詳細を希望する場合(私はすべてをカバーしたように感じます)、ここにコメントして私に知らせてください。私はこれを喜んで更新し、将来一緒に来る人にとってより役立つようにします。

5
misterManager

更新:

質問に追加したエラーメッセージを再現することができます。このエラーは、フラットファイル接続マネージャーで定義したものよりも多くの列区切り文字が行にある場合に発生します。

これはそれを説明するための簡単な例です。以下のような簡単なファイルを作成しました。

Sample file

パッケージを作成し、以下に示す設定でフラットファイル接続マネージャーを構成しました。

Flat file General

Flat file Column 0

Flat file Column 1

Flat file Advanced

Flat file Preview

ファイルを読み取り、データベーステーブルにデータを入力するように、データフロータスクを使用してパッケージを構成しました。パッケージを実行したところ、失敗しました。

Failed

BIDSのExecution Resultsタブをクリックしました。質問に投稿したのと同じメッセージが表示されます。

[Flat File Source [44]] Error: Data conversion failed. The data conversion for column "Column 1" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.".
[Flat File Source [44]] Error: The "output column "Column 1" (128)" failed because truncation occurred, and the truncation row disposition on "output column "Column 1" (128)" specifies failure on truncation. A truncation error occurred on the specified object of the specified component.
[Flat File Source [44]] Error: An error occurred while processing file "C:\temp\FlatFile.txt" on data row 2.
[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED.  The PrimeOutput method on component "Flat File Source" (44) returned error code 0xC0202092.  The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing.  There may be error messages posted before this with more information about the failure.

それがあなたの問題を特定するのに役立つことを願っています。

Execution results

前の答え:

ファイルの最後の行の最後のフィールドの値が、フラットファイル接続マネージャーの最後の列のOutputColumnWidthプロパティの値を超えている可能性があると思います。

SSISパッケージのフラットファイル接続マネージャーを右クリックします。 Flat File Connection Manager EditorAdvancedタブページをクリックします。最後の列をクリックして、OutputColumnWidthプロパティの値を確認します。

次に、パッケージの失敗の原因となっているファイルの最後の行の最後のフィールドのデータの長さを確認します。

OutputColumnWidth

それが問題の原因である場合、これを修正するための2つの可能なオプションがあります。

  1. 最後の列のOutputColumnWidthプロパティを、要件を満たす適切な長さに増やします。

  2. 切り捨ての警告を気にしない場合は、フラットファイルソースエディタの最後の列にある切り捨てエラーの出力を変更できます。 Flat File Source Editorをダブルクリックし、Error Outputをクリックします。切り捨て列の値をIgnore failureまたはRedirect rowのいずれかに変更します。 Redirect rowを好むのは、無効なファイルを別のテーブルにリダイレクトし、データを修正するために必要なアクションを実行することで、受信ファイルのデータの問題を追跡できるためです。

それがあなたの問題を解決するためのアイデアを与えることを願っています。

Error output

8
user756519

それは1つのサーバーでのみ発生しますか?そして、あなたはテスト修飾子を使用していませんか?これは以前に起こったことがあります。これがそれを修正したものです。

そのサーバーに移動し、xmlファイルを開きます。 TextQualifierを検索して、次のように表示されるかどうかを確認します。

 <DTS:Property DTS:Name="TextQualifier" xml:space="preserve">&lt;none&gt;</DTS:Property>

それがそれを言わせないなら。

2
HLGEM

これらの簡単な手順に従ってください。

1. Right-click the OLE DB source or destination object, and then click Show Advanced Editor…. 2. On the Advanced Editor screen, click the Component Properties page. 3. Set AlwaysUseDefaultCodePage to True. 4.Click OK. 5.Clicking OK saves the settings for use with the current OLE DB source or destination object within the SSIS package.

1
Shahab Haidar

これは1年後のことですが、フラットファイル接続マネージャーを開いたとき、テキスト修飾子には「_x003C_none_x003E_」が含まれていました。 「_x003C_none_x003E_」の16進コードのガベージを置き換え、矢印を「<"none">」(エディターが矢印を削除している)のように配置すると、ファイルの最後の行の削除が停止しました。

0
user3224249

まったく同じエラーが発生しました。ソーステキストファイルにUnicode文字が含まれていたので、(デフォルトのutf-8エンコーディングの代わりに)Unicodeエンコーディングを使用してテキストファイルを保存し、[データソース]ダイアログの[Unicode]チェックボックスをオンにすることで解決しました。

0
kruvi