我有2个hive表T1和T2,它们都有不同的ID。
T1: ID1 | value1
T2: ID2 | value2
我想加入T1和T2。对于T1中的每个value1,我需要添加ID2(恰好是一个,之前没有使用过),其中ABS(value1-value2)是最小的。 例如,T1看起来像:
ID1 | value1
1 | 20
2 | 17
3 | 10
和T2:
ID2 | value2
a | 19
b | 12
c | 14
d | 8
结果应该是:
ID1 | value1 | ID2
1 | 20 | a
2 | 17 | c
3 | 10 | b
我理解HiveQL与SQL相比有一些限制。 但SQL解决方案也可以工作,只是想知道如何做到这一点。
答案 0 :(得分:0)
这在Hive中难以解决,因为您必须完成所有组合(交叉产品)才能获得最小的差异。如果您将要求“完全一个并且之前未使用”,那么您可以尝试这样的事情。
select ID1, value1, ID2 from
(
select ID1, value1, ID2, value2, row_number() over (partition by value1 order by diff asc) as lessdiff from
(
select ID1, abs(value1 - value2) as diff, ID2 , value1, value2 from t1 join t2 on 1=1
) X1
)
X2 where lessdiff = 1;