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

巧用Hive自带函数进行多字段分别去重计数统计 巧用Hive自带函数进行多字段分别去重计数统计 1-group by 和 distinct 大前提:大表统计能使用group by就不要使用distinct!! 尤其是在数据量非常大的时候,distinct会将所有的统计信息加载到一个reducer里取执行,这就是所谓的数据倾斜。而group by会把相同key的记录放到一个reducer区计算,因此效率会提高很多。 业务需要对一个分区内一百亿... 阅读详情

场景

源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;
```### 联合主键的情况
`i1`和`i2`是联合主键
```sql
WITH
w AS (
    SELECT
        concat(`i1`,`i2`) AS `pk`
        ,ROW_NUMBER()OVER(PARTITION BY `i1`,`i2` ORDER BY `i1`,`i2`)r
    FROM `{hive_tb}`
    WHERE ymd="{ymd}"
)
SELECT
    COUNT(1) AS target_rows                                                    -- 行数
    ,COUNT(if(`pk` IS NOT NULL AND `r`==1,1,NULL)) AS target_distinct_pk_rows  -- 非空主键去重后行数
    ,COUNT(if(`pk` IS NOT NULL AND `r`>1,1,NULL)) AS target_pk_null_rows       -- 主键重复行数
    ,COUNT(if(`pk` IS NULL,1,NULL)) AS target_pk_repetition                    -- 主键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='数据同步校验';

程序中的SQL

WITH
w AS (
    SELECT
        concat({source_primary_key}) AS `pk`
        ,ROW_NUMBER()OVER(PARTITION BY {source_primary_key} ORDER BY {source_primary_key})r
    FROM `{target_table}`
    WHERE {target_partition}="{target_partition_value}"
)
SELECT
    COUNT(1) AS target_rows                                                    -- 行数
    ,COUNT(if(`pk` IS NOT NULL AND `r`==1,1,NULL)) AS target_distinct_pk_rows  -- 非空主键去重后行数
    ,COUNT(if(`pk` IS NOT NULL AND `r`>1,1,NULL)) AS target_pk_null_rows       -- 主键重复行数
    ,COUNT(if(`pk` IS NULL,1,NULL)) AS target_pk_repetition                    -- 主键NULL行数
FROM w;

source_primary_key是源(MySQL)表主键,多个会用分隔,例如下面

`id`
`type`,`color`,`size`

MySQL主键不能为NULL

主键不能为NULL

-- 建表
CREATE TABLE t11(
 a INT(9) PRIMARY KEY,
 b CHAR(9) UNIQUE
);

-- 插入
INSERT INTO t11 VALUES (NULL,'AB');

插入报错

1048 - Column 'a' cannot be null

UNIQUE列可以为NULL且多个

INSERT INTO t11 VALUES (3,NULL);
INSERT INTO t11 VALUES (4,NULL);
SELECT * FROM t11;

联合主键中的任何列都不能为NULL

CREATE TABLE t13(
 a INT(9),
 b CHAR(9),
 c CHAR(9),
 PRIMARY KEY(a,b)
);
INSERT INTO t13 VALUES (2,NULL,'cc');
1048 - Column 'b' cannot be null

查看建表语句

SHOW CREATE TABLE t13;

最初的建表语句的主键是没写NOT NULL,但是查出来的建表语句有

CREATE TABLE `t13` (
  `a` int NOT NULL,
  `b` char(9) NOT NULL,
  `c` char(9) DEFAULT NULL,
  PRIMARY KEY (`a`,`b`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
HIVE Statistics(Hive 统计信息) 的说明和查询优化详解 本文从普通用户的角度讲述 Hive 统计信息,源代码角度请参考。 统计信息的分类 有两种统计信息,第1种为表和分区的统计信息,第2种为分区的统计信息。 表和分区的统计信息 表的统计信息 包括如下内容: numFiles – 文件的数量 numRows – 记录数量 totalSize – 总文件大小 rawDataSize – 原始数据量(因为可以压缩后存储到文件里) 对于分区表,还包括以下内容: numPartitions 1824 显示表的统计信息的语句。 des 阅读详情

相关推荐

批量查询HIVE所有表的大小和行数

需求: 批量查询HIVE表的大小 批量查询HIVE表的行数 思路 使用Python2 单表查询HIVE表的大小和行数 注意,大小并没有把副本计算在内 DESC FORMATTED 库名.表名;

ArYe 1万+

【Hive】快速查看表的行数

发现一个查看表行数的方法,即利用EXPLAIN命令,通过查看查询的执行计划中的TableScan操作中的Statistics得知数据量。 例如: [IN] explain select * from test_tab ; [OUT] ...

喜东东的博客 1万+

Hive使用order by null 结果不符合预期

Hive使用order by null 结果不符合预期

编程技术、独立开发、技术资讯以及编程感悟等内容 774

hive []里的字段计数问题

hive []里的字段计数问题@TOC 欢迎使用Markdown编辑器 例如有下面一个字段,需要计算[]中的数字个数 string1 [] [9005] [9005,9006] [9005,9001,9002,9008,9007,9004,9007,9003] [9004,9002] 看到这个问题,第一想法是计算[]中,的个数,这时可以用instr函数。 但是这个问题主要需要解决的是为空和1个数字...

zhouqi1991i的博客 1714

6Hive Sql 大全-Hive 函数

此外还有很多数学函数: 绝对值函数: abs()、正取余函数: pmod()、正弦函数: sin()、反正弦函数: asin()、余弦函数: cos()、反余弦函数: acos()、positive函数: positive()、negative函数: negative()比如,M是值为{‘f’ -> ‘foo’, ‘b’ -> ‘bar’, ‘all’ -> ‘foobar’}的map类型,那么M[‘all’]将会返回’foobar’说明:将字符串A中的符合java正则表达式B的部分替换为C。

qq_45972323的博客 1471

hive场景题

文章目录1、了解哪些窗口函数,都是什么功能?找一个在某个业务中的应用? 手写窗口函数及功能意义,同时随便写一个带窗口函数的sql,并说明其sql的含义。2、求出每个栏目的被观看次数及累计观看时长?3、编写sql实现4、编写连续7天登录的总人数:5、你知道的排名函数有哪些?说一说它们之间的区别? 文字说明即可6、编写sql语句实现每班前三名,分数一样不并列,同时求出前三名按名次排序的一次的分差:7、对于行列互换,你有哪些解决方式,详细说明每一种方式? 使用语言描述即可8、编写sql实现行列互换。数据如下:9、

灰哀之雪的博客 1083

Hive 窗口函数详解

目录1、hive窗口函数2、在日常的开发中常用那些类型函数?3、了解哪些窗口函数,都是什么意思?窗口函数功能over语法1、物理窗口(真实往上下移动多少行rows between):2、 逻辑窗口(满足条件上下多少行):(金融行业、保险行业、p2p等)4、窗口聚合函数count开窗函数sum开窗函数avg开窗函数min开窗函数max开窗函数5、窗口分析函数first_value开窗函数last_value开窗函数lag开窗函数lead开窗函数cume_dist开窗函数6、窗口排序函数rank开窗函数dens

雾岛与鲸的博客 7714

iTunes登录协议全解析:从抓包到签名验证(含HTTPDebugger避坑指南)

本文深入解析了iTunes登录协议的核心流程,包括sign-sap-setup-cert和sign-sap-setup-buffer等关键请求,并提供了使用HTTPDebugger等工具进行抓包分析时绕过反调试检测的实战技巧与避坑指南。文章详细拆解了PLIST编解码、请求签名验证机制及密码加密逻辑,为网络安全研究和协议逆向提供了完整的技术路径。

weixin_29224309的博客 331

关于Mysql的count统计

关于Mysql的count统计知识摘录

zmm0420的专栏 1342

从Xilinx FPGA到MIPI DSI LCD屏:手撸代码的实战经验分享

本文分享了使用Xilinx FPGA驱动MIPI DSI LCD屏的实战经验。作者从依赖官方IP核失败,到与底层D-PHY IP缠斗,最终通过手撸代码,直接配置GTY收发器原语并实现完整的D-PHY与DSI协议栈,成功点亮屏幕。文章详细剖析了协议细节、Vivado工具链的调试技巧与避坑指南,为FPGA工程师提供了从理论到实践的宝贵参考。

weixin_29188997的博客 400

OpenMythos深度解析

本文深入解析了kyegomez/OpenMythos项目如何从第一性原理重建Claude Mythos的核心架构。该项目并非直接复制Claude,而是基于公开论文和实验结果推测其可能的设计理念,构建了包含多模态注意力、深度推理引擎、知识检索模块等六大核心组件的模块化架构。重点剖析了分组查询注意力(GQA)的实现细节,展示了KV头扩展等关键技术。该项目已成为大模型开源社区最受关注的研究之一,为理解Claude的架构思想提供了有价值的参考。

Crown_22的博客 518

hive 查询

hive select查询

qq_43192537的博客 1025

西门子交换机环网冗余设置(实战篇2.2)

MRP的重组时间为 200ms 因此 PROFINET 通信必须选择大于 200ms 的看门狗时间,看门狗。ET200SP默认为 2ms*3=6ms) MRP 的重组时间为 200ms 故系统会报出看门狗超时。更新,默认是 3 个周期,超出设置的周期数就会报 IO 设备故障。时间不是直接配置的,而是作为没有 IO 数据可接受的更新周期,也就是允许几个周期没有数据。来达到大于 200ms 的看门狗时间的要求(看门狗时间 可接受更新周期数 更新时间)。是IO 控制器和 IO 设备)

weixin_42580591的博客 369

Hive使用语句

连接语句 left outer join 和left join是一样的。 left join 包含左表的所有行。 排序 分区排序,全局排序, MapReduce中的内部排序 https://blog.youkuaiyun.com/qq_43192537/article/details/102293995 修改表字段类型 https://blog.youkuaiyun.com/glittledream/article/details/84789571 Alter table 表名 change column 原字段名称

doswynkfsw的博客 1963

手把手教你编写PCIe设备驱动:基于Linux内核的实战教程

本文详细介绍了基于Linux内核的PCIe设备驱动开发全流程,包括环境准备、设备探测、中断处理、DMA配置等核心内容。通过实战代码示例和Makefile编写指南,帮助开发者快速掌握PCIe驱动开发技术,实现高性能设备驱动开发与优化。

weixin_30687051的博客 194

OpenStack 之 Epoxy版本 部署实战

OpenStack Epoxy 是 OpenStack 的第 31 个版本,其版本号为 2025.1,于 2025 年 4 月 2 日正式发布。

求知若渴,虚心若愚。 236

Hive中LEFT JOIN与LEFT SEMI JOIN的区别与原理详解

Hive中LEFT JOIN和LEFT SEMI JOIN的主要区别在于:LEFT JOIN返回左表所有记录及右表匹配记录(右表无匹配则填充NULL),结果可能包含重复行;LEFT SEMI JOIN仅返回左表中匹配右表的记录(不返回右表列),且自动去重。性能方面,LEFT SEMI JOIN通常更高效,尤其在仅需判断存在性时,它能在Map阶段完成过滤,避免数据膨胀和Reduce阶段开销。建议根据需求选择:需要右表数据时用LEFT JOIN,仅需判断存在性时优先使用LEFT SEMI JOIN。

只分享真·实战干货——那些让我从“还能这样”变成“原来如此”的坑。 1302

永磁同步电机MTPA控制详解:从理论到实践的全方位指南

永磁同步电机(PMSM)凭借其高功率密度卓越的效率以及精准的控制性能,已在工业驱动、电动汽车和家用电器等领域获得广泛应用。而在PMSM的诸多控制策略中,最大转矩电流比(MTPA)控制因其能显著提升电机效率而占据核心地位。在输出特定转矩时,通过优化直轴电流(Id)和交轴电流(Iq)的分配,使定子电流的幅值最小化。对于电机测试工程师而言,理解MTPA意味着掌握了一把提升系统性能的关键钥匙。为什么这一点如此重要?因为定子电流的减小直接带来了铜损的降低。

优快云-新能源汽车研发测试专业博主 520

hive函数

目录1、Hive函数介绍以及内置函数查看1)查看系统自带的函数2)显示自带的函数的用法3)详细显示自带的函数的用法2、常用函数介绍关系运算1、等值比较: =2、不等值比较: <>3、小于比较: <4、小于等于比较: <=5、大于比较: >6、大于等于比较: >=7、空值判断: IS NULL8、非空判断: IS NOT NULL9、LIKE比较: LIKE10、JAVA的LIKE操作: RLIKE11、REGEXP操作: REGEXP数学运算:1、加法操作: +2、减法操

qq_32603475的博客 3572

SAP-ABAP:接口多继承与复合接口设计:复杂业务场景下的能力组合实现方案

本文介绍了ABAP中通过接口多继承与复合接口设计实现能力组合的方案。文章首先辨析了类实现多个接口与接口继承接口的核心概念,指出ABAP虽不支持类多继承,但可通过这两种机制灵活组合能力。随后详细讲解了类实现多个接口的语法规则与三种调用方式,并给出了五个基础能力接口的设计示例(日志记录、权限校验、数据导出、消息通知、格式转换)。作者通过对比单继承与接口多重实现的差异,强调后者在解耦和扩展性上的优势,为复杂业务场景下的能力组合提供了实用解决方案。

baidu_35680696的博客 248

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【HIVE】四_(1) Hive 七种 JOIN 的区别:NULL 匹配规则与结果对比

通过 orders 和 users 示例表对比 Hive 中 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN、CROSS JOIN、LEFT SEMI JOIN 等 JOIN 类型的匹配规则与结果差异。

qq_46126258的博客 181

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Hive面试基础

文章目录hadoop中两个⼤表实现join的操作Hive中存放是什么?Hive与关系型数据库的关系?Hive中的排序关键字有哪些?⼤表和⼩表join数据清洗怎么做的?怎么⽤spark做数据清洗?hive优化有哪些?分析下hive数据倾斜问题,有什么解决⽅案?数据中的null,在hive底层如何存储?Hive内外部表的区别?hive 是如何实现分区的?请谈⼀下hive的特点是什么?hive和RDBMS有什么异同? hadoop中两个⼤表实现join的操作 Hive中可以通过分区来减少数据量; 通过优化HQL

weixin_48978790的博客 2081

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Hive Sql 性能优化——看这一篇就够啦!

今天听组内SQL小王子分享了一篇Hive Sql性能优化的总结报告,甚觉精彩,赶紧来分享给大家!! 一、尽量使用索引,避免全表查询 ① 在where 和 order by 常用的字段上创建索引,提升效率的核心! ② where子句中尽量避免进行nul值判断,少使用!=,<>等操作符,等号左边避免函数、算数和其它表达式运算,这此操作都会导致索引无效,启动全表查询 ③ where 子句中将...

cindy407的博客 1万+

Hive多表查询实战:用Python学生人数统计,手把手教你搞定JOIN与GROUP BY

本文详细介绍了如何使用Hive进行多表查询,通过Python学生人数统计的实战案例,手把手教你掌握JOIN与GROUP BY的核心技巧。文章涵盖业务需求分析、查询逻辑设计、SQL语句编写及优化策略,帮助数据分析师高效处理复杂数据关联任务。

weixin_30875157的博客 623

Hadoop之旅--HIVE的一些技巧

ty_id, cast(property_id as string) as property_id, cast(0 as string) as ipv, cast(0 as string) as ipvuv, (二)union all字段名称一致 UNION ALL必须要让union的各个表保持字段名称一样 案例: cast(category_level as string) as category_id

weixin_42098860的博客 189

hive的多维度分析函数with cube和grouping__id的理解

hive的多维度分析函数with cube和grouping__id的理解

ZH519080的博客 2818
上一篇: 梳理MySQL数据逻辑和元数据的技巧
下一篇: MySQL数据同步到HIVE,自动生成MySQL表对应HIVE的建表语句
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值