SSSIS:在 SSIS 中使用 Multicast Task 将数据源数据同时写入多个目标表

在 SSIS 中使用 Multicast Task 将数据源数据同时写入多个目标表,以及写入Audit 与增量处理信息

在 SSIS Data Flow 中有一个 Multicast 组件,它的作用和 Merge, Merge Join 或者 Union All 等合并数据流组件对比起来作用正好相反,非常直观,它可以将一个数据流平行分开成为多个数据流供 下游其它 Data Flow 组件使用。

首先描述一下使用 Multicast Task 的几种情形  -

第一种,从同一个数据源中取出一部分数据直接放到 A 表中,一部分数据直接放到 B 表中。我曾经 遇到一个370多列的一个文件,这370列的文件可以分出列数不等的7,8 张表。我最开始的做法是先将这 个文件的数据 Load 到一个大表中,然后再从大表抽取不同的列到小表中,这样相当于形成了二次加载 ,效率不高,后来使用 Multicast 就可以一次性直接将 370 列宽的文件分散到不同的表中。

第二种,从数据源 A 抽取数据到 B,B 每次都会先 Truncate 一下,但是又需要备份一下每次从 A 抽取的数据,这个时候也可以使用 Multicast。在每次从 A 抽取数据的时候,通过 Multicast 使数据 在导向 B 的同时也导向到 B 的备份表。

第三种,类似于第二种,不同的是没有备份表,但是需要保留加载的一些 Audit 信息数据。比如, 从 Source 抽取数据到 Staging 的时候,同时需要记录一下抽取的行数,以及用来标示这批 Staging 数据中最大的时间戳,表名和列的名称。这样的话,下次加载数据到 Staging 的时候就只选择加载新增 的 Source 数据,也就是上一批最大时间戳之后的新数据。

当然,同一种问题可能有不同的解决的方式,欢迎大家补充!

下面的示例演示一下第一种和第三种情形。

第一种 - 分散同一个 Source 表数据到多个目标表中

先从 TSQL2012 中抽取一部分测试的数据 (TSQL2012 是 Microsoft SQL Server 2012 High- Performance T-SQL Using Window Function 一书中的示例数据库),我们的 Source 表就是 SalesOrderSource

USE BIWORK_SSIS
GO

IF OBJECT_ID('dbo.SalesOrderSource','U') IS NOT NULL
DROP TABLE dbo.SalesOrderSource
GO

SELECT *
INTO dbo.SalesOrderSource
FROM TSQL2012.Sales.Orders
WHERE orderdate < '2006-08-01'

SELECT * FROM dbo.SalesOrderSource

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据
, 数据流
, 数据源
, 多个
, 一个
抽取
ssis 动态数据源、ssis script task、ssis send mail task、multicast、multicast address,以便于您获取更多的相关知识。

时间: 2024-12-02 13:31:13

SSSIS:在 SSIS 中使用 Multicast Task 将数据源数据同时写入多个目标表的相关文章

如何使用 Multicast Task 将数据同时写入多个目标表

开篇介绍 在 SSIS Data Flow 中有一个 Multicast 组件,它的作用和 Merge, Merge Join 或者 Union All 等合并数据流组件对比起来作用正好相反.非常直观,它可以将一个数据流平行分开成为多个数据流供下游其它 Data Flow 组件使用. 使用 Multicast Task 的几种情形 第一种,从同一个数据源中取出一部分数据直接放到 A 表中,一部分数据直接放到 B 表中.我曾经遇到一个370多列的一个文件,这370列的文件可以分出列数不等的7,8

在SSIS中使用XML任务处理XML数据或文档

上一篇,我们讲到了通过Web服务任务将异构系统中的数据保存为一个XML文件.它们看起来是这样 文档-ssis xml任务"> 但问题在于,我们如何处理该XML文件,并将其提交到我们的数据库中去呢?我们这一篇文章会用到 XML任务和XML源对其进行转换和加载 1. 首先,拖拽一个"XML任务"到控制流中,并且设置好它与"Web服务任务"的优先约束

SSIS中Sql Task 获取系统变量

原文:SSIS中Sql Task 获取系统变量 执行 SQL 任务使用不同的连接类型时,SQL 命令的语法使用不同的参数标记.例如,ADO.NET 连接管理器类型要求 SQL 命令使用格式为 @varParameter 的参数标记,而 OLE DB 连接类型要求使用问号 (?) 参数标记. 在变量与参数之间的映射中可以用作参数名的名称也因连接管理器类型而异.例如,ADO.NET 连接管理器类型使用带 @ 前缀的用户定义名称,而 OLE DB 连接管理器类型要求使用从 0 开始的序数数值作为参数名

SQL2005-深入了解SSIS中记录集的应用

sql2005|记录集 SQL2005-深入了解SSIS中记录集的应用 在本文,我将介绍如何产生记录集,并将利用记录集中的行和列干某些事情,比如当你想基于行遍历执行某项操作,这是非常有用的 产生记录集非常简单了,上文<SSIS中ExecuteSQL TASK组件>中就介绍了 好了,现在开始我们的准备工作 1.现在我们定义4个变量 ClosureDate 日期型数据 ,初始值为1/12/1999 Contactname 字符串型 emailaddress 字符串型 rsDetails 对象型 这

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

原文:微软BI 之SSIS 系列 - 使用 Script Task 访问非 Windows 验证下的 SMTP 服务器发送邮件 开篇介绍 大多数情况下我们的 SSIS 包都会配置在 SQL Agent Job 中周期性的按计划执行,比如每天晚上调用 SSIS 包刷新数据,处理 Cube 等.一旦 SSIS 包中出现任何异常,报错,那么配置在 SQL Agent Job 中的通知,邮件提醒就会把这些错误信息发邮件到指定的用户或者系统维护者,这样就起到了一个错误监控的作用. 但是在有的情况下,有一些

在SSIS中使用自定义的DLL文件

原文:在SSIS中使用自定义的DLL文件步骤1.开发dll(需要签名) using System;using System.Collections.Generic;using System.Text;using System.Xml;using System.Xml.Schema;namespace ETLXmlParser{    public class ETLXmlParser    {        private static bool isValid = true;        p

SSIS:在 SSIS 中使用 Web Service 以及 XML 解析

Web Service 的用途非常广几乎无处不在,像各大门户网站上的天气预报使用到的第三方 Web Service API,像手机客户端和服务器端的交互等都可以通过事先设计好的 Web Service 接口来实现两 个不同平台的信息沟通. 记得第一次做 IPhone 手机客户端与服务器端交互的 Web Service 接口的时候,由于我们在客户端 开发和服务器端开发都没有 IOS 平台开发经验,白天有其它的项目,只能利用晚上的时间不断尝试.最 终在第三个通宵的时候,尝试搭建的第3套不同版本的 W

怎样执行SQL Server集成服务(SSIS)中的批处理

问题 我们很多年来都日常加载数据仓库,每次加载的都是真实记录.我们想批处理地执行这个过程并能够在发生错误的情况下重启失败时间点.你能够为我们提供一个例子介绍下我们该怎样在一个SSIS包中执行这个批处理功能吗? 专家解答 SSIS使用Toolbox中的现有组件能够很好地支持批处理.在SSIS中执行批处理的一个很简便的方法是将记录分组放到批处理中,处理每个批处理,然后将每个组更新为处理过的.首先让我们描绘一个场景然后执行一个SSIS包来完成这个工作. 在开发报表应用程序中,一个很常见的需求是聚合数据

派生列-ssis 中转换问题,在表中加列并填充数据

问题描述 ssis 中转换问题,在表中加列并填充数据 初学SSIS 我在数据流中,为数据源加了两个派生列,一个是时间戳,这个没问题,另一个列我想用另外一张表的某条记录的值来填充,要怎样实现?是不是不能用派生列? 应该用哪种转换方式?