Order By的排序方式与SSIS(集成服务)中的Sort Transformation方式不同
技术问答
210 人阅读
|
0 人回复
|
2023-09-12
|
使用SSIS因为用了两个OLE DB因此,加入时遇到了问题。
0 D+ |; G) Z. ]4 p& E5 Y我发现,如果我按顺序使用排序和排序转换,会产生不同的结果,导致产品数据合并不正确
" k3 o. b# V$ R9 n" T1 k$ |* s例子:, I6 i; L% x P( D+ a1 Y
表格1- Z; F. D k& d, s9 l- n
Id int PKJoinKey varchar(25)OriginalValue varchar(25)表25 T( l& T# O" q1 Q0 b) [
Id int PKJoinKey varchar(25)ExpectedValue varchar(25)SSIS程序流程如下:; C. n$ v" Z+ M
[ol]从表1中选择OLE数据源 2 X& x4 j1 U v* M
按JoinKey升序然后按ExpectedValue升序对Table1.排序转换2 v- z+ x# y) h3 P: a
OLE数据源从Table2中选择按JoinKey asc排序( h1 t% e# y1 o* H, v$ T4 |. B. n
在JoinKey上将Table1和Table2.并联转换(左外连接)OriginalValue和ExpectedValue [/ol]这样做-我终于得到了一些数据集ExpectedValue空值。直接在SQL执行查询将返回预期值。# Y7 m2 U. e ?* | e3 v7 L
如果在步骤5之前添加排序转换,则正确添加ExpectedValue,但是SSIS发出警告“验证警告。数据已经按照指定的顺序进行了排序,因此可以删除该转换”。8 x( n6 u* p: x
两个问题:$ s3 {! S* b9 ^" @. ]. z9 t
[ol]不应该使用order by和sort转换产生相同的结果吗?8 E3 k7 l) ?+ b- ]8 Q' T: B: S
为什么在实际需要排序的时候SSIS会显示警告?[/ol] + @0 W8 p( j" y! Y
解决方案: " [" @* H3 r j' y2 E( Y6 b# p
我以前遇到过这种情况,答案是否定的,在源SQL中使用ORDER
4 w! m& V k8 j! j0 c: |- hBY排名并不总是和在一起Dataflow在任务中使用排序转换产生相同的结果。一些特殊(非字母数字)字符(可能是NULLS)处理方法不同。我不记得确切了。我不记得找到任何关于这个的文件(这是几年前的事了),但我通过自己的测试证实了这一点。
7 x; _/ ]1 X, C( F+ z7 t我的结论是,在数据流中JOIN,请确保对JOIN两面都采用相同的排序方法。
) P# e# d: `- i& a( M至于第二个问题,SSIS具有数据源IsSorted属性。如果将DataSource上的IsSorted属性设置为true,如果试图实施排序转换,它只知道IsSorted为true,而且会发出不需要排序的警告。它不知道是否需要排序转换来匹配使用排序转换的另一个源。. L* y0 V- H- ~& l" i0 H
如果要在JOIN排序转换用于两侧,请转换源IsSorted属性设置为false。 |
|
|
|
|
|