【发布时间】:2018-05-17 02:29:36
【问题描述】:
我在 hive 中有一个生产表,它每天从外部源获取增量(更改的记录/新记录)数据。因为行中的值可能分布在不同的日期,例如,这就是表中记录在第一天的样子
+---+----+----+
| id|col1|col2|
+---+----+----+
| 1| a1| b1|
| 2| a2| |
| 3| | b3|
+---+----+----+
第二天,我们得到关注 -
+---+----+----+
| id|col1|col2|
+---+----+----+
| 4| a4| |
| 2| | b2 |
| 3| a3| |
+---+----+----+
which has new record as well as changed records
我想要实现的结果是,基于主键(在本例中为 id)合并行并生成和输出 -
+---+----+----+
| id|col1|col2|
+---+----+----+
| 1| a1| b1|
| 2| a2| b2 |
| 3| a3| b3|
| 4| a4| b4|
+---+----+----+
列数非常多,通常在 100-150 之间。目的是提供迄今为止收到的所有数据的最新完整视图。我怎样才能在 hive 本身内做到这一点。 (ps:不用排序)
【问题讨论】:
-
我不明白数据是什么样子的。第一天的数据第二天去哪里了?
-
对不起,我应该解释得更好。第一次的数据保留在表中,第二天的数据作为 csv 文件接收,我必须将其加载到现有的 hive 表中,以构建最终结果看起来像上面的输出
-
使用
FULL JOIN:stackoverflow.com/a/37744071/2700344 -
@leftjoin 谢谢,这确实有效
-
PK 列中的空字符串(我的意思是加入键)最好在加入前转换为 NULL,这样可以保证它们不会加入并产生倾斜和其他副作用,例如加入后的重复。
标签: sql merge hive hiveql snapshot