gpt4 book ai didi

ssis - 带有 VARCHAR(MAX) 列的 BIML 平面文件格式

转载 作者:行者123 更新时间:2023-12-04 08:19:49 27 4
gpt4 key购买 nike

到目前为止,我已成功使用 BIML 自动生成 SSIS 包(从 CSV 到 SQL Server)。但是我在平面文件格式中有 Varchar(MAX) 列时遇到了问题。

问题是如果我定义了一个 类型的列AnsiString 带尺码 -1 在平面文件格式中,输出 SSIS 包显示以下警告

The metadata of the following output columns does not match the metadata of the external columns with which the output columns are associated.



如果我单击是,问题会自行解决,但这将是我最后的选择,因为我有 150 个包。

当我检查平面文件源组件的高级选项时,我可以看到列 的数据类型有所不同。评论 , 外部列显示为 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>


See the difference between External and Output columns here

最佳答案

在数据流中,DT_STR 的长度范围为 0 到 8000。平面文件连接管理器很乐意让您指定大于 8k 的长度。

enter image description here

但是,当您尝试在数据流中使用它时,组件将报告它不是有效长度

enter image description here

如果您了解 SSIS 如何从数据流中获取性能的概念,这将是有意义的。它预先分配内存并在该内存空间中执行所有转换。你会为 MAX 类型分配多少内存?确切地...

因此,您将需要使用其中一种流数据类型:DT_TEXT 或 DT_NTEXT。这些允许无限长度的字符串。

比尔

我实际上对此感到困惑,希望 Scott 可以插话。发出的 DTSX 将看起来像之前的屏幕截图,数据类型为 DT_STR,长度为零。它运行良好,只是看起来很糟糕。当您双击让编辑器修复它时,它会按原样更改为 DT_TEXT。

enter image description here

我认为这只是在执行 SQL 任务中提供数据类型覆盖的问题,但无济于事,它不是平面文件源中 Columns 集合的属性。

也许这是我需要弄乱数据流覆盖属性的情况......

                        <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 但我仍然收到警告。

enter image description here

深入了解 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

关于ssis - 带有 VARCHAR(MAX) 列的 BIML 平面文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35438946/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com