hive count 统计null吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive count 统计null吗相关的知识,希望对你有一定的参考价值。

count(*)计算的时候包含了NULL值,而count(expr)则不包含空值

    count(*) - Returns the total number of retrieved rows, including rows containing NULL values;  

    count(expr) - Returns the number of rows for which the supplied expression is non-NULL;  

    count(DISTINCT expr[, expr]) - Returns the number of rows for which the supplied expression(s) are unique and non-NULL. 

参考技术A 看你的where条件了
如果没有where条件约束的话,肯定统计null了本回答被提问者采纳

统计HIVE字段行数NULL行数字段重复行数

文章目录

场景

源MySQL数据导入HIVE数据仓库ODS层后,统计主键行数、主键NULL行数、主键重复行数

统计HIVE表主键行数、主键NULL行数、主键重复行数的SQL

-- 统计HIVE表源MySQL主键行数、主键NULL行数、主键重复行数
WITH
w AS (
    SELECT
        `id`
        ,ROW_NUMBER()OVER(PARTITION BY `id` ORDER BY `id`)r
    FROM `hive_tb`
    WHERE ymd="ymd"
)
SELECT
    COUNT(1)                                       -- 行数
    ,COUNT(if(`id` IS NOT NULL AND `r`==1,1,NULL)) -- 非空主键去重后行数
    ,COUNT(if(`id` IS NULL,1,NULL))                -- 主键NULL行数
    ,COUNT(if(`id` IS NOT NULL AND `r`>1,1,NULL))  -- 主键重复行数
FROM w;

测试

-- 建表测试
DROP TABLE IF EXISTS `temp_test`;
CREATE TABLE `temp_test`(
    `id`      STRING  COMMENT '主键'
) COMMENT '测试'
PARTITIONED BY (`ymd` STRING);
-- 插入数据
INSERT OVERWRITE TABLE `temp_test` PARTITION(ymd="2022-04-17")
VALUES ("1"),("2"),("3"),(NULL),("3"),("3"),(NULL),("4");
-- 查询数据
SELECT * FROM `temp_test`;
-- 统计HIVE表源MySQL主键行数、主键NULL行数、主键重复行数
WITH
w AS (
    SELECT
        `id`
        ,ROW_NUMBER()OVER(PARTITION BY `id` ORDER BY `id`)r
    FROM `temp_test`
    WHERE ymd="2022-04-17"
)
SELECT
    COUNT(1)                                       -- 行数
    ,COUNT(if(`id` IS NULL,1,NULL))                -- 主键NULL行数
    ,COUNT(if(`id` IS NOT NULL AND `r`>1,1,NULL))  -- 主键重复行数
    ,COUNT(if(`id` IS NOT NULL AND `r`==1,1,NULL)) -- 非空主键去重后行数
FROM w;

样本

+---------------+----------------+
| temp_test.id  | temp_test.ymd  |
+---------------+----------------+
| 1             | 2022-04-17     |
| 2             | 2022-04-17     |
| 3             | 2022-04-17     |
| NULL          | 2022-04-17     |
| 3             | 2022-04-17     |
| 3             | 2022-04-17     |
| NULL          | 2022-04-17     |
| 4             | 2022-04-17     |
+---------------+----------------+

样本计算结果

+------+------+------+------+
| _c0  | _c1  | _c2  | _c3  |
+------+------+------+------+
| 8    | 2    | 2    | 4    |
+------+------+------+------+

Appendix

统计HIVE主键的行数、NULL行数、重复行数,可用于数据同步校验
可用MySQL存储每天校验结果,DDL 如下:

CREATE TABLE checkout_synchronism(
 -- 基础信息
 source_host VARCHAR(255) NOT NULL COMMENT '源地址',
 source_type VARCHAR(255) NOT NULL COMMENT '源类型',
 source_database_name VARCHAR(255) NOT NULL COMMENT '源库名',
 source_table_name VARCHAR(255) NOT NULL COMMENT '源表名',
 source_primary_key VARCHAR(255) NOT NULL COMMENT '主键',
 source_increment_tag VARCHAR(255) NOT NULL COMMENT '源表增量标识',
 target_database VARCHAR(255) NOT NULL COMMENT '目标库',
 target_table VARCHAR(255) NOT NULL COMMENT '目标表',
 target_partition VARCHAR(255) NOT NULL COMMENT '分区键',
 target_partition_value VARCHAR(255) NOT NULL COMMENT '分区值',
 -- 度量值
 source_rows BIGINT NOT NULL COMMENT '源表行数',
 target_rows BIGINT NOT NULL COMMENT '目标表行数',
 target_distinct_pk_rows BIGINT NOT NULL COMMENT '目标表非空主键去重后行数',
 target_pk_null_rows INT NOT NULL COMMENT '目标表主键null',
 target_pk_repetition INT NOT NULL COMMENT '目标表主键重复',
 update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
 -- 主键
 primary key (target_database,target_table)
)COMMENT='数据同步校验';

以上是关于hive count 统计null吗的主要内容,如果未能解决你的问题,请参考以下文章

hive mysql count distinct 多列

子查询分组后主查询怎么接收count

统计HIVE字段行数NULL行数字段重复行数

统计HIVE字段行数NULL行数字段重复行数

mysql的那点事儿,你知道吗

MySQL中count使用总结