首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Hive SQL中count( distinct ) with NULL列返回0?

在Hive SQL中,当使用count(distinct)函数对包含NULL值的列进行计数时,返回的结果为0。这是因为在Hive中,NULL值被视为未知值,不属于任何特定的值。在计算distinct时,Hive会将NULL视为一个独立的值,因此在计算count(distinct)时,NULL值会被单独计算为一个值,而不会被包括在计数结果中。

这种行为可以通过以下示例来说明:

假设有一个包含以下数据的表:

| id | name | |----|--------| | 1 | Alice | | 2 | Bob | | 3 | NULL | | 4 | Alice | | 5 | NULL |

如果我们执行以下查询:

SELECT COUNT(DISTINCT name) FROM table;

Hive将会返回结果为2,而不是3。这是因为在计算distinct时,Hive将NULL视为一个独立的值,所以只有两个不同的非NULL值(Alice和Bob)被计算在内。

在Hive中,如果想要包括NULL值在内进行计数,可以使用count(*)函数来代替count(distinct)函数。例如:

SELECT COUNT(*) FROM table;

这将返回结果为5,包括了所有行的计数,包括NULL值。

腾讯云提供了一系列的云计算产品,其中包括了适用于数据处理和分析的产品,如TencentDB、Tencent Cloud Data Lake Analytics等。您可以通过访问腾讯云官方网站(https://cloud.tencent.com/)来了解更多关于这些产品的详细信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

HIVE基础命令Sqoop导入导出插入表问题动态分区表创建HIVE表脚本筛选CSV的非文件行GROUP BYSqoop导出到MySQL字段类型问题WHERE的子查询CASE的子查询

正常清空下执行这段SQL的流程是这样的:通过kettle从数据库拿到这段SQL,然后再通过shell组件执行,并且这这段流程执行过很多次,是没有问题的。那为什么我单独把SQL拿出就报错了?..., '"', '' ) AS DOUBLE ) >0 通过将某个转换成DOUBLE值,如果转换失败会返回null。...后面的非聚合必须出现在group by,所以得这么写 SELECT c1,c2,c3, count(0) FROM table_a GROUP BY c1,c2,c3; 那能不能不 GROUP BY...SELECT c1,collect_set(c2)[0],collect_set(c3)[0], count(0) FROM table_a GROUP BY c1; 因为collect_set函数返回一个数组...count( DISTINCT IF(pl0.REL_VENDOR_ID IS NULL, pl0.VENDOR_ID, pl0.REL_VENDOR_ID ) ) count_num,

15.2K20

Hive常用性能优化方法实践全面总结

比如对于如下SQL: SELECT name FROM people; 在这种情况下,Hive可以简单地读取people对应的存储目录下的文件,然后返回数据。...因此,建议分析数据、Hive SQL语句等,了解产生数据倾斜的根本原因进行解决。 >> count(distinct) count(distinct)采用非常少的reducer进行数据处理。...示例如下: 原SQL:SELECT count(DISTINCT id) FROM people; group by替换后:SELECT count(id) FROM (SELECT id FROM...否则当数据集很小或者key的倾斜不明显时,group by还可能会比countdistinct)还慢。 此外,如何用group by方式同时统计多个?...下面提供一种SQL方案: select tmp.a, sum(tmp.b), count(tmp.c), count(tmp.d) from ( select a, b, null c, null

2.5K20

Flink SQL 成神之路(全文 18 万字、138 个案例、42 张图)

(acc.count == 0) { return null; } else { return acc.sum / acc.count; } } //...: -1 // 默认值:ERROR // 值类型:Enum【ERROR, DROP】 // 流批任务:流、批任务都支持 // 用处:表上的 NOT NULL 约束强制不能将 NULL 值插入表。...默认情况下,当 NULL 值写入 NOT NULL 时,Flink 会产生运行时异常。用户可以将行为更改为 `DROP`,直接删除此类记录,而不会引发异常。...,性能就会提升很大 ⭐ (常用)去重 filter 子句:在 count distinct 中使用 filter 子句于 Hive SQL count(distinct if(xxx, user_id...许多用户会选择 CASE WHEN 支持此功能,如下 SQL 所示: SELECT day, COUNT(DISTINCT user_id) AS total_uv, COUNT(DISTINCT

2.8K21

hive优化大全-一篇就够了

count(distinct ),在数据量大的情况下,效率较低,如果是多count(distinct )效率更低,因为count(distinct)是按group by 字段分组,按distinct...4.1裁剪   Hive 在读数据的时候,可以只读取查询中所需要用到的,而忽略其它。...例如,若有以下查询: SELECT a,b FROM q WHERE e<10; 在实施此项查询,Q 表有 5 (a,b,c,d,e),Hive 只读取查询逻辑真实需要 的 3 a、b、e,而忽略...节省了两个临时表的读写是一个关键原因,这种方式也适用于 Oracle 的数据查找工作。 SQL 具有普适性,很多 SQL 通用的优化方案在 Hadoop 分布式计算方式也可以达到效果。...原因是 Hive ,主键为 null 值的项会被当做相同的 Key 而分配进同一个计算 Map。

1.4K20

Hive性能优化(全面)

count(distinct ),在数据量大的情况下,效率较低,如果是多count(distinct )效率更低,因为count(distinct)是按group by 字段分组,按distinct字段排序...3.1裁剪 Hive 在读数据的时候,可以只读取查询中所需要用到的,而忽略其它。...例如,若有以下查询: SELECT a,b FROM q WHERE e<10; 在实施此项查询,Q 表有 5 (a,b,c,d,e),Hive 只读取查询逻辑真实需要 的 3 a、b、e,而忽略...节省了两个临时表的读写是一个关键原因,这种方式也适用于 Oracle 的数据查找工作。 SQL 具有普适性,很多 SQL 通用的优化方案在 Hadoop 分布式计算方式也可以达到效果。...原因是 Hive ,主键为 null 值的项会被当做相同的 Key 而分配进同一个计算 Map。

4.1K40

Hive性能优化统计每日IP CREATE TABLE ip_2014_12_29 AS SELECT COUNT(DISTINCT ip) AS IP FROM logdfs WHERE logda

count(distinct ),在数据量大的情况下,效率较低,如果是多count(distinct )效率更低,因为count(distinct)是按group by 字段分组,按distinct字段排序...4.1裁剪   Hive 在读数据的时候,可以只读取查询中所需要用到的,而忽略其它。...例如,若有以下查询: SELECT a,b FROM q WHERE e<10; 在实施此项查询,Q 表有 5 (a,b,c,d,e),Hive 只读取查询逻辑真实需要 的 3 a、b、e,...节省了两个临时表的读写是一个关键原因,这种方式也适用于 Oracle 的数据查找工作。 SQL 具有普适性,很多 SQL 通用的优化方案在 Hadoop 分布式计算方式也可以达到效果。...原因是 Hive ,主键为 null 值的项会被当做相同的 Key 而分配进同一个计算 Map。

1.6K50

MySQL 去重的 3 种方法​,还有谁不会?!

在 MySQL 通常是使用 distinct 或 group by子句,但在支持窗口函数的 sql(如Hive SQL、Oracle等等) 还可以使用 row_number 窗口函数进行去重。...-- 列出 task_id 的所有唯一值(去重后的记录) -- select distinct task_id -- from Task; -- 任务总数 select count(distinct...它不适合用来展示去重后具体的值,一般与 count 配合用来计算条数。 distinct 使用,放在 select 后边,对后面所有的字段的值统一进行去重。...-- 在支持窗口函数的 sql 中使用 select count(case when rn=1 then task_id else null end) task_num from (select task_id...和 group by 在去重的使用: -- 下方的分号;用来分隔行 select distinct user_id from Test;    -- 返回 1; 2 select distinct

10.1K50

最新Hive的高频面试题新鲜出炉了!

如果两张都是大表,那么采用联合key,联合key的第一个组成部分是join on的公共字段,第二部分是一个flag,0代表表A,1代表表B,由此让Reduce区分客户信息和订单信息;在Mapper同时处理两张表的信息...coalesce(T v1, T v2, …) 返回参数的第一个非空值;如果所有值都为 NULL,那么返回NULL。...④ count distinct大量相同特殊值:     count distinct 时,将值为空的情况单独处理,如果是计算count distinct,可以不用处理,直接过滤,在最后结果中加1。...18、Count(Distinct) 去重统计 数据量小的时候无所谓,数据量大的情况下,由于COUNT DISTINCT操作需要用一个Reduce Task来完成,这一个Reduce需要处理的数据量太大...,就会导致整个Job很难完成,一般COUNT DISTINCT使用先GROUP BY再COUNT的方式替换 19、笛卡尔积 尽量避免笛卡尔积,join的时候不加on条件,或者无效的on

1.1K20

【最全的大数据面试系列】Hive面试题大全

2)SQL 语句调节: ① 选用 join key 分布最均匀的表作为驱动表。做好裁剪和 filter 操作,以达到两表做 join 的时候,数据量相对变小的效果。...④ count distinct 大量相同特殊值:count distinct 时,将值为空的情况单独处理,如果是计算 count distinct,可以不用处理,直接过滤,在最后结果中加 1。...目前 Hive 将元数据存储在 RDBMS ,比如存储在 MySQL、Derby 。元数据信息包括:存在的表、表的、权限和更多的其他信息。...如果两张都是大表,那么采用联合 key,联合 key 的第一个组成部分是 join on 的公共字段,第二部分是一个 flag,0 代表表 A,1 代表表 B,由此让Reduce 区分客户信息和订单信息...coalesce(T v1, T v2, …) 返回参数的第一个非空值;如果所有值都为 NULL,那么返回 NULL

2K20

HIVE内置函数

HIVE内置函数 一、内置函数     HIVE除了提供了类似mysql的sql的语法外,还提供了大量内置的函数,方便开发者来调用,编写功能丰富的处理程序。...SQL使用”=”,不使用”==”。 A B 所有原始类型 如果A不等于B返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回NULL”。...字符串A与B通过sql进行匹配,如果相符返回TRUE,不符返回FALSE。B字符串 的”_”代表任一字符,”%”则代表多个任意字符。...,null), 100, [, 1000]) FROM twitter; 3、内置的聚合函数(UDAF) 返回类型 函数 说明 bigint count(*)  count(expr)  count(...double sum(col), sum(DISTINCT col) 求和 double avg(col), avg(DISTINCT col) 求平均值 double min(col) 返回指定中最小值

3.8K60

Hive 高频面试题 30 题

如果两张都是大表,那么采用联合key,联合key的第一个组成部分是join on的公共字段,第二部分是一个flag,0代表表A,1代表表B,由此让Reduce区分客户信息和订单信息;在Mapper同时处理两张表的信息...coalesce(T v1, T v2, …) 返回参数的第一个非空值;如果所有值都为 NULL,那么返回NULL。...④ count distinct大量相同特殊值:count distinct 时,将值为空的情况单独处理,如果是计算count distinct,可以不用处理,直接过滤,在最后结果中加1。...18、Count(Distinct) 去重统计 数据量小的时候无所谓,数据量大的情况下,由于COUNT DISTINCT操作需要用一个Reduce Task来完成,这一个Reduce需要处理的数据量太大...,就会导致整个Job很难完成,一般COUNT DISTINCT使用先GROUP BY再COUNT的方式替换,尽量避免笛卡尔积,join的时候不加on条件,或者无效的on条件,Hive只能使用1个reducer

1.3K30

Hivehive 数据倾斜、优化策略、hive执行过程、垃圾回收

(一个reduce task) count(distinct),在数据量大的情况下,容易数据倾斜,因为 count(distinct)是按 group by 字段分组,按 distinct 字段排序...①符号的,优化目的都是尽量将任务合并到一个 Job ,以减少 Job 数量,带②的优化目的是尽量减少 shuffle 数据量 2.4 hive查看执行过程 explain sql # 查看当前语句执行计算...pageid, age, count(1) FROM pv_users GROUP BY pageid, age; distinct SELECT age, count(distinct pageid...distinct userid),在数据量大的情况下,效率较低,如果是多 count(distinct userid,month)效率更低,因为 count(distinct)是按 group by 字段分组...3.16 并行化处理 一个 hive sql 语句可能会转为多个 mapreduce Job,每一个 job 就是一个 stage,这些 job 顺序执行,这个在 cli 的运行日志也可以看到。

1.3K21

数据仓库开发 SQL 使用技巧总结

左半连接与左外连接的区别是,左半连接将返回左表符合 join 条件的记录,而左外连接将返回左表所有的记录,匹配不上 join 条件的记录将返回 null 值。...如果所有的表达式都是空值,最终将返回一个空值 select coalesce(nullnull, '200') 判断语句 -- 条件判断,满足第一个表达式返回 1, 否则返回 0 select if...(1>0, 1, 0) 转行 concat_ws -- 结果: a#b#c select concat_ws('#', 'a', 'b', 'c', null) collect_list/collect_set...涉及到较为复杂或者数据较大的业务,适合业务代码分表,而且更加灵活 count(distinct) 和 group by 和 partition by(窗口函数) 区别 count(distinct) 对比...           else null            end            as create_cnt,     count(distinct reg.id) as create_cnt_al

3.1K30
领券