AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 118290
Accepted
Juan Velez
Juan Velez
Asked: 2015-10-17 10:16:18 +0800 CST2015-10-17 10:16:18 +0800 CST 2015-10-17 10:16:18 +0800 CST

SSIS - 固定宽度平面文件映射工具/技术

  • 772

我想知道是否有任何人用来在 SSIS 平面文件连接管理器中映射固定宽度的平面文件的工具(或特殊技术)?

通常我只使用平面文件连接管理器编辑器(高级选项卡)并开始为所有列一一添加列信息(名称、宽度、数据类型等)。

过去这对我来说效果很好,但现在我必须映射一个具有接近 500 列的固定宽度文件......

我在想(希望)应该有一种工具或技术我可以使用,这将使我能够以更流线型的方式完成映射......

使用我为文件提供的数据字典,我可以轻松地创建一个 excel(或文本)文档,例如其中包含 SSIS 需要的必要信息(列名、分隔符、InputColumnWidth、OutpuColumnWidth、DataType)的几列来映射文件.

我想知道是否有一个 SSIS 工具或组件可以读取此文件并自动在平面文件连接管理器中为我创建映射...

如果没有这样的工具,是否有人有任何技巧或提示可以帮助我以最有效的方式映射文件?

我想知道是否可以修改 SSIS 包 xml 文件,这样我可以创建一些代码,将所有列的列信息脚本化为 xml 格式,然后我可以手动将其复制并粘贴到包 xml文件...不确定这是否可行....

注意:在 SSIS 中映射文件后,它将被加载到 SQL Server 表中

平面文件连接管理器编辑器

sql-server ssis
  • 1 1 个回答
  • 8623 Views

1 个回答

  • Voted
  1. Best Answer
    billinkc
    2015-10-17T11:50:59+08:002015-10-17T11:50:59+08:00

    我想到了两个选项,它们都是 can't-say-enough-good-things-about-this-free-tool BIDS Helper的功能。

    创建固定宽度的列

    第一个是创建固定宽度列功能。就像创建一个平面文件管理器指向正确的文件并定义 1 列一样简单。

    完成后,右键单击连接管理器并使用“创建固定宽度列...”的上下文相关功能

    在此处输入图像描述

    在下一个窗口中,将制表符分隔列表 (Excel) 粘贴到编辑器中

    在此处输入图像描述

    哦,是的,这很简单。如果您需要对列类型等进行一些调整,那么您可以正常使用编辑进行更改。

    比姆

    我喜欢用于我的 SSIS 开发的商业智能标记语言。它有很多好处,但在最基本的层面上,将它用于诸如可怕的平面文件之类的东西,特别是当它们不提供标题行时(我在看着你,你的大型机)。

    在处理遗留系统时,我经常有经验,它们的文件定义在 COBOL 副本中。这些开发人员将向我发送带有列布局的 Excel 文件,例如

    DATABASE FIELD NAME    START LOC   LENGTH
    SEND.DT                 1          STRING(08)
    SEND.TIME               9          STRING(08)
    DT                     17          STRING(08)
    TERM                   25          STRING(04)
    %ZONE                  29          STRING(01)
    

    这并不花哨,但 Excel 公式可以轻松完成。因此,我将根据上述内容创建 4 个新列。

    Sanitized Name(删除了列名的无效字符)

    =SUBSTITUTE(SUBSTITUTE(B3, ".", "_"), "%", "PCT_")
    

    长度(提取数字,注意这仍然有一个前导 0,但它没有伤害)

    =MID(E3,LEN("STRING(")+1,LEN(E3)-LEN("STRING(")-1)
    

    XML(这为平面文件定义构建了实际的 XML)

    =CONCATENATE("<Column Name=""",F3,""" Length=""",G3,"""  DataType=""AnsiString""  ColumnType=""FixedWidth""  CodePage=""1252"" />")
    

    DDL(我在它的时候也可以构建目标表)

    =CONCATENATE(",   ", F3, " varchar(", G3, ")")
    

    DDL 的第一列删除了前导逗号,然后用CREATE TABLE dbo.FOO()

    最终,该 XML 会导致一些东西被打到FlatFileFormat标签中,然后创建 Connections 集合和最后的包本身就是一件简单的事情。看起来很多,但实际上很简单,只要你有一个模式。

    <Biml xmlns="http://schemas.varigence.com/biml.xsd">
    
        <FileFormats>
            <FlatFileFormat
                Name="FFF Pickup"
                CodePage="1252"
                RowDelimiter="CRLF"
                IsUnicode="false"
                FlatFileType="RaggedRight">
                <Columns>
                    <Column Name="SEND_DT" Length="08"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
                    <Column Name="SEND_TIME" Length="08"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
                    <Column Name="DT" Length="08"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
                    <Column Name="TERM" Length="04"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
                    <!--
                    ad nauseum
                    --> 
                    <Column Name="RPRTD_PU_PCS" Length="5"  DataType="AnsiString"  ColumnType="FixedWidth"  CodePage="1252" />
                </Columns>
            </FlatFileFormat>
        </FileFormats>
    
        <Connections>
            <FlatFileConnection
                Name="FF Pickup"
                FileFormat="FFF Pickup"
                FilePath="C:\ssisdata\Operations\Input\Pickup Report Pickups.txt"
                CreateInProject="false"
            />
        </Connections>
    
    <Packages>
        <Package Name="PickupLoad" ConstraintMode="Linear" ProtectionLevel="DontSaveSensitive">
            <Tasks>
                <Dataflow Name="DFT Load Pickups" >
                    <Transformations>
                        <FlatFileSource 
                            Name="OLE_SRC Pickup" 
                            ConnectionName="FF Pickup" 
                            RetainNulls="true">
                        </FlatFileSource>
                    </Transformations>
                </Dataflow>
            </Tasks>
        </Package>
    </Packages>
    

    哦,还有一个来自SO的类似问题,答案非常相似。希望我在重写这个答案之前看过斯金纳的评论。

    • 11

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve