统计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行数字段重复行数的主要内容,如果未能解决你的问题,请参考以下文章