ETL使用随记001——保留特定小数位的数据导出

在最近的工作中有需要自动导出数据到CSV文件的情况,这次有点特殊需求的是导出的CSV文件用EXCEL打开后会发现有科学计数法格式的情况,故而需要按特定的小数位导出。

分析整个DATA FLOW TASK,源数据为一个SQL SERVER查询,其结果作为source,目的为文本文件(CSV格式)。

本以为是个简单的问题,所以最简便的方式为从数据源固定数据的小数位,所以通过强制类型转换为decimal(38,9)。经测试时发现结果不对。

分析整个工作流:

1.我们从后往前来追溯问题,从目的(Flat File Destination)来看,文本指向正常的文件,通过检查连接管理器中的目的文件的列属性(Advanced),可以看到该文件的列数据类型为decimal,所以是正确的

2,但此时并不能确认问题不在目的,需要进一步检查目的,选择高级编辑模式,可以查看input and Output properties,可以看到目的的external columns中value列的类型与连接器里的一致,而它的input列的类型却为DT_R8即double型。也就是说源的output引出来的列的类型mapping到目的是double型。造成了问题所在。

3.所以我们进一步检查源,选择高级编辑模式,可以类似的查询输入和输出情况,可以清晰的看到其output默认数值时选用了double型,改正即OK了。

 

综上所述,我们有以下总结:

1、对于在dataflow task中的数据类型不匹配的问题,可以采用逐层检查的方式确定问题所在。

2、在导出到文本时数据类型会以SQL默认选择的数值类型导出,需要仔细检查是否匹配。

3、数据流组件都有输入和输出属性,这个内部转换是隐蔽的,容易被忽略,如需要特殊设置请检查该处设置。

4、尽量在输入和输出地方设置成一致的数据类型,以避免逐层转换的类型带来的性能代价。

 

记之。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值