数据量的大小由两个方面决定:行的宽度和数据行的数量,为了减少ETL运行的时间,可以从源数据的提取上做优化,从数据源的输入上控制数据的质量和大小,减少转换和IO。
一,减少行的宽度
1,只加载需要的数据列
在Data Flow中,源适配器允许选择加载的Table 或View,虽然有复选框,从而过滤掉不需要的数据列,但是,问题是,过滤过程发生Client,换句话说,所有的列从DB中被传递到SSIS 源适配器(产生大量的IO开销),然后在SSIS中删除选中额数据列。建议使用SQL Command,在select 子句中只加载需要的数据列。
2,在提取数据期间将数据转换为窄的数据类型
数据锐化是指将数据值转换为可以充分表示其值的最小数据类型,例如,如果有一个column,数据类型是int,值只有 0 和 1,那么将数据类型转换为bit更好,在64bit系统中,每行的长度至少减少3byte。
3,删掉字符串类型两端的空格
使用ltrim(rtrim(String_Column))
二,减少数据行数
1,使用Where条件,限制返回的数据行数
使用DateTime,row_version等字段来实现增量更新,而不是将重复的数据重复加载
2,使用Where条件,过滤无效的数据
对于一些无效的数据,可以使用where 子句直接过滤,保证进入ETL的都是有效的数据。
三,在提取数据期间
1, 解决幻数
幻数是一个用来表示未知或NULL值的值。在没有NULL的DB中,例如,Column 使用 not null 定义,幻数是必需的。
2,数据排序
在SQL Server中对数据排序,会比在SSIS中使用 sort 转换更高效。