如何在hive中进行配对?

qyswt5oh  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(313)

首先,我们通过加载下面的csv文件来创建一个配置单元表

$cat data.csv

ID,City,Zip,Flag
1,A,95126,0
2,A,95126,1
3,A,95126,1
4,B,95124,0
5,B,95124,1
6,C,95124,0
7,C,95127,1
8,C,95127,0
9,C,95127,1

(a) 其中,上面的“id”是主键(唯一),
(b) 对于每个“city”和“zip”组合,max中有一个id,flag=0;而对于每个“城市”和“邮政编码”组合,它可以包含多个flag=1的id。
(c) 标志可以是0或1
将上面的csv文件加载到配置单元表

create table test(ID string, City String, Zip String, Flag int) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY "," ;

LOAD DATA LOCAL INPATH "./data.csv" OVERWRITE INTO TABLE test;

对于每个flag=0的id,我们希望将其与另一个flag=1但具有相同城市-zip的id配对。如果找不到另一个flag=1且匹配city-zip的配对id,我们就删除该记录。
预期结果如下:

ID,City,Zip,Flag
1,A,95126,0
2,A,95126,1
4,B,95124,0
5,B,95124,1
7,C,95127,1
8,C,95127,0

如何在hive或python中进行这种配对,有什么有用的技巧吗?

eagi6jfj

eagi6jfj1#

试试这个。

select t2.*
FROM
test t1 INNER JOIN test t2
ON t1.City != t2.City
AND t1.Zip != t2.Zip
AND t1.Flag != t2.Flag
AND t1.ID<t2.ID

相关问题