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

Posted 小基基o_O

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了统计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    |
+------+------+------+------+

以上是关于统计HIVE字段行数NULL行数字段重复行数的主要内容,如果未能解决你的问题,请参考以下文章

sql中 count(*) 和 count(1)什么区别?

hive mysql count distinct 多列

python统计c++源程序文件中不重复代码行数

Hbase快速统计行数

sql统计行数,但是需要去重中间的重复数据

优化 Python 中的文件和数字行数