【问题标题】:Extracting Active Directory records using SSIS and SQL使用 SSIS 和 SQL 提取 Active Directory 记录
【发布时间】:2021-07-15 16:39:56
【问题描述】:

我正在尝试从 Active Directory 中提取数据并每周保持定期的增量负载。

我做了什么?

我已经在 Active Directory 团队的帮助下使用 .csv 文件加载了初始负载,因为我们知道 Active Directory 在 SSIS 中使用时只有 1000 条记录加载限制。

现在我们已经在目标表中进行了初始加载,我们可以使用一些 delta 方法使用 SSIS 仅提取更新的活动目录记录,因为现在 delta 记录数不会是 1000,它肯定会像 10 或 100 最大值和因此我的 SSIS 将运行。

我的 SSIS 源查询是这样的:

SELECT 
    ipPhone, whenChanged, whenCreated, manager, company,
    department, title, telephoneNumber, physicalDeliveryOfficeName,
    displayName, mail, SN, givenName, employeeID  
FROM 
    'LDAP://BHC-ADDCP01.bayshore.ca/DC=bayshore,DC=ca' 
WHERE 
    objectClass = 'User'

目标表已经有所有员工的初始完整 15k 记录。

我如何以及在哪里编写增量类型的查询以仅获取目标表中的更新记录,请注意上面的列是对象数据类型,我认为有 1 个重要列是whenChanged,它可以告诉我何时有人更改他们在 Active Directory 中的记录。

【问题讨论】:

    标签: tsql ssis active-directory


    【解决方案1】:

    如果我理解正确,您需要如果目标表中已经有一个条目并且在源表中创建了一个新条目,则 SSIS 包应该只将新记录插入到目标表中。它不应该在目标表中插入重复的记录

    在 SSIS 中使用查找转换

    SSIS 中的查找转换是一种强大且有用的 SSIS 转换,用于比较源数据和目标数据。它过滤掉指定目的地中匹配和不匹配的数据。

    源表在 [dbo].[AADuserDetails] 表中获得一个新条目。在下表中,我们插入了 3 个新行

    目标表包含前 3 行。现在,一旦我们执行 SSIS 包,它应该只在目标表中插入最后 3 行。

    为 SSIS 中的查找转换创建 SSIS 包

    使用以下步骤创建 SSIS 包。

    • 打开 SQL Server Data Tools 并创建一个新的集成项目

    • 将数据流任务从 SSIS 工具箱拖到控制流中

    • 右键单击数据流任务并将其重命名为 SSIS LOOKUP TRANSFORMATION(根据您的要求)

    • 双击此任务,它会移动到数据流选项卡

    在数据流任务中拖动一个 OLE DB 源(或平面文件源,如果您有 .CSV 中的数据),并将其配置为提供 OLE DB 连接管理器和表或视图的名称,在我们的例子中,它是表 [AADuserDetails]。

    现在,在控制流中添加一个 Lookup 任务,并使用箭头将 OLE DB Source 任务与此 Lookup 任务连接起来。

    要配置查找任务,双击它,它会打开以下查找转换编辑器。

    查找转换编辑器中,我们指定连接管理器和缓存类型。这些细节超出了本文的范围,现在我们将使用这些的默认值。

    指定如何处理没有匹配条目的行的下拉列表中,选择以下选项

    • 将行重定向到不匹配的输出

    只有当目标表还没有数据时,我们才需要从源表到目标表的行。此将行重定向到不匹配的输出比较两个表,如果发现任何差异,则仅将行转发到目标表。

    单击连接并从下拉列表中指定目标表。我在同一个数据库中有源表和目标表。您也可以在此处创建单独的连接。

    单击列,它会显示源表和目标表。我们想比较两个表上的 user_id 列。从源中拖动 user_id 列并将其移动到目标 user_id 列。它绘制一个箭头,如下图所示。

    从 SSIS 工具箱添加一个 OLE DB 目标。将 Lookup 任务与 OLE DB 目标连接起来,它会打开以下输入-输出选择。

    选择以下值。

    • 输出:查找不匹配输出
    • 输入: OLE DB 目标输入

    单击“确定”并在 OLE DB 目标中配置目标表。

    查看 Lookup 和目标之间的箭头,它显示 Looking No Match Output

    此时,我们在源表中有 6 行,但在目标表中并不完全可用。

    让我们运行包,点击START执行包

    • 源表有 6 行
    • 查找转换检查两个表并在目标中找到一条新记录,它只将新记录插入到目标表中。

    我们可以看到它从源向目标传输了 6 行,因为目标表在包执行之前有 3 行。

    它将所有不匹配的行(3 行)转移到目标表。

    【讨论】:

      猜你喜欢
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多