【问题标题】:Getting multiple records in SSIS在 SSIS 中获取多条记录
【发布时间】:2013-07-19 20:13:19
【问题描述】:

我们正在研究 ETL 流程。该过程要求我们从源 (Oracle) 获取 ID 并查询另一个数据源 (MS SQL DB)。查询需要获取两组数据

  1. 客户详细信息 - 一对一映射获取客户的所有帐户
    1. 按关系 ID 划分的客户帐户 - 同一 ID 的多个记录

我们目前正在使用查找组件,并且在此过程中仅获取客户帐户的第一个匹配项。我们如何获得多个匹配记录 - 即所有匹配的客户帐户。由于两个数据源不同,我们无法进行内部连接。我们能想到的另一种选择是使用临时表,但我们想避免这种情况。有没有其他方法使用 SSIS 组件来获取相同 ID 的多个匹配记录。

【问题讨论】:

  • 以后你想对数据做什么?将数据添加为派生列并将其保存到其他表中?请注意使用具有适当 SQL 查询和 Union All 的多个数据源将其合并在一起。
  • 得到它之后,我们需要将它插入到目的地。来自 1-1 映射的记录不同于来自 1-many 的记录。一个是客户详细信息,另一个是客户帐户。我不确定我们是否可以全部联合。

标签: ssis etl


【解决方案1】:

正如您已经确定的,查找组件是一个同步项。一排流过它,只有一排出来。查找并将数据添加到现有行,但无法将新行添加到流中。

除了我在使用 DB2 之外,我一直站在你的立场上,最终我选择了 Asynchronous Script。我会在 ReadOnly 模式下将 id 传递给组件,并定义我的新输出和任务将生成的所有列。是的,这很乏味。

在我的脚本中,在 PreExecute 中,我建立了与数据源的连接,然后在我的数据库中触发单例查询以获取所有相关帐户。我对返回的数据做了两件事。我调用了 AddRow 方法并填充了字段——这会将数据发送到下游。我还在内存中保留了一个本地副本,因为我可以在给定的运行中多次拥有相同的 ID(个人购买了金融产品 A,在同一批次中,他们还购买了产品 B)。这将节省我访问数据库的时间。您可以更好地了解您的数据以及这是否有帮助。

【讨论】:

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