开篇介绍

这个问题来自于 天善BI社区,看了一下比较有意思,因为我自己认为在 SSIS中处理各种类型文件的经验还比较丰富(有一年的时间几乎所有ETL都跟文件相关),但是这个问题确实之前没有特别考虑过。研究了一下,找到了解决的方法,赶紧记录下来。

简单描述一下这个问题,如果我们的 SOURCE 是直接从表里面查询,然后输出到文件的时候,查询语句中列的顺序就是输出文件列的顺序(逗号分隔的文件)。但是如果使用变量查询语句,那么这个输出顺序和查询列的顺序就会不一致了!如果我们的文件格式已经提前定义好了,那么这个就很不好调整了。除非手动一列一列的在文件管理器中删除所有列,然后重新建立,但这样会非常耗费时间和精力,并且非常容易出错。

解决过程

先看看问题,再来看比较简单的解决方案。

测试数据源查询语句和结果 -

如果是直接查询的话,文件输出列的顺序没有任何问题和影响,下面是我的查询语句,和在 SQL Server 中的是一样的。

OLE DB Source 里的顺序与查询语句一致。

向下关联一个文件输出并在它的连接管理器中可以看到这些顺序都是一样的,不需要做出任何调整。

最后的输出结果也是一样的,列的输出顺序都一致,没有问题。

现在我们使用变量来保存这个查询语句 -

在数据源中使用这个变量作为查询语句来查询 -

切换到 Columns 的时候发现非常诡异的地方出来了,整个列的输出顺序和查询的顺序不一样了。并且更为诡异的问题是,同样的两个变量语句,我反复删除试建了好几次。第一个的顺序和这个还不一样,第二个正常,这是第三个顺序。并且在最开始只测试几个字段的时候,这个顺序一直是正常的,现在看到的是我增加了好几个列才看到的。关于为什么有这个变化,或者与写没写 Top 10 我还真的没有办法重现刚才的第一个顺序,总之问题出现了。

这样输出的时候,和文件管理器关联之后的顺序。以前的做法是先删除所有的,然后重新一项一项添加回去,并且还要注意数据类型都要记下来。

但是这样确实存在一个问题,如果我们的输出列比较复杂,要不一个一个列的类型顺序记载下来会非常花费时间和精力。可以在这里调整,但是总觉得是一个效率比较低的选择。

输出的结果果然如此,顺序和期望的不一致!

解决的方法虽然也需要人工手动操作,但是比起在文件管理器中删除新建要容易的多,回到数据源的列,先取消全部可用的列。

然后对照查询语句列的顺序,依次选中需要的列,比如第一个先勾选 BusinessEntityID,第二个再勾选 NationalIDNumber,后面根据需要按顺序依次勾选。

按顺序选择完成之后,这样所有的列又按照查询顺序输出了。

需要重新建立新的文件链接管理器,这样可以避免之前的缓存影响,再来看管理器中的列顺序也是对应一致的,没有问题了。

输出结果也是一致的了!

写到这里我也仍然怀疑,如果直接用表难道就一直没有出现这个现象吗,还是没有碰到? 这个确实记不清了,但是从这个问题反而使得另外的一个问题变得很清晰,也就是无论输入源的查询顺序是怎么样的,我们完全可以控制它的输出顺序。因为有的时候可能会碰到第三方直接给你一个视图或者存储过程,输出的就是这样的顺序,但是下游文件格式已经固定了,那么就可以通过这种方式来完成自定义的顺序向下输出了。

更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 如果觉得这篇文章看了对您有帮助,请帮助推荐,以方便他人在 BIWORK 博客推荐栏中快速看到这些文章。

微软BI 之SSIS 系列 - 变量查询语句引起列输出顺序不一致的解决方法的更多相关文章

  1. 微软BI 之SSIS 系列 - 再谈Lookup 缓存

    开篇介绍 关于 Lookup 的缓存其实在之前的一篇文章中已经提到了 微软BI 之SSIS 系列 - Lookup 组件的使用与它的几种缓存模式 - Full Cache, Partial Cache ...

  2. 微软BI 之SSIS 系列 - 使用 Script Component Destination 和 ADO.NET 解析不规则文件并插入数据

    开篇介绍 这一篇文章是 微软BI 之SSIS 系列 - 带有 Header 和 Trailer 的不规则的平面文件输出处理技巧 的续篇,在上篇文章中介绍到了对于这种不规则文件输出的处理方式.比如下图中 ...

  3. 微软BI 之SSIS 系列 - 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式

    开篇介绍 关于 Slowly Changing Dimension 缓慢渐变维度的理论概念请参看 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型 ...

  4. 微软BI 之SSIS 系列 - MVP 们也不解的 Scrip Task 脚本任务中的一个 Bug

    开篇介绍 前些天自己在整理 SSIS 2012 资料的时候发现了一个功能设计上的疑似Bug,在 Script Task 中是可以给只读列表中的变量赋值.我记得以前在 2008 的版本中为了弄明白这个配 ...

  5. 微软BI 之SSIS 系列 - 使用 Script Task 访问非 Windows 验证下的 SMTP 服务器发送邮件

    原文:微软BI 之SSIS 系列 - 使用 Script Task 访问非 Windows 验证下的 SMTP 服务器发送邮件 开篇介绍 大多数情况下我们的 SSIS 包都会配置在 SQL Agent ...

  6. 微软BI 之SSIS 系列 - Lookup 中的字符串比较大小写处理 Case Sensitive or Insensitive

    开篇介绍 前几天碰到这样的一个问题,在 Lookup 中如何设置大小写不敏感比较,即如何在 Lookup 中的字符串比较时不区分大小写? 实际上就这个问题已经有很多人提给微软了,但是得到的结果就是 C ...

  7. 微软BI 之SSIS 系列 - 带有 Header 和 Trailer 的不规则的平面文件输出处理技巧

    案例背景与需求介绍 之前做过一个美国的医疗保险的项目,保险提供商有大量的文件需要发送给比如像银行,医疗协会,第三方服务商等.比如像与银行交互的 ACH 文件,传送给协会的 ACH Credit 等文件 ...

  8. 微软BI 之SSIS 系列 - 在 SSIS 中导入 ACCESS 数据库中的数据

    开篇介绍 来自 天善学院 一个学员的问题,如何在 SSIS 中导入 ACCESS 数据表中的数据. 在 SSIS 中导入 ACCESS 数据库数据 ACCESS 实际上是一个轻量级的桌面数据库,直接使 ...

  9. 微软BI 之SSIS 系列 - Execute SQL Task 中的 Single Row 与 Full Result Set 的处理技巧

    开篇介绍 Execute SQL Task 这个控件在微软BI ETL 项目中使用的频率还是非常高的,也是大部分入门 SSIS 初学者最早接触到的几个控制流控件. 我们通常使用 Execute SQL ...

随机推荐

  1. python 全栈开发,Day49(超链接导航栏案例,background,定位,z-index,iconfont使用)

    昨日内容回顾 浮动:是css中布局最多的一个属性 有浮动,一定要清除浮动 浮动不是一个元素单独浮动,要浮动一起浮动 清除浮动四种方式: 1.给父盒子添加高度,一般导航栏 2.给浮动元素后面加一个空的块 ...

  2. 《剑指offer》-数组乘积,不使用除法

    题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1].不能使用除法. ...

  3. Spring Boot自动扫描

    进行Spring Boot和Mybatis进行整合的时候,Spring Boot注解扫描的时候无法扫描到Application类的以外的包下面的注解,如下图: App就是Application类,下图 ...

  4. POJ 3262 Protecting the Flowers 【贪心】

    题意:有n个牛在FJ的花园乱吃.所以FJ要赶他们回牛棚.每个牛在被赶走之前每秒吃Di个花朵.赶它回去FJ来回要花的总时间是Ti×2.在被赶走的过程中,被赶走的牛就不能乱吃 思路: 先赶走破坏力大的牛假 ...

  5. File的方法

    1.介绍 file 对象使用 open 函数来创建. 2.常用的方法

  6. 关于 C++ STL

    一.STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R ...

  7. Android 之 tools:context和tools:ignore两个属性的作用

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...

  8. ImportError: cannot import name cbook

    Faster RCNN训练的时候,出现错误: from matplotlib import path, transforms File , in <module> from . impor ...

  9. c# 深入探索之CLR

    概念: CLR : 公共语言运行时(Common Language Runtime) 是一个可由多种编程语言使用的"运行时",它负责资源管理(内存分配和垃圾收集等),并保证应用和底 ...

  10. springboot项目接入配置中心,实现@ConfigurationProperties的bean属性刷新方案

    前言 配置中心,通过key=value的形式存储环境变量.配置中心的属性做了修改,项目中可以通过配置中心的依赖(sdk)立即感知到.需要做的就是如何在属性发生变化时,改变带有@Configuratio ...