Hive SQL 表中去重复

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive SQL 表中去重复相关的知识,希望对你有一定的参考价值。

比如,表A中有user_id和shop_id两个字段,现要求去除表A中user_id和shop_id两个字段都相同的记录,只保留一个,sorry 没有分了,xiexie了【可怜】!!!

参考技术A 抱歉,来晚了。SELECT user_id, shop_id FROM goods GROUP BY user_id, shop_id;

从 Hive 表中获取与重复行的差异

【中文标题】从 Hive 表中获取与重复行的差异【英文标题】:Getting set difference with duplicate rows from Hive tables 【发布时间】:2020-03-31 11:06:55 【问题描述】:

我有两个 Hive 表:Table1、Table2。 Table1 有重复的行,Table2 没有。我想从 Table1 中获取 Table2 中不存在的缺失数据,包括重复项。如何在 Hive 查询语言中完成这项工作?

例子:

表1数据:

Col1,Col2
A1,V1
A1,V1
A2,V2
A3,V3
A3,V3
A3,V3
A4,V4

表2数据:

Col1,Col2
A1,V1
A2,V2
A3,V3

我想从 Table1 中获取以下缺失数据:

Col1,Col2
A1,V1
A3,V3
A3,V3
A4,V4

【问题讨论】:

【参考方案1】:

你可以使用类似的东西:

with t1 as (
  select 'A1' col1,'V1' col2 union all
  select 'A1' col1,'V1' col2 union all
  select 'A2' col1,'V2' col2 union all
  select 'A3' col1,'V3' col2 union all
  select 'A3' col1,'V3' col2 union all
  select 'A3' col1,'V3' col2 union all
  select 'A4' col1,'V4' col2
),
t2 as (
  select 'A1' col1,'V1' col2 union all
  select 'A2' col1,'V2' col2 union all
  select 'A3' col1,'V3' col2
),
t1_with_rn as (
  select t1.*, row_number() over(partition by t1.col1, t1.col2) rn from t1
)
select 
  t1_with_rn.col1, t1_with_rn.col2
from 
  t1_with_rn
  left join t2 on (t1_with_rn.col1 = t2.col1 and t1_with_rn.col2 = t2.col2 and t1_with_rn.rn = 1)
where
  t2.col1 is null and t2.col2 is null

【讨论】:

谢谢,这行得通。但是,我的表有数百万行。那么,让我们看看它的表现如何。

以上是关于Hive SQL 表中去重复的主要内容,如果未能解决你的问题,请参考以下文章

sql语句查询过滤重复数据

从 Hive 表中获取与重复行的差异

如何删除单元格 Hive 表中的重复值

sql语句去重

SQL优化之正确去重

一个sql解决表中重复数据问题