如何在SSIS平面文件连接管理器编辑器设置行列分隔符并拆分数据为两张表
在SSIS平面文件连接管理器中配置分隔符并拆分数据至两张表
一、平面文件连接管理器基础配置
针对你提供的分号分隔、带引号字段的平面文件,按以下步骤设置分隔符:
- 创建平面文件连接管理器,选中目标文件后进入编辑器
- 常规选项卡:选择「分隔符」格式,字符集匹配文件(如ANSI)
- 列选项卡:
- 列分隔符选择
分号{;} - 行分隔符保留默认的
{CR}{LF}(若为Linux格式文件则选{LF}) - 点击「刷新」预览列拆分效果,确认无误
- 列分隔符选择
- 高级选项卡:
- 勾选「文本限定符」为
",确保带引号的字段被正确解析(避免把引号内的字符误判为分隔符) - 若先按整行读取处理多表逻辑,可只保留一个列,设置数据类型为
DT_STR,长度设为255(或更大以覆盖行内容)
- 勾选「文本限定符」为
二、拆分多表数据的数据流逻辑
你的文件包含两组独立表数据(以#开头的表头行、空行分隔),需通过以下步骤拆分:
- 平面文件源:使用上述配置的连接管理器,读取所有行(若按单列读取则直接输出整行字符串)
- 派生列组件:
- 新增列
RowType:用表达式判断行类型:LEFT(Column0,1) == "#" ? "Header" : (LEN(TRIM(Column0)) == 0 ? "Empty" : "Data") - 新增列
TableName:从行内容提取表名:RowType == "Header" ? SUBSTRING(Column0,2,FINDSTRING(Column0,";",1)-2) : SUBSTRING(Column0,1,FINDSTRING(Column0,";",1)-1)
- 新增列
- 条件拆分组件:
- 创建两个分支:
- 分支1:
TableName == "META_DATA1" - 分支2:
TableName == "META_DATA2"
- 分支1:
- 同时过滤空行:
RowType != "Empty"
- 创建两个分支:
- 数据拆分与清洗:针对每个分支,拆分出对应列并去除引号:
- 以META_DATA1分支为例,用派生列新增
NAME和VALUE:NAME: REPLACE(SUBSTRING(Column0,FINDSTRING(Column0,";",1)+1,FINDSTRING(Column0,";",2)-FINDSTRING(Column0,";",1)-1), "\"", "") VALUE: REPLACE(SUBSTRING(Column0,FINDSTRING(Column0,";",2)+1,LEN(Column0)-FINDSTRING(Column0,";",2)-1), "\"", "") - 或使用「拆分列」组件,以分号为分隔符拆分后,再用派生列去除引号
- 以META_DATA1分支为例,用派生列新增
- OLE DB目标:将两个分支的数据分别写入对应的数据库表(META_DATA1和META_DATA2)
最终验证结果
处理完成后,两张表的数据将与你的期望一致:
META_DATA1
| NAME | VALUE |
|---|---|
| IT | 1 |
| COMPUTER | 2 |
META_DATA2
| DEPARTMENT | VALUE |
|---|---|
| IT | 1 |
| COMPUTER | 2 |
内容的提问来源于stack exchange,提问作者Vinit Jha
相关产品推荐
相关产品推荐

