4

これまでのところ、BIML を使用して SSIS パッケージを自動生成することに成功しています (CSV から SQL Server へ)。しかし、フラット ファイル形式で Varchar(MAX) 列を使用するたびに問題が発生しました。

問題は、フラット ファイル形式でサイズが-1のAnsiString型の列を定義すると、出力 SSIS パッケージに次の警告が表示されることです。

次の出力列のメタデータは、出力列が関連付けられている外部列のメタデータと一致しません。

[はい] をクリックすると、問題は自然に修正されますが、150 個のパッケージがあるため、これが最後のオプションになります。

Flat File Source Component の Advanced options をチェックすると、列Commentsのデータ型に違いが見られます。外部列は DT_TEXT として表示され、出力列は DT_STR として表示されます。:(

私が理解していないのは、他のすべてが正常に機能しているときに、出力列が Varchar(Max) に対してのみ異なるデータ型を表示する理由です。外部列から生成された出力列ではありませんか?

以下の biml コードを参照してください。

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
 <FileFormats>
        <FlatFileFormat Name="MetadataFileFormat" RowDelimiter="LF" ColumnNamesInFirstDataRow="true" IsUnicode="false">
            <Columns>
                <Column Name="Category" DataType="AnsiString" Length="128" Delimiter="|" CodePage="1252" />
                <Column Name="Comments" DataType="AnsiString" Length="-1" Delimiter="|" />
                <Column Name="DisplayName" DataType="AnsiString" Length="256" Delimiter="CRLF" />
            </Columns>
        </FlatFileFormat>
    </FileFormats>
	
	<Connections>
		<FlatFileConnection Name="FF_Test" FilePath="C:\Data\Sample.csv" FileFormat="MetadataFileFormat">
		</FlatFileConnection>
	</Connections>
	
	<Packages>
		<Package Name="FFTest" ConstraintMode="Linear">
			<Tasks>
				<Dataflow  Name="DFT Load Data">
					<Transformations>
						<FlatFileSource Name="FF_SRC" ConnectionName="FF_Test">
						</FlatFileSource>
					</Transformations>
				</Dataflow>
			</Tasks>
		</Package> 
	</Packages>
</Biml>

ここで外部列と出力列の違いを参照してください

4

2 に答える 2

4

データフロー内では、DT_STR は 0 ~ 8000 の長さに制限されています。フラット ファイル接続マネージャーでは、8k を超える長さを指定できます。

ここに画像の説明を入力

ただし、データ フローでそれを使用しようとすると、コンポーネントは有効な長さではないことを報告します。

ここに画像の説明を入力

また、SSIS がデータ フローからパフォーマンスを引き出す方法の概念を知っていれば、それは理にかなっています。メモリを事前に割り当て、そのメモリ空間ですべての変換を行います。MAX タイプにどのくらいのメモリを割り当てますか? 丁度...

そのため、DT_TEXT または DT_NTEXT のいずれかのストリーム データ型を使用する必要があります。これらは、無制限の長さの文字列を許可します。

ビムル

私は実際にこれに困惑しています。うまくいけば、スコットがチャイムを鳴らすことができます。出力された DTSX は、DT_STR のデータ型とゼロの長さを持つ前のスクリーンショットのように見えます。見た目が悪いだけで、問題なく動作します。ダブルクリックしてエディターに修正させると、DT_TEXT に変更されます。

ここに画像の説明を入力

SQL 実行タスクでできるように、データ型のオーバーライドを提供するだけの問題になると思いましたが、フラット ファイル ソースの Columns コレクションのプロパティではありません。

おそらく、これは Dataflow overrides プロパティをいじる必要がある状況でした...

                        <DataflowOverrides>
                            <OutputPath OutputPathName="Output">
                                <Columns>
                                    <Column 
                                        ColumnName="Comments" 
                                        DataType="AnsiString" 
                                        CodePage="1252"
                                        Length="-1" 
                                        ></Column>
                                </Columns>
                            </OutputPath>
                        </DataflowOverrides>

しかし、いいえ、それは私に良い結果をもたらしませんでした.

私はあきらめて、Mist/BimlOnline を使用して修正したパッケージを Biml にリバース エンジニアリングし、「ごまかしました」。

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
  <Connections>
    <FlatFileConnection Name="FF_Test" FilePath="C:\ssisdata\SO\Input\so_35438946.txt" FileFormat="FF_Test" />
  </Connections>
  <Packages>
    <Package Name="so_35438946_re" Language="None" VersionBuild="1" CreatorName="BillFellows" CreatorComputerName="AVATHAR" CreationDate="2016-02-16T13:02:49">
      <Tasks>
        <Dataflow Name="DFT Load Data">
          <Transformations>
            <DerivedColumns Name="DER Placeholder">
              <InputPath OutputPathName="FF_SRC.Output" />
            </DerivedColumns>
            <FlatFileSource Name="FF_SRC" LocaleId="None" FileNameColumnName="" ConnectionName="FF_Test" />
          </Transformations>
        </Dataflow>
      </Tasks>
      <Connections>
        <Connection ConnectionName="FF_Test" />
      </Connections>
    </Package>
  </Packages>
  <FileFormats>
    <FlatFileFormat Name="FF_Test" CodePage="1252" TextQualifer="_x003C_none_x003E_" ColumnNamesInFirstDataRow="true" RowDelimiter="LF">
      <Columns>
        <Column Name="Category" Length="128" DataType="AnsiString" Delimiter="VerticalBar" MaximumWidth="128" />
        <Column Name="Comments" Length="-1" DataType="AnsiString" Delimiter="VerticalBar" />
        <Column Name="DisplayName" Length="256" DataType="AnsiString" Delimiter="CRLF" MaximumWidth="256" />
      </Columns>
    </FlatFileFormat>
  </FileFormats>
</Biml>

そして今、私は単純に SSIS パッケージを生成します... まあ、それは進歩だと思います。コメントは DT_TEXT として識別されますが、それでも警告が表示されます。

ここに画像の説明を入力

dtsx の詳細

データ フローのフラット ファイル ソースでは、この列の外部メタデータ コレクションは次のように定義されます。

<externalMetadataColumn
    codePage="1252"
    dataType="str"
    name="Comments"
    refId="Package\DFT Load Data\FF_SRC.Outputs[Output].ExternalColumns[Comments]"></externalMetadataColumn>

その上で、編集者に調整させます

<externalMetadataColumn
    refId="Package\DFT Load Data\FF_SRC.Outputs[Output].ExternalColumns[Comments]"
    codePage="1252"
    dataType="text"
    name="Comments" />

元のコードを使用して VS 2013 から出力されたものを取得します。

<externalMetadataColumn 
    codePage="1252" 
    dataType="str" 
    name="Comments" 
    refId="Package\DFT Load Data\FF_SRC.Outputs[Output].ExternalColumns[Comments]">
</externalMetadataColumn>

不快かもしれませんが、おそらく少しの XSLT で、この名前付き列とデータ型を持つインスタンスを見つけて、次のようにstr変換できます。text

于 2016-02-16T18:40:58.327 に答える
0

私は試しませんでしたが、Varigance のドキュメントで見つけました。

<!-- A Length of -1 will automatically be converted to nvarchar(max)/varchar(max) -->
<Column Name="LongString" DataType="String" Length="-1" />
于 2019-11-13T13:23:55.000 に答える