SSIS 设计系列:

一,数据类型的选择

对于SSIS的数据类型,容易遗漏精度的是DateTime,不正确的使用DateTime,time,decimal 等数据类型,可能导致溢出或数据丢失。

1,变量和参数的时间类型(DateTime)

Variable 和 Parameter的DateTime对应 DT_DBTIMESTAMP (对应SQL Server的Datatime),格式是:yyyy-MM-dd hh:mm:ss XM,例如 “2016-05-19 5:41:32 PM”,只精确到秒。

2,转换组件

由于转换组件不能丢失精度,因此有以下三种方式:DT_DBTIMESTAMP,DT_DBTIMESTAMP,DT_DBTIMESTAMPOFFSET.

  • DT_DBTIMESTAMP 对应 SQL Server的 Datetime,格式是 "yyyy-MM-dd hh:mm:ss",精确到秒
  • DT_DBTIMESTAMP2 对应 SQL Server的 Datetime2(N),有precision,可以精确到ss.nnnnnnn
  • DT_DBTIMESTAMPOFFSET 对应 SQL Server的datetimeoffset(N),有precision,可以精确到ss.nnnnnnn

3,类型转换对性能的影响

只在必要时,进行数据类型的转换,因为每次转换,SSIS Engine都需要付出一定的代价。

如果将值转换为一个不支持的数据类型,那么将会在SSIS内部产生一个到映射数据的额外转换,最好将数据类型转换为与目标最接近的数据类型。

4,数据类型的选择

SSIS的 Data Flow需要在内存中完成大量的工作,消除了最费时的IO操作,使数据的读取,转换和加载性能飞快。由于SSIS使用内存缓存区来完成相关操作,被加载到缓冲区的行数直接和row的宽度相关,row的宽度越窄,缓冲区容纳的行数越多,被处理的数据量越大,性能越好。如果要定义大型输入源的数据类型,必须慎重挑选数据类型,使用最接近的大小和精度存储和转换数据,既能使row的宽度不至于太宽,也能避免过多的数据类型转换。

二,利用数据流

数据流利用内存来缓冲数据,并在内存中处理数据转换,由于内存的访问速度是非常快的,所以SSIS数据流转换性能是非常高效的。SSIS Engine将数据分批加载到内存中,当Data Flow将一批新的数据加载到内存时,下游转换组件会对已经加载到内存中数据进行处理,同时,目的组件会将处理完成的数据加载到Target Table中,数据的读取,转换和加载同时进行,这就是数据流的优势。

1,利用数据流,能够减少暂存和昂贵的disk IO 操作

在大量数据的ETL系统中,Disk IO是系统性能的bottlenect。相比内存 RAM,Disk IO的读取和写入速度非常慢,将内存缓冲区中的数据写入暂存表,再从暂存表中读取数据到内存中,不仅成倍增加了Disk IO,而且限制了数据流的并发处理能力。请记住,使用暂存表的场景是:ETL系统中存在大量数据的更新操作。这是由于Data Flow 没有基于集合的更新转换组件,OLEDB Command 转换组件是逐行对数据进行更新操作,使用暂存表,能够充分利用RDBMS对数据进行基于集合的更新操作的优势。如果ETL系统不存在大量数据的更新操作,请选择使用数据流来处理数据。

2,利用数据流,减少对RDBMS的依赖

使用Data Flow转换组件来联接和清洗数据是十分高效的,这是因为,数据的读取,转换和加载同时进行。RDBMS对数据的处理是原子性的,在数据被处理完成之前,是不能被其他SQL语句处理的,相反,数据流可以并行地处理数据的提取,清洗,联接和写入,因此,充分利用数据流的并发处理优势,会使数据整体的处理时间大幅减少。

3,利用RDBMS处理数据源

在使用Source适配器获取数据时,利用数据库的order by 子句进行排序,将会比Sort 转换更有效率;对于源是多表联接的查询语句,使用RDBMS获取数据将会更快。

三,并发设计

最大的并发程度,是由服务器的CPU数量确定的,在同一时间执行的线程的最大数量是CPU的个数,一个CPU在某一时刻,只有一个Process处于Running状态,所以最大并发度不要超过CPU的个数。

通过以下两个属性控制ETL执行的并发度:

  • MaxConcurrentExecutalbes :Package的属性,用于指定Package中可以并发执行的可执行文件的最大数量;
  • EngineThreads :数据流Task的属性,用以确定数据流Task中各个转换组件同时运行的最大线程数,每一个转换组件最多使用一个Thread

1,利用优先约束来并发处理数据

Data Flow Task 和 Data Flow Task 1 是并发执行的,而 Data Flow Task2 必须等到 Data Flow Task 和 Data Flow Task 1 执行完成之后,才开始执行。

 2,从同一个表中并发获取数据

如何从一个数据表中并发处理数据,设计思路是把一个表中的数据平均分成N份,各个数据流之间并发处理。

例如分为3份,可以使用%3,将数据分为三个子数据流并发处理数据。

select *
from dbo.SourceTable
where checksum(table_column)%3=0 select *
from dbo.SourceTable
where checksum(table_column)%3=1 select *
from dbo.SourceTable
where checksum(table_column)%3=2

Package设计1:选择数据类型、暂存数据和并发的更多相关文章

  1. Package 设计3:数据源的提取和使用暂存

    SSIS 设计系列: Package设计1:选择数据类型.暂存数据和并发 Package设计2:增量更新 Package 设计3:数据源的提取和使用暂存 在使用SSIS Package处理海量数据时, ...

  2. Package设计2:增量更新

    SSIS 设计系列: Package设计1:选择数据类型.暂存数据和并发 Package设计2:增量更新 Package 设计3:数据源的提取和使用暂存 一般来说,ETL实现增量更新的方式有两种,第一 ...

  3. SSIS Design5:使用暂存

    以数据流的方式来设计Package,将核心数据处理移动到数据流中,一般情况下,能够减少临时表的创建,获得较高的处理性能,在某些情况下,使用暂存表(staging table)能够优化package设计 ...

  4. ASP.NET状态管理之四(暂存状态HttpContext.Items)

    ASP.NET提供一个类System.Web.HttpContext ,用来表示上下文,此对象有一个属性Items 暂存状态就是利用HttpContext.Items属性来存放数据 MSDN中Http ...

  5. 【Git】(1)---工作区、暂存区、版本库、远程仓库

    工作区.暂存区.版本库.远程仓库 一.概念 1.四个工作区域 Git本地有四个工作区域:工作目录(Working Directory).暂存区(Stage/Index).资源库(Repository或 ...

  6. Photoshop入门教程(二):暂存盘设置与标尺设置

    新建文档之后大家就可以对图像进行编辑.在对图像进行编辑之前,先来了解一下如何查看图像的一些基本信息.在软件左下角,会有这样的信息显示窗口. 1窗口表示当前图像显示比例,200%代表当前为放大两倍显示. ...

  7. innodb是如何存数据的?yyds

    前言 如果你使用过mysql数据库,对它的存储引擎:innodb,一定不会感到陌生. 众所周知,在mysql8以前,默认的存储引擎是:myslam.但mysql8之后,默认的存储引擎已经变成了:inn ...

  8. Git技法:.gitignore、移除暂存与撤销修改

    1. .gitignore常见项目添加 1.1 .gitignore模板 .gitignore针对每个语言都有对应的模板,在GitHub创建项目时就可以选择(你可以在GitHub提供的.gitigno ...

  9. photoshop:无法完成请求 因为暂存盘已满

    今天photoshop打开一个问题,提醒:无法完成请求因为暂存盘已满 不用担心这个问题很好解决可能是你做的图比较大并不需要清理C盘空间 选择:编辑→首选项→暂存盘 设置第一暂存盘为D盘或E盘 总之 第 ...

随机推荐

  1. oracle PL/SQL调用Java生成Excel

    现在有个需求,  要求编写oracle存储过程生成Excel文件到指定目录,  但是oracle自己的API貌似不太给力,  所以只能通过另一种更强大的语言来实现了  ——Java.有一个Java框架 ...

  2. C# 所有特性,特性所在命名空间,那些命名空间拥有特性类

    文章持续补充中 特性并不是集中在某一命名空间中,而是不同的特性在不同的命名空间下,特性是某一命名空间下提供的语法糖. 有哪些命名空间提供特性: 命名空间 描述 Microsoft.Build.Fram ...

  3. [EffectiveC++]item32:确定你的public继承模塑出is-a关系

  4. ZT eoe android4.2 Bluetooth记录01-结构和代码分布

    android4.2 Bluetooth记录01-结构和代码分布 作者:cnhua5更新于 08月21日访问(697)评论(2) 在android4.2中,Google更换了android的蓝牙协议栈 ...

  5. pyspark视频

    在一个网课上买了一个pyspark视频,贼贵,本来是想把视频解压密码记下来分享出来的,可是其实用的是EVPLAYER,一机一码,一共只有3个激活码 这里我分享视频链接,百度网盘: https://pa ...

  6. idea html热部署

    IDEA SpringBoot 热部署+html修改无需make自动刷新 收藏 HeyS1 发表于 3个月前 阅读 310 收藏 2 点赞 0 评论 0 特邀IBM大咖的主题沙龙,5月20日·北京·3 ...

  7. JS相关知识点总结

    一.获取元素方法 1.document.getElementById("元素id号"); 可以使用内置对象document上的getElementById方法来获取页面上设置了id ...

  8. ECharts 定制 label 样式

    起因 实现对 label 的样式定制,自定义字体颜色.大小等属性:效果如下图 实现   itemStyle: {   normal: {   color: '#f7ba0e',   label: { ...

  9. jQuery实现滚动时动态加载页面内容

    有些网站的网页内容不是一次性加载完毕的,而是在鼠标向下滚动时动态加载的,这是怎么做到的呢?看下面代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...

  10. C++中重载决议与可访问性检查的顺序

    http://blog.csdn.net/starlee/article/details/1406781 对于如下的类: class ClxECS{public:    double Test(dou ...