ETL过程中遇到复杂SQL使用存储过程作为替代方案

由于业务逻辑的复杂性,在使用SSIS进行ETL过程时,SQL command允许的SQL语句行数在630行左右,远远小于业务逻辑的SQL,这时将业务逻辑的SQL转换为存储过程。

新建存储过程需要做的准备:

  1. 在对应的数据库下新建一张表,存储再执行存储过程是的结果集
  2. 创建存储过程
  3. 执行存储过程
  4. 进行ETL过程
首先创建表
create table report_result(id char(10) NOT NULL);
创建存储过程
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[IT_Monitor_Correct]
AS
BEGIN
SET NOCOUNT ON;

DECLARE @startTime DATETIME;
DECLARE @endTime DATETIME;
SET @startTime = DATEADD([DAY], -10, GETDATE());
SET @endTime = DATEADD(MINUTE, -30, GETDATE());

insert into report_result 
select *  from (
SELECT o.Id
FROM [DW_OrderSharding0].[P0].[OrderInfos] AS o WITH (NOLOCK)
    JOIN [DW_OrderCurrent].dbo.OrderInfos AS oc
        ON o.Id = oc.Id
WHERE ISNULL(o.LastModificationTime, o.CreationTime) > @startTime
      AND ISNULL(o.LastModificationTime, o.CreationTime) < @endTime
      AND o.TotalAmount > 0
      ........
) E

END
GO

执行存储过程
exec [dbo].[IT_Monitor_Correct]
进行ETL过程

ETL过程中遇到复杂SQL使用存储过程作为替代方案_第1张图片
针对上面的ETL过程制定执行计划,周期性的执行此ETL过程,进行数据的业务用途。

SQL Server中查看上述创建的存储过程

1.命令行方式

sp_helptext IT_Monitor_Correct

2.在对应数据库可编程性分支下查看
ETL过程中遇到复杂SQL使用存储过程作为替代方案_第2张图片

总结:

存储过程在日常ETL过程中,还是很常见的,比如:取不同字段的最值,固定的负责业务逻辑等,在方便的同时也是高效的,会继续深入。

你可能感兴趣的:(ETL之存储过程)