如何在Hive中进行配对?

时间:2016-08-25 03:56:05

标签: mysql sql mapreduce hive hiveql

  1. 首先,我们通过加载以下csv文件
  2. 来创建一个配置单元表
    $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"组合,最多有一个ID,其中Flag = 0;虽然它可以包含多个ID,其中Flag = 1,每个" City"和" Zip"组合

    (c)标志可以是0或1

    1. 将上面的csv文件加载到配置单元
    2. 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;
      
      1. 对于Flag = 0的每个ID,我们希望将其与Flag = 1但具有相同City - Zip的另一个ID配对。如果找不到另一个带有Flag = 1和匹配的City - Zip的配对ID,我们只删除该记录。
      2. 以下是预期结果:

        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中进行此配对的任何有价值的提示?

1 个答案:

答案 0 :(得分:0)

试试这个。

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