这就是问题所在:我有一张手术台:
key0 key1 timestamp partition_key
5 5 2020-03-03 14:42:21.548 1
5 4 2020-03-03 14:40:11.871 1
4 3 2020-03-03 14:43:47.602 2
这个目标表:
key0 key1 timestamp partition_key
5 4 2020-03-03 13:43:16.695 1
5 5 2020-03-03 13:45:24.793 1
5 2 2020-03-03 13:47:30.668 1
5 1 2020-03-03 13:48:30.669 1
4 3 2020-03-03 13:53:47.602 2
43 3 2020-03-03 14:00:14.016 2
我想得到这个输出:
key0 key1 timestamp partition_key
5 5 2020-03-03 14:42:21.548 1
5 4 2020-03-03 14:40:11.871 1
5 2 2020-03-03 13:47:30.668 1
5 1 2020-03-03 13:48:30.669 1
4 3 2020-03-03 14:43:47.602 2
43 3 2020-03-03 14:00:14.016 2
在timestamp字段中,我需要key0、key1和partition\u键时最新的记录。另外,我希望目标表中已有记录,但临时表中不存在这些记录
我首先尝试了以下查询:
select
t1.key0,
t1.key1,
t1.timestamp,
t2.partition_key
from staging_table t2
left outer join target_table t1 on
t1.key0=t2.key0 AND
t1.key1=t2.key1 AND
t1.timestamp=t2.timestamp;
3条答案
按热度按时间cuxqih211#
这看起来像一个优先级排序查询——从暂存中获取所有内容,然后从目标中获取不匹配的行。我要推荐
union all
:这确实假设暂存具有最新的行—这在示例数据中是正确的。如果不是,我会这样说:
ffscu2ro2#
你需要
FULL JOIN
:blmhpbnm3#
我想你只是想
left join
以及coalesce()
:对于中的每条记录
target_table
,这将在中搜索记录staging_table
那是一样的(key0, key1, partition_key
). 如果有这样的记录,我们就利用它timestamp
代替timestamp
从target_table
.