2

先说第一件事。我对 SSIS 完全陌生,并试图弄清楚它在 ETL 方面的潜力并最终转向 SSAS。我有以下情况:

  1. 我有一个可以通过 ADO 连接的系统间数据库.NET
  2. 我想从这个数据库中获取数据并通过增量加载插入 MS SQL

我提出的解决方案/目标是:

  1. 在 MS SQL 中有一个表,用于存储读取的最后一个指针或日期/时间快照。(在这个阶段无关紧要)。让我们保持简单,假设我们将使用 Intersystems 数据库中存在的记录 ID
  2. 从此表中获取指针并通过 ODBC 将其用作参数以读取源数据库,然后插入到目标 MS SQL db
  3. 用读取的最后一条记录更新指针,以便下次我们从那里继续。(我不想涉及更新/删除的复杂性。让我们保持简单)

目前进展:

  1. 我已成功与 MS SQL 建立连接以从那里读取指针并将其放入变量中
  2. 我已经设法使用[Execute SQL task]using 参数从 Intersystems Db 读取数据,并将其放入变量中FullResultSet
  3. 我已经设法使用[ForEach Loop Container]using[Foreach ADO Enumerator]来浏览每个记录和每个字段(yeeeey!)

现在。我可以使用一个[Script task]使用代码(理论上)插入 MS SQL 数据库的方法VB.NET,然后使用从源数据库读取的最后一条记录更新计数器。我花了无数时间寻找使用 ODBC 参数的解决方案,以上是我能看到的唯一可行的方法。

我的问题是这样的:

这是唯一的方法和最佳做法吗?难道没有一些简单的方法可以将这个结果集插入到一些数据流组件中,这些组件会为我插入和更新记录指针吗?

请假设我没有写入 Intersystems Db 的权限,因此我无法对表结构进行任何更改。但我只能读取数据,以便将其放入 MS SQL。

交给你们(或女孩?)

4

1 回答 1

0

我建议使用数据流来提高您的设计效率(批量加载与脚本中的逐行加载)和易用性(无需编写脚本)。

  1. 您应该使用执行 SQL 来获取指针并将其保存到变量中。
  2. 您应该使用动态 sql 及以上变量构建一个 sql 变量。
  3. 在管理器中与 Source 建立数据连接
  4. 添加一个数据流并进入它
  5. 添加源管理器并从弹出窗口中选择您的源
  6. 从变量中选择 sql 并选择您的变量

此时您应该拥有所需的所有数据,并且可以继续转换或直接加载到目标。

编辑:记录指针部分

  1. 添加多播(这可以制作任意数量的副本)
  2. 添加一个聚合对象和最大值(无论您的指针是什么)
  3. OleDBSQL 对象(允许实时 SQL,主要用于更新

9a。UPDATE "YourPointerTable" SET "PointerField in DB" = ? (? 实际上是您需要输入的内容。

9b。映射到您在步骤 8 中命名的任何内容。

这将允许您处理插入/更新

  1. 从多播流一个新流到一个查找对象并将您的键映射到目标表的键
  2. 指定不匹配以重定向到不匹配输出
  3. 您的匹配映射到更新
  4. 您的不匹配映射到插入
于 2017-10-11T15:05:11.460 回答