hive count distinct

select count(distinct user_id) from dm_user where ds=20150701;

使用disticnt函数,所有的数据只会shuffle到一个reducer上,导致reducer数据倾斜严重

优化后为

set mapred.reduce.tasks=50;

select count(*) from

(select user_id from dm_user where ds=20150701 group by user_id)t;

order by全局排序,只有一个reduce

sort by 在一个reduce中排序,distribute by 按字段分为不同的reduce

distribute by 先分为不同的reduce排序,之后在reduce内部排序

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-30 07:55:08

hive count distinct的相关文章

Hive语法层面优化之四count(distinct)引起的数据倾斜

当该字段存在大量值为null或空的记录,容易发生数据倾斜: 解决思路: count distinct时,将值为空的情况单独处理,如果是计算count distinct,可以不用处理,直接过滤,在最后结果中加1: 如果还有其他计算,需要进行group by,可以先将值为空的记录单独处理,再和其他计算结果进行union. 案例: select count(distinct end_user_id) as user_num from trackinfo; 调整为: select cast(count(

mysql count distinct 统计结果去重

mysql的sql语句中,count这个关键词能统计表中的数量,如 有一个tableA表,表中数据如下: id name age 1 tony 18 2 jacky 19 3 jojo 18 SELECT COUNT(age) FROM tableA 以上这条语句能查出table表中有多少条数据.查询结果是3 而COUNT这个关键词与 DISTINCT一同使用时,可以将统计的数据中某字段不重复的数量. 如: SELECT COUNT(DISTINCT age) from tableA 以上语句的

SQL Server ->> 间接实现COUNT(DISTINCT XXX) OVER(PARTITION BY YYY ORDER BY ZZZ)

SQL Server 2005版本开始支持了窗口函数(Windowing Function)和OVER字句.SQL Server 2012版本开始支持了窗口函数的ORDER BY字句实现连续/累计聚合功能.但是有个功能到SQL Server 2014版本为止(从目前SQL Server 2016 CTP3来看,还是不支持),就是COUNT(DISTINCT XXX) OVER(PARTITION BY YYY ORDER BY ZZZ). 一直觉得这个事情没有办法用比较巧妙地办法做到,只能是用C

"HybridDB · 性能优化 · Count Distinct的几种实现方式” 读后感

原文地址:HybridDB · 性能优化 · Count Distinct的几种实现方式 HybridDB是阿里基于GreenPlum开发的一款MPP分析性数据库,而GreenPlum本身基于PostgreSQL. 如此,HybridDB的优化思路和手段难免会受到PostgreSQL影响和限制. 文中的语句最终优化得到了几个不同计划,其优化的语句简化后形如 select count(distinct c1) from t group by c2; 这条语句在HybridDB下实现: 每个服务器自

COUNT(*),count(1),COUNT(ALL expression),COUNT(DISTINCT expression)

创建一个测试表 1 IF OBJECT_ID( 'dbo.T1' , 'U' 2 )IS NOT NULL 3 BEGIN 4 DROP TABLE dbo.T1; 5 END; 6 GO 7 CREATE TABLE dbo.T1( column_1 int ,column_2 varchar(30)); 8 GO 9 10 11 INSERT INTO dbo.T1( column_1 , column_2 ) 12 VALUES( 1 , '123') , ( 2 , '1234') ,

Mysql中count(*),DISTINCT的使用方法和效率研究

在处理一个大数据量数据库的时候突然发现mysql对于count(*)的不同处理会造成不同的结果 比如执行SELECT count(*) FROM tablename即使对于千万级别的数据mysql也能非常迅速的返回结果而对于SELECT count(*) FROM tablename WHERE.....mysql的查询时间开始攀升 仔细查阅累下手册,发现当没有WHERE语句对于整个mysql的表进行count运算的时候MyISAM类型的表中保存有总的行数,而当添加有WHERE限定语句的时候My

使用子查询可提升 COUNT DISTINCT 速度 50 倍

Count distinct是SQL分析时的祸根 首先:如果你有一个大的且能够容忍不精确的数据集,那像HyperLogLog这样的概率计数器应该是你最好的选择.但对于需要快速.精准答案的查询,一些简单的子查询可以节省你很多时间. 让我们以我们一直使用的一个简单查询开始:哪个图表的用户访问量最大? select dashboards.name, count(distinct time_on_site_logs.user_id) from time_on_site_logs join dashboa

php查询mysql时,报超出内存错误(select count(distinct))时

学时服务器查询教练所带人数时,使用select count(distinct(u_STRNO))时报超出内存错误.后参考“mysqld-nt: Out of memory解决方法”http://jingyan.baidu.com/article/020278116b428d1bcd9ce568.html?qq-pf-to=pcqq.c2c 修改参数: key_buffer            = 512K    #global buffer   => key_buffer           

SQL Server select count(distinct *)

测试表:student select * from studnet; .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csha