Hive 中的增量更新

Posted

技术标签:

【中文标题】Hive 中的增量更新【英文标题】:Incremental updates in Hive 【发布时间】:2016-05-02 19:29:13 【问题描述】:

我有一个源 mysql 表。我必须将日期导出到 Hive 以进行分析。最初,当 MySQL 中的数据大小较小时,使用 Sqoop 将 Mysql 数据完全导出到 Hive 不是问题。 现在随着我的数据量增长,如何将 MySql 数据增量更新到 hive?

【问题讨论】:

【参考方案1】:

你可以使用sqoop进行增量更新,Sqoop文档很好,这里是链接 https://sqoop.apache.org/docs/1.4.2/SqoopUserGuide.html#_incremental_imports

【讨论】:

感谢您指出这一点。还有一件事。如何处理“更新的”条目,因为 Hive 仅是附加的。我们尚未迁移到支持事务的更新 Hive。 在表上创建一个配置单元视图,只产生新记录 像 select t1.* from test t1 join ( select id, max(modifed) maxModified from test group by id ) s on t1.id = s.id 和 t1.modifed = s.maxModified【参考方案2】:

这是使用 hive/spark 进行增量更新的示例。

scala> spark.sql("select * from table1").show +---+---+---------+ | id|sal|timestamp| +---+---+---------+ | 1|100| 30-08| | 2|200| 30-08| | 3|300| 30-08| | 4|400| 30-08| +---+---+---------+

scala> spark.sql("select * from table2").show +---+----+---------+ | id| sal|timestamp| +---+----+---------+ | 2| 300| 31-08| | 4|1000| 31-08| | 5| 500| 31-08| | 6| 600| 31-08| +---+----+---------+

scala> spark.sql("select b.id,b.sal from table1 a full outer join table2 b on a.id = b.id where b.id is not null union select a.id,a.sal from table1 a full outer join table2 b on a.id = b.id where b.id is null").show +---+----+ | id| sal| +---+----+ | 4|1000| | 6| 600| | 2| 300| | 5| 500| | 1| 100| | 3| 300| +---+----+

希望这个逻辑对你有用。

【讨论】:

以上是关于Hive 中的增量更新的主要内容,如果未能解决你的问题,请参考以下文章

Hive - 如何在 Hive 中跟踪和更新增量表的上次修改日期?

增量更新 Hive 表数据

如何使用StreamSets从MySQL增量更新数据到Hive

hive增量抽取方案

通过 oozie 从 sqoop 作业增量导入不会更新 sqoop 元存储中的 incremental.last.value

SQOOP增量抽取时,在HIVE中实现类似Oracle的merge操作