从hadoop更新mysql记录

oaxa6hgo  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(447)

我完成了一个读取itunesepf文件并将这些记录插入mysql数据库表的过程。
其中,在插入记录之前,我需要检查给定的记录是否存在于数据库中,如果该记录不存在,则我需要插入该记录,但如果该记录已经存在于数据库中,则需要在mysql中更新相应的记录。
如何在mysql中检查记录的存在。是否可以在mapper或reducer类中执行此检查。。?以及,如果记录存在,如何更新记录。

mwg9r5ms

mwg9r5ms1#

使用sqoop

首先,表应该有主键或唯一键。

--更新键用于更新的锚列。如果有多个列,请使用逗号分隔的列列表

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模式指定在数据库中发现具有不匹配键的新行时如何执行更新。

法律价值是:

updateonly:只更新数据库中存在的行,而忽略不存在的行。
allowinsert:如果行已经存在于数据库中,则更新行;如果行不存在,则插入行。

izj3ouym

izj3ouym2#

使用暂存表来集成来自不同平台的数据是一个更健壮的解决方案。在map阶段为每个记录查询数据库不是一个好方法,并且不能提供数据加载的一致性。所以,
在mysql的stg模式(或类似模式)中创建类似于目标表的表(带有2个add字段:“load \u ts”、“update \u ts”),
从mapred job(或sqoop,…)填充它,
使用 merge 子句(如果不存在则为模拟)来填充目标mysql表

相关问题