【问题标题】:DB2 conditional importDB2 条件导入
【发布时间】:2014-09-04 22:26:04
【问题描述】:

我有两个 DB2 数据库(Database1 和 Database2),它们都包含一个名为 SubscriptionTable 的表。两个表都包含用户订阅相关数据,并且 SubscriptionTable 的列在两个数据库中是相同的。

现在我需要将数据从 Database1.SubscriptionTable 复制(并覆盖)到 Database2.SubscriptionTable,但前提是 Database2.SubscriptionTable 中的 LAST_UPDATED_TIMESTAMP 列不大于特定日期。

所以简而言之,我想覆盖 Database2.SubscriptionTable 中的订阅数据,但前提是数据在特定日期之后没有被修改。

我可以为此目的使用现有的实用程序吗? db2 导入,我还可以为被覆盖的每一行指定一个条件 (LAST_UPDATED_TIMESTAMP

【问题讨论】:

  • 数据库是否相互链接,因此您可以使用 SQL 查询来解决这个问题?
  • 它们没有连接,但似乎在数据库之间建立连接将是解决此问题的唯一方法(除了开发将复制数据的自定义实用程序)。谢谢
  • 另一种方法是复制整个表并在本地进行比较。
  • 查看带有MERGE 语句的INGEST 命令是否可以满足您的需求——查看示例in the manual

标签: sql database db2 data-import db2-luw


【解决方案1】:

DB2 IMPORT 实用程序无法根据行中的内容忽略行。

正如 Gordon Linoff 在 cmets 中建议的那样,“最简单”的方法是通过联合,因此可以从 Database2 中访问 Database1.SubscriptionTable。

或者,您可以简单地从 Database1 中导出符合您条件的数据:

-- Connect to Database1
export to data.del of del select * from SubscriptionTable 
                           where last_updated_timestamp > ...

-- Connect to Database2
import from data.del of del insert into SubscriptionTable ...

【讨论】:

  • 仅从 Database1 中导出符合条件的数据将不起作用,因为 LAST_UPDATED_TIMESTAMP 列的值需要从 Database2 中获取。因此,正如您建议 DB2 Federation 那样,通过 SQL 访问两个数据库似乎是这种情况下的唯一方法。
  • 另一种方法是从 database1 中导出整个表,并将其导入到 database2 中的临时表中,然后使用 SQL (MERGE) 从 database2 中的临时表中更新 SubscriptionTable。
猜你喜欢
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
相关资源
最近更新 更多