SSIS入门实验大全_实验样例_第1页
SSIS入门实验大全_实验样例_第2页
SSIS入门实验大全_实验样例_第3页
SSIS入门实验大全_实验样例_第4页
SSIS入门实验大全_实验样例_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 1 页 / 共 50 页新建新建 IS 项目项目.3新建程序包模板(建立数据库连接、变量)新建程序包模板(建立数据库连接、变量).3依据模板包创建子程序包依据模板包创建子程序包.5维度包:新建维度包:新建”执行执行 SQL 任务任务”-删除旧数据并创建一个空行删除旧数据并创建一个空行.6维度包:新建维度包:新建”数据流任务数据流任务”_数据源数据源.7维度包:新建维度包:新建”数据流任务数据流任务”_多播多播.8维度包:新建维度包:新建”数据流任务数据流任务”_行记数行记数.8维度包:新建维度包:新建”数据流任务数据流任务”_原始文件目标原始文件目标.9维度包:新建维度包:新建”数据流任务

2、数据流任务”_派生列派生列.10维度包:新建维度包:新建”数据流任务数据流任务”_排序排序.11维度包:新建维度包:新建”数据流任务数据流任务”_条件性拆分条件性拆分.12维度包:新建维度包:新建”数据流任务数据流任务”_合并合并.13维度包:新建维度包:新建”数据流任务数据流任务”_UNION ALL.14维度包:新建维度包:新建”数据流任务数据流任务”_合并联接合并联接.15维度包:新建维度包:新建”数据流任务数据流任务”_SQLSERVER 目标目标/OLE DB 目标目标.16维度包:调试维度包:调试 SSIS 程序包程序包_数据查看器数据查看器.18建立主维度包建立主维度包.18事实

3、包:禁用约束并清除事实表事实包:禁用约束并清除事实表.19事实包:删除并重建中间表事实包:删除并重建中间表.20事实包:包内流程分组事实包:包内流程分组.21事实包:初始化审核表(事实包:初始化审核表(ADO.NET 连接的使用注意事项)连接的使用注意事项).22第 2 页 / 共 50 页事实包:提取源数据到中间表事实包:提取源数据到中间表.22事实包:对源数据进行聚合分组事实包:对源数据进行聚合分组.23事实包:将聚合后部分数据记入事实包:将聚合后部分数据记入“记录集目标记录集目标”.24事实包:在数据流中利用事实包:在数据流中利用“派生列派生列”添加变量列添加变量列.25事实包:用事实包

4、:用 OLE DB 命令命令 组件更新审核表组件更新审核表.26事实包:根据审核表记录的指标值判断是否发出警告事实包:根据审核表记录的指标值判断是否发出警告.27事实包:根据变量值计算表达式决定是否发送警报事实包:根据变量值计算表达式决定是否发送警报.29事实包:正式从中间表加载数据到事实表事实包:正式从中间表加载数据到事实表.30事实包:加载完成以后更新审核表事实包:加载完成以后更新审核表.34事实包:新建事实包:新建“收缩数据库收缩数据库”任务任务.35事实包:从事实包:从“EXCEL”数据源提取销售计划数据源提取销售计划.36载入历史数据前:删除索引结束后再重建载入历史数据前:删除索引结

5、束后再重建.36开始增量载入事实表:通过变量控制提取日期范围开始增量载入事实表:通过变量控制提取日期范围.38重新建立事实表的外键约束重新建立事实表的外键约束.39运行并调试运行并调试 IS 包包.40加密加密 IS 包包.40生成并部署生成并部署 IS 包包.41安装部署安装部署 IS 包文件包文件.42执行执行 IS 包文件的包文件的 3 种方式种方式.45第 3 页 / 共 50 页新建新建 IS 项目项目新建一个新建一个 Integration Services 项目项目 新建程序包模板(建立数据库连接、变量)新建程序包模板(建立数据库连接、变量)首先建立一个首先建立一个.dtsx 的

6、模板程序包,接下来的所有程序包可在此基础上复制建立。的模板程序包,接下来的所有程序包可在此基础上复制建立。新建数据源:右击数据源选择新建。在弹出窗口选择新建新建数据源:右击数据源选择新建。在弹出窗口选择新建第 4 页 / 共 50 页对于如果连接对于如果连接 SQLSERVER 数据库,可以选择使用数据库,可以选择使用 ADO.NET 连接,相比连接,相比 OLEDB 性能要好一些,但是可设置选性能要好一些,但是可设置选项也较少。使用项也较少。使用 ADO.NET 连接时需要注意是否返回结果集的相关设置。如果需要执行连接时需要注意是否返回结果集的相关设置。如果需要执行 SQL 后并返回结果,则

7、需后并返回结果,则需要使用要使用 ADO.NET 连接。连接。在窗口下方的在窗口下方的“连接管理器连接管理器”右键选择右键选择“从数据源新建连接从数据源新建连接” 结果如下图:结果如下图:在变量页签新增变量在变量页签新增变量“RowCount”等多个、类型等多个、类型 INT32,初始值为,初始值为 0新增开始日期、结束日期变量,在数据提取时可以作为限制源数据的条件使用。新增开始日期、结束日期变量,在数据提取时可以作为限制源数据的条件使用。其它变量在导入维度表、事实表作为审核监测使用其它变量在导入维度表、事实表作为审核监测使用新增变量时,一定要注意新增变量时,一定要注意“作用域作用域”选项,建

8、议在当前包已全部保存的情况下新建变量。选项,建议在当前包已全部保存的情况下新建变量。第 5 页 / 共 50 页新建数据源视图:方便直观的浏览源、目的中都有哪些表参与了新建数据源视图:方便直观的浏览源、目的中都有哪些表参与了 ETL,可按表进行分类。,可按表进行分类。依据模板包创建子程序包依据模板包创建子程序包在解决方案管理员,右击根路径在解决方案管理员,右击根路径添加添加现有包,如下图选择后确定现有包,如下图选择后确定系统将按模板生成一个新建,对其重命名后打开。系统将按模板生成一个新建,对其重命名后打开。第 6 页 / 共 50 页维度包:新建维度包:新建”执行执行 SQL 任务任务”-删除

9、旧数据并创建一个空行删除旧数据并创建一个空行建立一个建立一个“执行执行 SQL 任务任务”的组件,用于删除维度表的历史数据。的组件,用于删除维度表的历史数据。注意:由于主外键的原因,删除时要先删除有外键约束的注意:由于主外键的原因,删除时要先删除有外键约束的“事实表事实表” ,再删除主键约束的,再删除主键约束的“维度表维度表” 。Connection 选项:通过选项:通过 新建新建 选择此数据仓库连接选择此数据仓库连接SQLSourceType 选项:选择直接输入选项:选择直接输入SQLStatement 选项:输入如下选项:输入如下 DELETE 语句语句BypassPrepare 选项:设

10、置为选项:设置为 Falsetruncate table 门店门店考虑到正式应用时需要启用外键,到时将不能再用考虑到正式应用时需要启用外键,到时将不能再用 Truncate,可以在此使用如下,可以在此使用如下 Delete 语句代替语句代替 Truncate:delete from test dbcc checkident(test,reseed,0)注意:前提是必须已停止了外键主键的全部约束,才能正常执行该句。注意:前提是必须已停止了外键主键的全部约束,才能正常执行该句。SET IDENTITY_INSERT 门店门店 ONINSERT 门店门店(PK_门店门店,编码编码,名称名称,类型类型

11、,区域区域,业态业态)Values (-1,NULL,未知未知,未知未知,未知未知,未知未知)SET IDENTITY_INSERT 门店门店 OFF第 7 页 / 共 50 页维度包:新建维度包:新建”数据流任务数据流任务”_数据源数据源新建一个新建一个“数据流任务数据流任务” ,用于抽取,用于抽取“维度表维度表”数据。数据。首先在数据流源中选择添加首先在数据流源中选择添加“OLE DB 源源” ,重命名后双击编辑,选择,重命名后双击编辑,选择“SQL 命令命令”的访问模式相对其它模式性能的访问模式相对其它模式性能较好,更灵活。如果选择较好,更灵活。如果选择“表或视图表或视图”则将加载全部数

12、据,也可通过则将加载全部数据,也可通过“生成查询生成查询”按钮来点击生成按钮来点击生成 SQL 语句。语句。注意:建议的作法是写最简单的注意:建议的作法是写最简单的 SQL 语句来提取数据,各种变化转换在语句来提取数据,各种变化转换在 IS 中进行变化较好。随机应变吧。中进行变化较好。随机应变吧。如果在上图中单击左侧的如果在上图中单击左侧的“列列”时报如下信息:时报如下信息:则设置导出组件块的属性值则设置导出组件块的属性值 AlwaysUseDefaultCodePage 为为 True 即可即可第 8 页 / 共 50 页维度包:新建维度包:新建”数据流任务数据流任务”_多播多播如果数据源提

13、取出来后,需要全部数据各自分支成多流,则可以使用如果数据源提取出来后,需要全部数据各自分支成多流,则可以使用“多播多播”组件组件维度包:新建维度包:新建”数据流任务数据流任务”_行记数行记数如果需要统计从数据源提取到的总记录数,如写到变量中,可以直接使用如果需要统计从数据源提取到的总记录数,如写到变量中,可以直接使用“行记数行记数”组件,只需要在组件,只需要在VariableName 选项选择预先定义好的变量就好了。选项选择预先定义好的变量就好了。第 9 页 / 共 50 页维度包:新建维度包:新建”数据流任务数据流任务”_原始文件目标原始文件目标原始文件和文本文件有区别,原始文件是只有原始文

14、件和文本文件有区别,原始文件是只有 IS 可以读懂的文件,性能相比平面文件要好一些。可以读懂的文件,性能相比平面文件要好一些。首先指定路径并设定好原始文件名首先指定路径并设定好原始文件名*.raw,并选择,并选择“始终创建始终创建”然后在然后在“输入列输入列”页签中选择要输出的列后,确定关闭页签中选择要输出的列后,确定关闭第 10 页 / 共 50 页维度包:新建维度包:新建”数据流任务数据流任务”_派生列派生列数据源下来,需要针对源查询出来的各列进行清洗和处理工作,包括外接字段类的数据源下来,需要针对源查询出来的各列进行清洗和处理工作,包括外接字段类的 NULL 值替换、字符串类字段值替换、

15、字符串类字段的空格删除、名称字段的合并、字段类型的变换、计算列等等。如下图:的空格删除、名称字段的合并、字段类型的变换、计算列等等。如下图:ISNULL(POSTYPE) ? “未知未知” :POSTYPE 代表如果代表如果 POSTYPE 为空则替换为为空则替换为“未知未知”否则保留原值否则保留原值TRIM(POSNAME) 去除字符串的前后空格去除字符串的前后空格LastName + , + FirstName 代表合并两个字段代表合并两个字段ISNULL(Status) ? Unknown : Status = M ? Married : Status = S ? Single : Un

16、known 多级判断多级判断DepartmentEndDate = (DT_DBDATE)12/31/9999 ? Y : N 日期转换日期转换“y” 添加一个新列并赋予初始值添加一个新列并赋予初始值如果只转换数据类型,可以选择使用如果只转换数据类型,可以选择使用“数据转换数据转换”如果只转换字符串的长度或大小写,可选择如果只转换字符串的长度或大小写,可选择“字符映射表字符映射表”第 11 页 / 共 50 页维度包:新建维度包:新建”数据流任务数据流任务”_排序排序如果需要对提取的数据源数据进行按指定规则“排序” ,或制定复杂的排序规则。则使用该组件。第 12 页 / 共 50 页维度包:新

17、建维度包:新建”数据流任务数据流任务”_条件性拆分条件性拆分如果需要根据源数据的某字段,按其值的不同采取不同的处理方式,即将同一数据流分为若干分流进行分别处理。如下根据会员的身份证字段分为四组:NULL 值、15 位长度、18 位长度、默认其它确定后,分别制作其下各个组件,在连接时会弹出选择各分支的小窗口:确定后,分别制作其下各个组件,在连接时会弹出选择各分支的小窗口:例例 1:对旧版身份证使用:对旧版身份证使用“派生列派生列”转换转换第 13 页 / 共 50 页维度包:新建维度包:新建”数据流任务数据流任务”_合并合并如果想将同样数据内容的分支合并到一起,可以使用如果想将同样数据内容的分支

18、合并到一起,可以使用“合并合并”组件,但该组件可以允许两个输入,且需要排序。组件,但该组件可以允许两个输入,且需要排序。如果超过两个输入可以使用如果超过两个输入可以使用 Union All 组件组件第 14 页 / 共 50 页维度包:新建维度包:新建”数据流任务数据流任务”_Union All不限制排序,且可以有超过不限制排序,且可以有超过 2 个以上的输入进行合并个以上的输入进行合并第 15 页 / 共 50 页维度包:新建维度包:新建”数据流任务数据流任务”_合并联接合并联接如果当前表需要连接(内连接、左连接、全部连接)其它表,则可以使用如果当前表需要连接(内连接、左连接、全部连接)其它

19、表,则可以使用“合并联接合并联接”组件,该组件只允许两个组件,该组件只允许两个输入,而且必须是经过排序的。输入,而且必须是经过排序的。首先要确认两个输入的首先要确认两个输入的 IsSorted 属性是否为属性是否为 True,右键选择一个输入选择,右键选择一个输入选择“显示高级编辑器显示高级编辑器” ,在如下图的位置,在如下图的位置设置属性为设置属性为 True第 16 页 / 共 50 页另一输入源,可以是另一个另一输入源,可以是另一个“源适配器源适配器”或者其它。或者其它。维度包:新建维度包:新建”数据流任务数据流任务”_SqlServer 目标目标/OLE DB 目标目标选择添加一个选择

20、添加一个“SqlServer 目标目标” ,拖动源的绿色箭头至目标上,重命名后双击编辑并完成映射。,拖动源的绿色箭头至目标上,重命名后双击编辑并完成映射。注意:如果导入注意:如果导入目标是目标是 SqlServer 数据库则选择数据库则选择“SqlServer 目标目标”相比相比“OLE DB 目标目标”性能要好,但是性能要好,但是 SQLserver 目标没有再目标没有再向下的输出箭头了,也缺少导出数据批量设置。如果导出以后还有下一步,或者数据量较大,则应使用向下的输出箭头了,也缺少导出数据批量设置。如果导出以后还有下一步,或者数据量较大,则应使用 OLEDB目标适配器。目标适配器。如果是空

21、表加载、无索引表加载,可以选择使用如果是空表加载、无索引表加载,可以选择使用“快速加载快速加载” ,如下图所示:,如下图所示:第 17 页 / 共 50 页针对数据加载到目标表时,出现错误的错误处理,可以如下图所示设置针对数据加载到目标表时,出现错误的错误处理,可以如下图所示设置 OLEDB 目标适配器的目标适配器的“错误输出错误输出” ,设置,设置错误为错误为“重定向行重定向行” ,然后进行错误行数写入变量、最终写入原始文件。如下图,然后进行错误行数写入变量、最终写入原始文件。如下图第 18 页 / 共 50 页维度包:调试维度包:调试 SSIS 程序包程序包_数据查看器数据查看器 在需要查

22、看的节点连接上,右击选择“数据查看器” ,在弹出窗口添加一个“网格”查看器,可以在运行到该环节时自动暂停并在弹出窗口显示所导出的详细数据。调试成功后,按上述步骤依次制作各个独立的维度子程序包。调试成功后,按上述步骤依次制作各个独立的维度子程序包。建立主调度包建立主调度包该包主要用来按顺序依次运行各分包文件,首先要禁用各事实表的约束,然后删除各事实表数据。该包主要用来按顺序依次运行各分包文件,首先要禁用各事实表的约束,然后删除各事实表数据。然后通过然后通过“执行包任务执行包任务”组件按照分包的优先级顺序进行排列。组件按照分包的优先级顺序进行排列。在在 Location 中选择中选择“文件系统文件

23、系统” ,在,在 Connection 中选择中选择“新建连接新建连接”在弹出窗口找到在弹出窗口找到*.dtsx 文件,如果当前分包文件,如果当前分包第 19 页 / 共 50 页对应数据较小则对应数据较小则 ExecuteOutProcess 设置为设置为 False 否则为否则为 True事实包:禁用约束并清除事实表事实包:禁用约束并清除事实表在调试包、历史数据初始化时可以先禁用事实表的全部约束条件,然后清空事实表后作快速加载在调试包、历史数据初始化时可以先禁用事实表的全部约束条件,然后清空事实表后作快速加载第 20 页 / 共 50 页参考语句:参考语句:ALTER Table 销售销售

24、_付款方式付款方式 NOCHECK CONSTRAINT ALLTRUNCATE TABLE 销售销售_付款方式付款方式为增强灵活性,可以使用文本连接的方式进行删除,方便日后用户修改,如下图所示:为增强灵活性,可以使用文本连接的方式进行删除,方便日后用户修改,如下图所示:事实包:删除并重建中间表事实包:删除并重建中间表建立提取中间表的好处是即减轻了源系统的压力,又可以转换失败等情况下检查数据并重复导入而不影响源系统。建立提取中间表的好处是即减轻了源系统的压力,又可以转换失败等情况下检查数据并重复导入而不影响源系统。使用中间表的原则是用最简化的语句从源系统中提取数据出来,复杂的转换在使用中间表的

25、原则是用最简化的语句从源系统中提取数据出来,复杂的转换在 ETL 过程中进行。过程中进行。第 21 页 / 共 50 页建表的脚本可以先在建表的脚本可以先在 SQLServer 中建好表,然后导出建表脚本,并使用中建好表,然后导出建表脚本,并使用“执行执行 SQL 任务任务”组件:组件:参考参考 SQL 语句:语句:use RetailDWgoIF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(Ndbo.销售销售_付款方式付款方式_提取提取) AND type in (NU)DROP TABLE 销售销售_付款方式付

26、款方式_提取提取CREATE TABLE dbo.销售销售_付款方式付款方式_提取提取(日期日期 datetime NULL,门店门店 varchar(10) NULL,付款方式付款方式 varchar(10) NULL,付款金额付款金额 numeric(12, 2) NULL) ON PRIMARY事实包:包内流程分组事实包:包内流程分组对于复杂的对于复杂的 IS 包,可以将其中有共同作用的环节进行包,可以将其中有共同作用的环节进行“分组分组” ,作法是先选中要分组的几个环节,然后右键选择,作法是先选中要分组的几个环节,然后右键选择“分组分组” ,然后更改分组名称。,然后更改分组名称。第 2

27、2 页 / 共 50 页事实包:初始化审核表(事实包:初始化审核表(ADO.NET 连接的使用注意事项)连接的使用注意事项)1、更新、更新“包执行信息记录包执行信息记录”表表 AuditPkgExecution,并取到自增的字段列。,并取到自增的字段列。2、得到事实表的原始行数:、得到事实表的原始行数:SELECT Count(*) FROM 销售销售_付款方式付款方式3、更新、更新“包过程记录信息包过程记录信息”表,并取到自动增加的字段列,赋予变量;表,并取到自动增加的字段列,赋予变量;4、更新、更新“包执行记录明细信息包执行记录明细信息”表,并取到自动增加的字段列,赋予变量;表,并取到自动

28、增加的字段列,赋予变量;注意:如果需要返回一个结果,则需要使用注意:如果需要返回一个结果,则需要使用 ADO.NET 连接,如果需要返回结果集要先在连接,如果需要返回结果集要先在“常规常规”项的项的“ResultSet”中设置中设置“单行单行”等选项,如果无需返回结果集则不必选。等选项,如果无需返回结果集则不必选。第 23 页 / 共 50 页事实包:提取源数据到中间表事实包:提取源数据到中间表用最简单的查询将源数据提取到中间表,并经过多播转换记录行数然后写入提取的中间表事实包:对源数据进行聚合分组事实包:对源数据进行聚合分组如果想通过一些方法确认事实抽取是否正确,可以从“商品记录数至少不少于

29、 XXX 条” 、 “销售中商品至少不低于 500 种”等角度,如果低于这些指标则通过 EMAIL 或其它方式及时警告系统管理员。想提取这种源数据中的“审核指标值” ,则可以通过“聚合”转换工具。如下图:可以设定多个聚合。聚合分基本、高级两种方式。基本方式只作一种分组统计功能;高级模式可设定多种分组。如第一个:将源数据按 BDATE 分组后统计出行数第二个:对门店进行 Count Distint 取到门店的独立个数第三个:对付款方式进行 CountDistint 取到付款方式的独立个数第 24 页 / 共 50 页事实包:将聚合后部分数据记入事实包:将聚合后部分数据记入“记录集目标记录集目标”

30、记录集目标可以填充一个在内存的记录集目标可以填充一个在内存的 ADO 记录集。首先要在变量中声明一个记录集。首先要在变量中声明一个 OBJECT 类型的变量,然后连接聚合类型的变量,然后连接聚合箭头,将其统计行数分支记录下来。箭头,将其统计行数分支记录下来。首先在首先在 VariableName 中选择变量;然后选择输入列即可完成填充。中选择变量;然后选择输入列即可完成填充。第 25 页 / 共 50 页事实包:在数据流中利用事实包:在数据流中利用“派生列派生列”添加变量列添加变量列如果想在数据流中增加一些列,如从变量中取值或其它常量等。可以借助派生列组件,设置如下图根据变量添加如果想在数据流

31、中增加一些列,如从变量中取值或其它常量等。可以借助派生列组件,设置如下图根据变量添加一新列(数据类型使用默认即可):一新列(数据类型使用默认即可):第 26 页 / 共 50 页事实包:用事实包:用 OLE DB 命令命令 组件更新审核表组件更新审核表OLE DB 命令组件,是在数据流中唯一可以执行命令组件,是在数据流中唯一可以执行 SQL 命令的组件。首先选择好连接命令的组件。首先选择好连接然后在然后在 SqlCommand 中输入中输入 SQL 命令命令第 27 页 / 共 50 页UPDATE AuditTableProcessing SET ExtractCheckValue1=? W

32、HERE TableProcessKey=?利用?号代表取自列映射的值利用?号代表取自列映射的值事实包:根据审核表记录的指标值判断是否发出警告事实包:根据审核表记录的指标值判断是否发出警告用用 SQL 语句从审核表中取出指标值,并赋予给各自的变量。语句从审核表中取出指标值,并赋予给各自的变量。第 28 页 / 共 50 页第 29 页 / 共 50 页参考参考 SQL 语句语句SELECT ISNULL(CAST(ExtractCheckValue1 as int), 0) AS CustCnt ,ISNULL(CAST(ExtractCheckValue2 as int), 0) AS Pr

33、odCntFROM AuditTableProcessing WHERE TableProcessKey = TableProcessKey事实包:根据变量值计算表达式决定是否发送警报事实包:根据变量值计算表达式决定是否发送警报注意:如果是多个任务流向一个任务,注意判断设置注意:如果是多个任务流向一个任务,注意判断设置“逻辑与逻辑与”还是还是“逻辑或逻辑或”关系。关系。ll 代表或关系、代表或关系、&代表与关系代表与关系第 30 页 / 共 50 页事实包:正式从中间表加载数据到事实表事实包:正式从中间表加载数据到事实表从中间表提取数据出来,通过从中间表提取数据出来,通过“查找查找”组

34、件来处理第一个维度如时间组件来处理第一个维度如时间 在两个表值相等的列中间用线连接,并在可用查找列中勾选要替换的列。在两个表值相等的列中间用线连接,并在可用查找列中勾选要替换的列。第 31 页 / 共 50 页如果想控制提取时的内存使用,可设置内存限制如果想控制提取时的内存使用,可设置内存限制对于对于“查找查找”结果无值或结果无值或 NULL 的时候,可以使用的时候,可以使用“派生列派生列”将将 NULL 转换为转换为 -1第 32 页 / 共 50 页添加查找的错误输出(可以输出到一个文本文件,或者直接插入维度表中等)添加查找的错误输出(可以输出到一个文本文件,或者直接插入维度表中等) ,推

35、荐前者,必须进行这种处理,否,推荐前者,必须进行这种处理,否则报错会停止整个程序包的运行。如下图所示:则报错会停止整个程序包的运行。如下图所示:在批量加载在批量加载“历史数据历史数据”时,记得把时,记得把“覆盖文件中的数据覆盖文件中的数据”选框勾消。选框勾消。第 33 页 / 共 50 页然后继续下一个维度然后继续下一个维度依次进行,最后行记数完毕后加载到事实表中。如果加载失败,可以写入失败变量记数或依次进行,最后行记数完毕后加载到事实表中。如果加载失败,可以写入失败变量记数或写入写入 raw 文件文件注意:在抽取事实表并运行有时会报注意:在抽取事实表并运行有时会报“FOREIGN KEY”类

36、似字样的错误,具体错误如下:类似字样的错误,具体错误如下:导入会员销售数据导入会员销售数据 111 错误错误: SSIS 错误代码错误代码 DTS_E_OLEDBERROR。出现。出现 OLE DB 错误。错误代码错误。错误代码: 0 x80040E2F。 已获得已获得 OLE DB 记录。源记录。源:“Microsoft SQL Native Client” Hresult: 0 x80040E2F 说明说明:“语句已语句已终止。终止。 ” 。 已获得已获得 OLE DB 记录。源记录。源:“Microsoft SQL Native Client” Hresult: 0 x80040E2F

37、说明说明:“INSERT 语语句与句与 FOREIGN KEY 约束约束会员销售会员销售_会员会员冲突。该冲突发生于数据库冲突。该冲突发生于数据库RetailDW,表,表dbo.会员会员, column PK_会员会员。 ” 。这时可以去掉这时可以去掉“数据源目标数据源目标”组件的高级选项下的组件的高级选项下的“检查约束检查约束”选框后重试,如下图所示:选框后重试,如下图所示:第 34 页 / 共 50 页事实包:加载完成以后更新审核表事实包:加载完成以后更新审核表加载完成后,无论成功或失败,均要更新审核表。加载完成后,无论成功或失败,均要更新审核表。首先更新首先更新 AuditDimisio

38、n 表表然后得到加载后的事实表行数,记入变量。然后得到加载后的事实表行数,记入变量。接下来,更新接下来,更新 AuditTableProcessing 表表最后更新最后更新 AuditPkgExecution 表表第 35 页 / 共 50 页启用事实表约束条件,即可大功告成启用事实表约束条件,即可大功告成依此步骤,制作其它事实表的提取、加载工作。依此步骤,制作其它事实表的提取、加载工作。事实包:新建事实包:新建“收缩数据库收缩数据库”任务任务如果服务器硬盘空间有限,可以考虑在每次数据抽取前先收缩如果服务器硬盘空间有限,可以考虑在每次数据抽取前先收缩 SqlServer 的数据日志文件。在的数

39、据日志文件。在 IS 项目下新建一个项目下新建一个“收缩数据库收缩数据库”任务计划,并通过任务计划,并通过“新建新建”指定系统要收缩的数据库。指定系统要收缩的数据库。第 36 页 / 共 50 页事实包:从事实包:从“EXCEL”数据源提取销售计划数据源提取销售计划除了从源系统外,还可以从除了从源系统外,还可以从 EXCEL 文档中提取数据。针对文档中提取数据。针对 EXCEL 可以可以 对其各对其各 SHEET(等同于各表)进行数(等同于各表)进行数据提取。有两点需要特别注意:据提取。有两点需要特别注意:1、 EXCEL 的的 SHEET 建议用字母或数字,不用使用中文。建议用字母或数字,不

40、用使用中文。2、 如果变更了如果变更了 EXCEL 的格式或名称等,在的格式或名称等,在 VisualStudio 中修改有时会出现默名其妙的错误,这时需要重新启动中修改有时会出现默名其妙的错误,这时需要重新启动一下一下 VisualStudio 才行。才行。3、 可以每次只取一个可以每次只取一个 SHEET,也可以用,也可以用 Sql 命令取多个命令取多个 SHEET载入历史数据前:删除索引结束后再重建载入历史数据前:删除索引结束后再重建 为尽快加载大量的历史数据,需要先删除事实表的索引,载入完毕后再重建。此法适用于初始化,不适用于增量为尽快加载大量的历史数据,需要先删除事实表的索引,载入完

41、毕后再重建。此法适用于初始化,不适用于增量更新。更新。重建、删除索引语句可从重建、删除索引语句可从 Sqlserver 中直接导出中直接导出USE RetailDW第 37 页 / 共 50 页GO/* 对象: Index IX_销售_会员 脚本日期: 03/08/2008 01:37:44 */CREATE NONCLUSTERED INDEX IX_销售_会员 ON dbo.销售_01 (FK_会员 ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY =

42、OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY/* 对象: Index IX_销售_门店 脚本日期: 03/08/2008 01:39:08 */CREATE NONCLUSTERED INDEX IX_销售_门店 ON dbo.销售_01 (FK_门店 ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF,

43、 DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY/* 对象: Index IX_销售_日期 脚本日期: 03/08/2008 01:39:30 */CREATE NONCLUSTERED INDEX IX_销售_日期 ON dbo.销售_01 (FK_日期 ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DRO

44、P_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY/* 对象: Index IX_销售_商品 脚本日期: 03/08/2008 01:39:52 */CREATE NONCLUSTERED INDEX IX_销售_商品 ON dbo.销售_01 (FK_商品 ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EX

45、ISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY/* 对象: Index IX_销售_时段 脚本日期: 03/08/2008 01:40:16 */CREATE NONCLUSTERED INDEX IX_销售_时段 ON dbo.销售_01 (FK_时段 ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTI

46、NG = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY/* 对象: Index IX_销售_收款员 脚本日期: 03/08/2008 01:40:27 */CREATE NONCLUSTERED INDEX IX_销售_收款员 ON dbo.销售_01 (FK_收款员 ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, 第 38 页 / 共 50 页IGNORE_DUP_KEY = OF

47、F, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY/* 对象: Index IX_销售_售货员 脚本日期: 03/08/2008 01:40:41 */CREATE NONCLUSTERED INDEX IX_销售_售货员 ON dbo.销售_01 (FK_售货员 ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF

48、, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY/* 对象: Index IX_销售_销售类型 脚本日期: 03/08/2008 01:40:51 */CREATE NONCLUSTERED INDEX IX_销售_销售类型 ON dbo.销售_01 (FK_销售类型 ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = O

49、FF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY删除索引:删除索引:USE RetailDWGO/* 对象: Index IX_销售_会员 脚本日期: 03/08/2008 01:41:25 */IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(Ndbo.销售_01) AND name = NIX_销售_会员)DROP INDEX IX_销售_会员 ON dbo.销售_01 W

50、ITH ( ONLINE = OFF )导入历史数据,建议按 500 万为一批进行分批提交。经测试 500 万约执行 5 至 7 分钟历史数据导入完毕后,重建索引也需要一些时间,如 1000 万条的表重建 8 个非聚集单列索引需要 30 分钟左右开始增量载入事实表:通过变量控制提取日期范围开始增量载入事实表:通过变量控制提取日期范围如果源数据库是 ORACLE,则需要新建一 STRING 类型的变量,将提取 SQL 语输入其中,并且日期必须写明。如下:SELECT BDATE, POSIN, NO, NET, BILLQTY FROM XSTIME01 WHERE BDATE BETWEEN to_date(2006-05-01,yyyy-mm-dd) and sysdate第 39 页 / 共 50 页如果源数据库是 SQLserver,则需要新建两个 d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论