0

我完成了一个读取 iTunes EPF 文件并将这些记录插入 mysql 数据库表的过程。

其中,在插入记录之前,我需要检查给定记录是否存在于数据库中如果记录不存在,那么我将插入记录。但是如果记录已经存在于数据库中,那么我需要更新mysql中的相应记录。

如何检查mysql中的记录是否存在。是否可以在 Mapper 或 Reducer 类中进行此检查..?以及,如果记录存在如何更新记录。

4

2 回答 2

0

使用临时表集成来自不同平台的数据是更强大的解决方案。在 map 阶段为每条记录查询数据库不是一个好方法,并且不提供数据加载的一致性。所以,

  1. 在 mysql 的 STG 模式(或类似模式)中创建类似于目标表的表(有 2 个添加字段:'load_ts'、'update_ts'),
  2. 从 MapRed Job(或 Sqoop,...)填充它,
  3. 使用merge子句(或模拟,如果不存在)填充目标 mysql 表
于 2014-07-28T09:56:20.370 回答
0

使用 sqoop

首先应该有表的主键或唯一键。
--update-key用于更新的锚列。如果有多个列,请使用逗号分隔的列列表

sqoop export --connect jdbc:mysql://localhost/test --username root --password root --table tempo --export-dir /input_test_files/sqoop_col -m 1 --update-key "unique_key_column" --update-mode allowinsert

--udate-mode指定当在数据库中找到具有不匹配键的新行时如何执行更新。
合法值是:
updateonly :只更新数据库中存在的行,如果不存在则忽略。
allowinsert :如果数据库中已经存在行,则更新行,如果行不存在,则插入行。

于 2014-07-28T12:52:07.110 回答