【问题标题】:How to manage giant fixed-width file in SSIS?如何在 SSIS 中管理巨大的固定宽度文件?
【发布时间】:2013-10-08 23:48:54
【问题描述】:

我有一个固定宽度的文件,大约 1200 个字符宽,大约有 300 多列。我正在寻找一种在 SSIS 中创建固定宽度数据源的方法,而无需使用平面文件连接管理器的 UI。有没有办法修改列定义而不必在 SSIS 中使用 UI?我在项目的任何地方都找不到数据连接的文件。

我注定要手动将 300+ 列一一添加到平面文件连接管理器中吗?

【问题讨论】:

  • 如果您宁愿使用脚本而不是 SSIS,请使用 BULK INSERT(T-SQL 命令)或 BCP.EXE(命令行工具)。两者都使用可能很痛苦的格式文件。或者,您可以使用这个新的 BIML 东西来自动生成您的包。恕我直言,命令/T-SQL 解决方案更易于维护,但我从未使用过 BIML。

标签: ssis flat-file


【解决方案1】:

我想到了两个选项。首先是安装 BIDSHelper 并使用Create Fixed Width Columns

@ElectricLlama 提到的另一个是使用 BIML。这也需要安装 BIDS Helper,但需要将 .biml 文件转换为 .dtsx Short Walkthrough

这应该近似于创建一个带有平面文件连接管理器(带有单列)的包,添加一个数据流,并在其中使用我们的平面文件并将其连接到行数。这是您想要的近似值。只需在 Columns 标记中填写 XML。

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
    <FlatFileConnection
        Name="FF dchess"
        FileFormat="FFF dchess"
        FilePath="C:\ssisdata\SO\Input\dchess.txt"
    />
</Connections>
<FileFormats>
    <FlatFileFormat
Name="FFF dchess"
CodePage="1252"
RowDelimiter="CRLF"
IsUnicode="false"
FlatFileType="RaggedRight"
        >
        <Columns>
            <Column Name="MyColumn" Length="08"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
        </Columns>
    </FlatFileFormat>
</FileFormats>
<Packages>
    <Package Name="dchess" ConstraintMode="Linear" ProtectionLevel="DontSaveSensitive">
        <Connections >
            <Connection ConnectionName="FF dchess" />
        </Connections>
        <Variables>
            <Variable Name="CurrentFileName" DataType="String">C:\ssisdata\so\Input\dchess.txt</Variable>
            <Variable Name="RowCountInsert" DataType="Int32">0</Variable>
        </Variables>
        <Tasks>
            <Dataflow Name="DFT Load file" >
                <Transformations>
                    <FlatFileSource
                        Name="FF_SRC dchess"
                        ConnectionName="FF dchess"
                        RetainNulls="true">
                    </FlatFileSource>
                    <RowCount Name="CNT Source" VariableName="User.RowCountInsert"></RowCount>
                </Transformations>
            </Dataflow>
        </Tasks>
    </Package>
</Packages>
</Biml>

生成的包看起来像

随意抬起你的下巴离开地面 ;)

【讨论】:

  • BIDSHelper 方法对我有用,但在您执行此操作后要检查的一件事是检查您的标题行分隔符和总行长度设置,因为我的行被搞砸了,直到我修复它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 2011-11-30
  • 2013-11-15
  • 2015-05-21
  • 2012-05-04
  • 1970-01-01
相关资源
最近更新 更多