Hive

您所在的位置:网站首页 hive表数据量太大,如何查询 Hive

Hive

2024-07-14 00:16| 来源: 网络整理| 查看: 265

Count(Distinct) 去重统计

Count(Distinct)只会开启一个reduce.如果数据量大的话,这个Job很难完成。

数据量小的时候无所谓,数据量大的情况下,由于 COUNT DISTINCT 操作需要用一个 Reduce Task 来完成,这一个 Reduce 需要处理的数据量太大,就会导致整个 Job 很难完成, 一般 COUNT DISTINCT 使用先 GROUP BY 再 COUNT 的方式替换,但是需要注意 group by 造成 的数据倾斜问题.

(1)案例实操 1)创建一张大表

hive (default)> create table bigtable(id bigint, time bigint, uid string, keyword string, url_rank int, click_num int, click_url string) row format delimited fields terminated by '\t';

(2)加载数据

hive (default)> load data local inpath '/opt/module/data/bigtable' into table bigtable;

(3)设置 5 个 reduce 个数

set mapreduce.job.reduces = 5;

(4)执行去重 id 查询

hive (default)> select count(distinct id) from bigtable;

(5)采用 GROUP by 去重 id

hive (default)> select count(id) from (select id from bigtable group by id) a;

总结: 在数据量比较大的情况下,要做去重,是不建议采用count(distinct)去做去重, count(distinct)只会开启一个reduce来进行输出的,会发生数据倾斜。这个时候建议采用的是group by的方法来做处理。采用group by的话,group by 的字段会作为key,这个key会被分配到不同的reduce里面,在每个reduce里面做并行去重,最后再聚合输出。 虽然会多用一个 Job 来完成,但在数据量大的情况下,这个绝对是值得的。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3