通过 SSIS 导入带有不规则标题行的文本文件

Posted

技术标签:

【中文标题】通过 SSIS 导入带有不规则标题行的文本文件【英文标题】:Import Text File with irregular header lines through SSIS 【发布时间】:2012-11-01 15:34:02 【问题描述】:

我有一个如下所示的文件;请帮助如何通过 SSIS 导入它。问题在于如何跳过起始行,因为文件的其余部分将所有列选项卡分开。我还需要来自标题行的一些信息,例如 BSC 的名称,以用作另一列。

BSS release :   11                      
Name of BSC :   E344_JUB4                       
Type of measurement :   RT110_CELL/TRX related overview counters        
Measurement begin date and time :   5/21/2012 7:00      
Measurement end date and time   :   5/21/2012 8:00              
Input file name :   /alcatel/var/share/AFTR/APME/BSC/PMRES110.30A.16.E344_JUB4.2012-021.05:00:29.35.259                             
Output file name    :   /alcatel/var/share/AFTR/APME/OBSYNT/E344_JUB4/20120521/R11000008.142            
BTS_INDEX   BTS_SECTOR  CELL_NAME   CELL_CI CELL_LAC    BSC_MCC BSC_MNC MC01    MC02    MC02A   MC02B   MC02C   MC02D   MC02E   MC02F   MC02G   MC02H   MC02I   MC03    MC04    MC07    MC10    MC101   MC1040
1   1   JUB3227_4   32274   3719    420 F03 246 597 264 23  37  1   0   0   30  242 0   0   0   0   0   0   0
1   2   JUB3227_5   32275   3719    420 F03 331 6508    6118    25  51  3   0   0   40  271 0   0   0   0   0   0   0
1   3   JUB3227_6   32276   3719    420 F03 156 640 294 75  40  2   0   0   24  205 0   0   0   0   0   0   0
10  1   JUB3227_1   32271   3719    420 F03 151 1821    1584    17  36  3   0   0   8   173 0   0   0   0   0   0   0

【问题讨论】:

【参考方案1】:

假设您的文件具有固定数量的标题行,那么以下应该可以工作;

将源的读取分成两个单独的数据流。第一个用于传递标头;第二个细节。

在第一个流中,将文件视为冒号分隔。添加源(Excel?)控件,将数据访问模式更改为“SQL命令模式”。添加一条 SQL 语句,如 SELECT top 2 f1 FROM [Sheet1$]。这将从第一个工作表中选择前 2 行并仅返回 f1 列。您需要针对您的文件进行调整,以涵盖所需的标题行数。

添加派生列以将 Name : Value 对分成两部分。创建 3 个新的派生列。 - First = "Name",表达式为 LEFT(f1,FINDSTRING(f1,":",1) - 1) - Second = "Value",其表达式为 RIGHT(f1,LEN(f1) - FINDSTRING(f1,":",1) - 1) - 第三个 = 带有表达式 1 的“键”

添加一个 Pivot 控件以将多行(每个参数一个)切换到多列。输入“名称”作为枢轴键,“键”作为设置键,“值”作为枢轴值。在“从输出值生成数据透视表列”部分中,为每个标题名称输入一个值,即 [BSS 版本]、[BSC 名称]、[...] 这将产生一个包含所有标题值作为列的单行。然后,您可以将其与您的详细数据结合起来,或单独存储。

在详细信息源中将连接设置为通过 x 跳过标题行以绕过标题信息。像对待没有标题信息的文件一样对待。使用派生列组件将文件名等变量添加到行中。

【讨论】:

感谢您的想法。但是您能否详细解释一下如何执行这两个步骤,因为我是 SSIS 的新手。我的意思是您能告诉我要编写什么脚本来获取三个字段“名称标题行中的 BSC“测量开始时间”和“测量结束时间”。以及如何执行第二步,以便将第一步中的列添加到第二个表中。非常感谢您的指导。谢谢 在被卡住之前你能走多远?如果您还没有开始,请从详细数据开始。创建一个新文件(减去标题信息)。添加具有源/目标的数据流任务以从新文件中读取/存储数据。完成后,在文件顶部添加几行空白行,看看是否可以发现绕过 x 行选项。同时,我将尝试为标题部分找到一个示例并添加一个链接到我的答案。

以上是关于通过 SSIS 导入带有不规则标题行的文本文件的主要内容,如果未能解决你的问题,请参考以下文章

将文本文件导入 SSIS 中的 SQL Server 表的数据流如何工作?

SSIS 处理缺少文本限定符的平面文件

sql 2008的SSIS应用方法: 将多个一定格式的文本文件批量导入到数据库

当行的管道数多于列数时,SSIS管道分隔文件不会失败?

将超过 255 个字符从 excel 导入到 sql server(上一个问题 - 如何使用 ssis 将文本限定 CSV 动态加载到 sql server)

读取csv文件并将df写入带有文本换行的excel