mysql - 如何在 Hive 中进行配对?

标签 mysql sql mapreduce hive hiveql

  1. 首先,我们通过加载以下 csv 文件创建一个 Hive 表
$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 中存在一个且 Flag=0 的 ID;而它可以包含多个 ID,每个“城市”和“邮政编码”组合的 Flag=1。

(c) 标志可以是 0 或 1

  • 将上面的 csv 文件加载到 Hive 表
  • 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 但具有相同城市 - 邮政编码的 ID 配对。如果找不到另一个具有 Flag=1 且匹配城市 - 邮政编码的配对 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 中进行这种配对,有什么有值(value)的技巧吗?

    最佳答案

    试试这个。

    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
    

    关于mysql - 如何在 Hive 中进行配对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39136460/

    相关文章:

    php - 如何找到表中的最大值,如果有相同的值,则从找到的数据中最小的ID中检索数据(mysql 5.5.36)

    sql - 如何将分钟转换为 HH :MM format

    java - 在大值中使用哪种数据结构?

    MYSQL 日期计算函数 : DATE_ADD vs simple + INTERVAL - what's the difference?

    mysql - SQL 引用失败的查询

    mysql - 如何在mysql中获取列名

    java - mapreduce 类中的奇怪错误

    python - Spark - 使用 groupBy 减少组合数量

    php - 将日期和时间转换为日期时间格式时出现问题

    mysql - 跨多个表的 SQL select 语句