【问题标题】:how to get unique records using pentaho data integration如何使用 pentaho 数据集成获取唯一记录
【发布时间】:2015-04-04 23:24:05
【问题描述】:

我在 sql 中有包含 state、region、district、timestamp 列的 log_table

服务器。

ID     state     region     district     timestamp
--     -----     ------     --------     ---------
1       GJ        RE056       DI137      2014-02-05 09:00:00.257
2       CA        RE027       DI154      2014-02-04 14:00:00.183 
3       GJ        RE056       DI137      2014-12-09 16:00:00.257

我想将这些记录加载到 mysql 中具有唯一记录的另一个表中,并且在将数据从 sql server 加载到 mysql 时,现有数据不应插入到 mysql 中的新表中,仅每天更新 记录应该加载到没有重复记录的新表中。在这个问题上帮助我如何使用 pentaho 数据集成。

【问题讨论】:

  • 问题不够清楚。尝试放置一些示例数据来展示您想要实现的目标或您尝试过的目标。
  • 您没有日期时间列吗?我们如何确定一条记录是每天更新的?请详细说明这一点。我可以帮你
  • @Marlon Abeykoon 感谢您在上面的回复,我提到了列时间戳,它的数据类型是日期时间

标签: mysql sql-server pentaho kettle pentaho-design-studio


【解决方案1】:

我假设timestamp 列代表源数据库(sql server)中一行的last_updated_timestamp

如果您的目标是每天运行转换,并且您希望只有源数据库中的new or updated 记录将加载到目标(mysql)数据库,您需要将timestamp 存储到目标数据库(例如表@987654325 @),转换步骤可能是:

  • 表格输入(目标数据库): 从表格log_target 中获取MAX timestamp
    • SELECT COALESCE(MAX(timestamp), '1970-01-01 00:00:00') AS max FROM log_target
  • 表格输入(源数据库):log_table 中选择更新的数据
    • 步骤设置:插入数据步骤(从上一步获取数据);替换脚本中的变量? (真)
    • SELECT * FROM log_table WHERE (timestamp > ?)
  • 处理您的数据
  • 表输出或插入/更新(目标数据库):将输出数据存储到log_target 表。不要忘记存储timestamp 值。

【讨论】:

  • @mzy 感谢您的回复我不明白将时间戳存储到目标数据库中的行。这意味着我需要将时间戳列保持为 TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
  • 不,timestamp 值(目标数据库)需要与源数据库中的timestamp 值相对应。例如。昨天,您将示例中的这三个记录加载到目标数据库 (ID, state, region, district, timestamp)。现在目标数据库中的最大值 timestamp 是“2014-12-09 16:00:00.257”。现在您的转换/工作已执行。您从目标数据库获得 MAX timestamp 并看到它是“2014-12-09 16:00:00.257”。从源数据库中加载所有具有timestamp value > target.max ("2014-12-09 16:00:00.257") 的行并将它们存储到目标数据库中。
  • @ hi mzy 感谢它在昨天之间工作的帮助我已经从源加载数据到目标 [2014-04-06 16:45:00 到 2015-01- 19 07:41:43] 中间与服务器问题连接停止加载数据。当我再次尝试加载时,它给了我错误,例如键'PRIMARY'的重复条目'2327745'。如果我想从2015-01-19 07:41:45开始加载数据到当前日期。我必须遵循什么流程
  • [如果有帮助,请接受我的回答。] 问题是目标数据库中已经存在某些行,您尝试再次加载它会引发此错误。我不知道您使用哪个步骤将数据加载到目标数据库,但我建议使用插入/更新步骤(缺失时插入行,存在时更新行)与此设置:查找键 = 查找主目标表的键;更新字段:除主键外的所有字段的更新 = Y(更新 = N);不要执行任何更新 = false。
  • accepting 我的意思是stackoverflow accept = 单击我的答案标题旁边的勾号(接受按钮)。这使勾号变为绿色,并为correct answer 添加了一些stackoverflow points
【解决方案2】:

表格输入 -> 对行进行排序(州、地区、地区、时间戳降序) -> 唯一行 -> 插入/更新。

对行时间戳降序排序将帮助您在删除重复项后保留上次修改的记录。

【讨论】:

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