笔记:浅谈 ETL(SSIS) 对 EXCEL源的处理

最近工作中刚好碰到excel 作为源导入db的需求,于是写下来帮助自己以后回顾和总结

逐步扩展对excel的处理

1.单纯的excel导入目标库

这步实现是最为简单,不考虑任何的扩展性和容错处理,缺点也很明显,源文件名和文件所在的路径都需要固定并且无法处理一个批次多个文件的情况

2.扩展循环处理多个文件

这种实现在上一种基础上添加了一层循环,对同一个folder下符合条件的文件进行循环导入,并做相应的文件处理操作。

1.首先建立个文件夹结构

files用来存放需要导入的excel文件,archive用来存放已经导入db的excel文件

选择foreach loop Editor,选择对文件元素进行循环。考虑到路径是可配置的,通过表达式方式配置路径。变量SrcFilePath用来配置excel文件的绝对路径

变量ForeachLoopFile用来接收循环的excel文件名。

Script task 用来获取绝对文件名和arcfile 的绝对路径

Dts.Variables["User::SrcFileFullName"].Value = Dts.Variables["User::SrcFilePath"].Value.ToString() + "\\LTFC\\" + Dts.Variables["User::ForeachLoopFile"].Value.ToString();
Dts.Variables["User::ArcFilePathThis"].Value = Dts.Variables["User::ArcFilePath"].Value.ToString() + "\\LTFC";

File System task 用来将文件移到arcfolder 下面

3.上面方式已经较为完善的对excel源进行了扩展处理,那么问题来了(防不胜防)如果多个文件导入过程中某个文件导入失败,那么循环也就停止,后续的文件也就无法导入db

现在需要扩展容错性,做到对错误文件也有相应的处理。解决方案如下:

另在 archive文件夹下建立Failed folder用于存储失败的文件。并且已经导入的文件文件名加上时间前缀用于识别导入的文件和时间。

修改Foreach loop Container的ForeachExecuteResult = success ,表示循环过程中忽略容器中的错误事件。

修改Sequence Container 1的FailPackageOnFailure = TRUE,表示此容器中出现错误整个package将返回错误。

修改以上两个属性是确保只对excel 处理时出现错误能够保证外部的循环继续执行,但是对文件进行移动重命名等操作时的错误属于合理的错误,一旦出现将终止循环执行。

添加一个FLAG变量 默认值为0 用来控制执行流

Sequence Container 用来将循环的 excel 数据导入db 如果失败设置变量 FLAG = 1  失败和成功都会继续向下执行Sequence Container1

Sequence Container1 用来将导入的文件按照成功和错误重命名后放到相应的文件夹下面FLAG = 0 执行Success操作,FLAG = 1执行Failed操作,Failed 操作执行完重置FLAG = 0

script task 中包含的代码:

Dts.Variables["User::SrcFileFullName"].Value = Dts.Variables["User::SrcFilePath"].Value.ToString() + "\\" + Dts.Variables["User::ForeachLoopFile"].Value.ToString();

Dts.Variables["User::FailedFileName"].Value = Dts.Variables["User::ArcFilePath"].Value.ToString() + "\\CAtarget\\Failed\\" + DateTime.Now.ToString("yyyyMMddhhmmss") + "_" + Dts.Variables["User::ForeachLoopFile"].Value.ToString();
Dts.Variables["User::SuccessFileName"].Value = Dts.Variables["User::ArcFilePath"].Value.ToString() + "\\CAtarget\\" + DateTime.Now.ToString("yyyyMMddhhmmss") + "_" + Dts.Variables["User::ForeachLoopFile"].Value.ToString();

当然对应的File Conn 和Excel Conn 都是通过循环的excel文件名和其他变量组合表达式配置。

以上就是对excel 作为源导入DB的一些扩展,当然还可以在DB中建立一些log表记录excel 的导入信息,导入了哪些文件,每个文件导入了多少行,导入失败的描述等等。

时间: 2024-11-02 08:28:58

笔记:浅谈 ETL(SSIS) 对 EXCEL源的处理的相关文章

C#基础笔记---浅谈XML读取以及简单的ORM实现

背景: 在开发ASP.NETMVC4 项目中,虽然web.config配置满足了大部分需求,不过对于某些特定业务,我们有时候需要添加新的配置文件来记录配置信息,那么XML文件配置无疑是我们选择的一个方案之一.下面简单谈谈XML的读取.  一. xml.linq读取xml 1.新建一个data.XML文件 1 <Customers> 2 <Customer> 3 <Name>Frank</Name> 4 <City>成都</City>

Java学习笔记——浅谈数据结构与Java集合框架(第一篇、List)

横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中. --苏轼 这一块儿学的是云里雾里,咱们先从简单的入手.逐渐的拨开迷雾见太阳.本次先做List集合的三个实现类的学习笔记 List特点:有序,元素可重复.其实它的本质就是一个线性表(下面会说到) 先上图,Java集合有Collection体系和Map体系: 然后简单介绍一下数据结构和算法: 数据结构就是数据和数据之间的关系,好比分子结构,晶体结构.碳原子按照一定的方式组合在一起形成碳分子,碳分子再按照一定方式形成晶体. 算法是对解题

浅谈量子计算机 大发云网站源码架设修复详解

一.两类量子计算机 量子计算机主要分为通用量子计算机(也称为标准量子计算机)和专用量子计算机.通用量子计算机通过量子纠缠.量子干涉.量子叠加等量子态实现计算,例如,Google于2018年3月发布的72量子比特的量子计算机Bristlecone:专用量子计算机则是通过其他理论或模型实现计算(大发云网站源码架设修复Q_917_899_899 测试bbs.yasewl.com 如,量子退火理论等),例如,D-Wave公司的发布的各型量子计算机,该公司于2018年发布的量子计算机已具有高达2000个量

《CSS设计指南》笔记—浅谈颜色值

颜色值 指定颜色值可以有几种方式.这些方式可以在同一个样式表中混合使用. 1.颜色名(如red) 设定颜色属性时可以直接使用颜色名,或者用官方术语就是颜色关键字.  W3C定义了16个颜色关键字:aqua(浅绿色).black(黑色).blue(蓝色).fuchsia(紫红色).gray(灰色).green(绿色).lime(黄绿色).maroon(褐红色).navy(深蓝色).olive(茶青色 ).purple(紫色).red(红色).silver(银色).teal(青色).white(白色

Java学习笔记——浅谈数据结构与Java集合框架(第二篇、Queue、Set)

江南好,何处异京华. 香散翠帘多在水,绿残红叶胜于花.无事避风沙. --<纳兰词> 诗词再好,大图不能忘 上大图: 先说说栈和队列: 栈就好比手枪的弹匣,你往里面压入子弹,最先压入的子弹就到了弹匣最底部的位置,最后压入的子弹在弹匣顶部.发射子弹的时候每次将弹匣顶部的子弹弹出发射.无法越过顶部子弹发射下面的子弹. 栈(stack)是限定仅在表尾进行插入和删除操作的线性表,LIFO 队列就跟上学那会儿排队打饭一样,但是不能加塞儿. 队列(queue)是只允许在队列一端进行插入操作,另一端进行删除操

Android 开发笔记“浅谈DDMS视图”

DDMS 的全称是Dalvik Debug Monitor Service,即Dalvik调试监控服务,是一个可视化的调试监控工具.它主要是对系统运行后台日志的监控,还有系统线程,模拟器状态的监控.此外,它还可以模拟收发短信,拨打电话和发送GPS位置信息等. 在eclipse中启动DDMS 1.在eclipse界面的右上角,点击,出现下面的界面 2.选择other,这时界面如下图所示,双击DDMS就可以启动  DDMS各部分组成的功能简介 1.Devices    可以查看到所有与DDMS连 接

[JS学习笔记]浅谈Javascript事件模型

DOM0级事件模型 element.on[type] = function(){} 兼容性:全部支持 lay1 lay2 lay3 e.target:直接触发事件的元素[IE8及以下不支持taget属性,使用e.srcElement代替] e.srcElement:直接触发事件的元素[FF不支持srcElement属性,使用e.target代替] e.currentTarget:被间接触发的元素[IE8及以下不支持currentTarget属性,使用this代替] this:同e.current

VSTO学习笔记(九)浅谈Excel内容比较

原文:VSTO学习笔记(九)浅谈Excel内容比较 说起文件内容比较,或许我们首先想到的是UltraCompare这类专业比较的软件,其功能非常强大,能够对基于文本的文件内容作出快速.准确的比较,有详细的差异报告,非常便于分析.其实,各种版本控制软件中也包含有或多或少的比较功能,如TFS.CVS.SVN等.但是如果待比较的文件不是基于文本类型的,那就无能为力了.今天我就来谈一谈Excel的比较方法及其特点,也和大家共同探讨一下,如果你有更好的方法,欢迎分享. 一.Excel的文件架构 Excel

浅谈控件(组件)制作方法一(附带一delphi导出数据到Excel的组件实例)(原创)

来自:http://blog.csdn.net/zhdwjie/article/details/1490741 ------------------------------------------------------------------- 从99年学习delphi开始,我就被它的快速开发迷上了,那时候刚接触编程,对可视化开发特别来劲,原因嘛,不外乎是比C更快的实现啦,这几年来,从delphi的C/S到三层B/S,大大小小也写过一些软件,自认为这delphi也就这么些功能吧,自从最近偶得一