繁体   English   中英

SSIS JOIN 最佳实践

[英]SSIS Best Practices for JOINs

我的任务是将 SQL select 语句转换为 SSIS ZEFE90A8E604A7F6B7AD86 但是,我不确定我应该如何处理 JOINS。 最好使用 Merge/Merge Join 吗? 我应该在 OLE DB 连接中简单地使用这个 select 语句吗? 我想使用能够提供最佳性能的方法。

这是我的 SQL:

SELECT
    AC.Sys_ID,
    AC.Number,
    Approval,
    AC.[Type],
    Category,
    AC.[Configuration item],
    AC.[Short description],
    [Planned start date],
    [Actual start],
    AC.[Planned end date],
    [Actual end],
    AC.[Assignment group],
    AC.[Assigned to],
    AC.Risk,
    [State],
    Closed,
    AC.[Close code],
    ICC.Number,
    ICC.Opened,
    ICC.[Priority],
    ICC.[Short description],
    ICC.Resolved,
    NULL AS DCIO,
    EOMONTH(DATEADD(M,-1,AC.Report_Date)) AS Reporting_Month_End_Date,
    AC.Report_Date,
    AC.Ingestion_Date
FROM
    RAW.SERVICENOW_IMPLEMENTED_CHANGES AS AC    
    LEFT OUTER JOIN (SELECT [Caused by change number], MAX(Opened) AS Max_Opened FROM RAW.SERVICENOW_INCIDENTS_CAUSED_BY_CHANGE GROUP BY [Caused by change number]) AS MICC ON AC.Number = MICC.[Caused by change number]
    LEFT OUTER JOIN RAW.SERVICENOW_INCIDENTS_CAUSED_BY_CHANGE AS ICC ON MICC.[Caused by change number] = ICC.[Caused by change number] AND MICC.Max_Opened = ICC.Opened

SQL 服务器或任何数据库都可以有一个索引来提高您匹配数据的能力。 SSIS 没有索引,因此每次您想要加入数据时,您要么必须在源系统中排序,要么在 package 中排序。 @Piotr 和 @ericBrandt 在他们的评论中说得对——因为你给出的方向是愚蠢的,所以推回去。

也就是说,对于这种特定情况,您只是从“服务现在实施的变更”中丰富了现有行,其中包含由变更引起的服务现在事件。 这是连接上的 1 到可选 1 (假设我阅读正确)。

添加一个查找组件,LKP MICC。 指定数据来自查询并指定它应该忽略错误。

SELECT [Caused by change number], MAX(Opened) AS Max_Opened 
FROM RAW.SERVICENOW_INCIDENTS_CAUSED_BY_CHANGE 
GROUP BY [Caused by change number]

Map 输入列 [Number] 到 [Caused by change number] 并检查 Max_Opened 列,以便下游可用

添加第二个查找组件 LKP ICC。 指定它也来自查询并指定它应该忽略错误。

SELECT ICC.Number, ICC.Opened, ICC.[Priority], ICC.[Short description], ICC.Resolved
FROM RAW.SERVICENOW_INCIDENTS_CAUSED_BY_CHANGE

Map 输入列 [Max_Opened] 到查找列 [Opened]。 检查可用的列。

您应该能够运行 package。 当它启动时,它将计算MICC和ICC的所有分组,然后将其缓存在本地。 当行流过时,package 将检查缓存中的匹配数据。

For using data from any other database in SSIS you can simply go with the select statement because SSIS does not have its own syntax to go with. 由于 SSIS 允许开发人员在两种不同的脚本语言之间进行选择:C# 或 Visual Basic(VB) 等。看看你可以在哪里做出这个选择,将脚本任务放到控制流设计表面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM