Hive 重复数据去重

hive中去重的代码:

  1. insert overwrite table store  
  2.   select t.p_key,t.sort_word from   
  3.     ( select p_key,  
  4.            sort_word ,  
  5.            row_number()over(distribute by p_key sort by sort_word) as rn  
  6.      from store) t  
  7.      where t.rn=1;

 

Hive上一个典型表内除重的写法, p_key为除重依据, sort_word 为排序依据,一般为时间   rn为排名。 这里就留下第一名

参考地址:http://blog.youkuaiyun.com/limao314/article/details/14126391

 

### 在 Hive 中对字符串进行处理的方法 在 Hive 中,可以使用 `collect_set` 函数来实现字符串的操作。该函数会自动去除重复值并返回一个集合[^4]。以下是一个具体的示例: #### 示例代码 ```sql WITH temp AS ( SELECT 'apple' AS fruit UNION ALL SELECT 'banana' UNION ALL SELECT 'apple' UNION ALL SELECT 'orange' ) SELECT collect_set(fruit) AS unique_fruits FROM temp; ``` 上述代码中,`collect_set(fruit)` 会对 `fruit` 列中的值进行,并返回一个包含唯一值的数组[^4]。 #### 结果说明 执行上述查询后,`unique_fruits` 的结果将是 `["apple", "banana", "orange"]`,其中所有重复的值已被移除。 #### 如果需要将后的结果拼接为字符串 可以结合 `concat_ws` 函数将后的数组转换为以指定分隔符连接的字符串[^4]。例如: ```sql WITH temp AS ( SELECT 'apple' AS fruit UNION ALL SELECT 'banana' UNION ALL SELECT 'apple' UNION ALL SELECT 'orange' ) SELECT concat_ws(',', collect_set(fruit)) AS unique_fruits_concat FROM temp; ``` 在此查询中,`concat_ws(',', collect_set(fruit))` 将后的数组以逗号为分隔符连接成一个字符串[^4]。 #### 处理 NULL 值的情况 如果数据中包含 `NULL` 值,`collect_set` 函数会自动忽略这些 `NULL` 值[^4]。如果需要将 `NULL` 值替换为特定字符串,可以使用 `NVL` 函数[^5]。例如: ```sql WITH temp AS ( SELECT 'apple' AS fruit UNION ALL SELECT NULL UNION ALL SELECT 'banana' UNION ALL SELECT 'apple' ) SELECT concat_ws(',', collect_set(NVL(fruit, 'unknown'))) AS unique_fruits_concat FROM temp; ``` 在此查询中,`NVL(fruit, 'unknown')` 将 `NULL` 值替换为字符串 `'unknown'`[^5]。 #### 注意事项 - 如果需要保留重复值,则应使用 `collect_list` 函数代替 `collect_set`[^4]。 - `collect_set` 和 `collect_list` 都是聚合函数,因此必须在 `GROUP BY` 或整个表上使用[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值