首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSIS -导入可变格式的文本文件

SSIS -导入可变格式的文本文件
EN

Stack Overflow用户
提问于 2009-10-16 12:55:55
回答 4查看 2.4K关注 0票数 1

所谓“可变格式”,是指文本文件中的每一行都以表示记录类型的单个字符代码开头,并且每种记录类型都有不同的格式。我相信这是某种相当常见的大型机数据导出方法。更糟糕的是,记录类型实际上是层次结构。使用中的代码对应关系如下:

代码语言:javascript
复制
0ThisIsAFileHeader
2ThisIsABatchHeader
4ThisIsDetailData
4ThisIsDetailData
6ThisIsAMatchingBatchFooter
8ThisIsAMatchingFileFooter

0/8是报头/报尾记录(每个都有自己的格式),2/6是子报头/子报尾记录(也是每个子报头/子报尾记录的格式),4表示实际数据或详细记录。

SQL Server2008、Visual Studio.NET 2008。自定义脚本任务是导入此数据的唯一方法吗?考虑到这一点,有人能给我推荐一个讨论这样做的资源吗?导入固定宽度的文本文件非常简单,但我不确定脚本任务将落在控制流中的什么位置,以及后续步骤将如何利用数据。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-16 13:15:06

这可以在SSIS中完成,尽管您必须跳过几个障碍。不经意间,这是一种方法:

基于第一个字符的rest.

  • Conditional拆分操作应将
  • 源文件设置为2列、第1个字符和一个字符串将行拆分为单独的rest.
  • Conditional转换操作要执行第2列并将其拆分成相应的字段,必须针对每种类型的行分别执行此操作,并将其附加到相应的条件拆分分支应针对每个条件分支配置 Split line.
    • Destination以存储/处理数据appropriately.

如果需要进一步的ETL工作来开始将项目链接在一起,我会将文件导入到临时表或永久临时区域中,并在提交最终结果之前执行更多转换。

真正的麻烦是数据是相关的,以及你如何保持这种关系/在事后推断它。我想如果我必须把它组合在一起,我会在数据流中使用一个脚本组件,它在每次看到标题记录时增加一个计数器,并将其输出到流中。这样,每条记录都会有一个标识号,以后可以用来将它们联系起来。

这有点复杂,但这个问题是可以解决的。

票数 4
EN

Stack Overflow用户

发布于 2009-10-16 13:15:17

也许SSIS有一种更好的方法来做这件事,但是几年前我不得不在DTS中做这件事时,我就是这么做的。

首先,我将数据放入有两列的临时表中(如果我觉得需要一个自动生成的id,则有三列)。一列是表示记录类型的字符,另一列是该行的所有剩余数据。

然后,我根据数据分离到规格化表,并在此过程中进行任何清理。

然后我导入到我的生产表中。

票数 1
EN

Stack Overflow用户

发布于 2009-10-16 13:17:32

如果我是您,并且这6个不同的字符代码是唯一与特定数据集关联的字符代码,那么我将使用平面文件导入组件导入它,然后使用每个代码上的大小写组件进行切换。我假设你喜欢维护层次结构,这样你就可以用Case拆分数据,然后随心所欲地插入它。

使用脚本组件导入数据通常是我最后的手段,但当文件(如您的例子)无法正确导入时,我确实喜欢在实际的平面文件导入之前使用脚本代码格式化数据。我认为编写一个格式化应用程序并使用它来格式化来自系统的任何文件比每次都编写自定义脚本导入更有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1577899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档