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 中跟踪和更新增量表的上次修改日期?
如何使用StreamSets从MySQL增量更新数据到Hive
通过 oozie 从 sqoop 作业增量导入不会更新 sqoop 元存储中的 incremental.last.value