统计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;
```### 联合主键的情况
`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_
<think>好的,我需要帮助用户解决在Hive统计字段长度的问题。首先,用户明确询问的是使用哪个函数或方法,所以我应该直接回答Hive中的相关函数。根据之前的引用,特别是引用[2]和[3],提到了LENGTH函数,这是关键点。接下来,我需要确保回答符合系统级指令的要求。比如,所有行内数学表达式要用$...$,但这里可能不太涉及数学公式,但要注意中文回答和结构清晰。用户可能需要具体的示例代码,所以应该提供基本的用法、筛选数据、处理多列以及结合其他函数的例子。然后,生成相关问题。根据用户的问题,相关的问题可能包括如何筛选特定长度的数据、处理多列、性能优化以及与其他函数的结合使用。这些都需要从之前的引用中提取,比如引用[3]提到了数据清洗和应用场景,可以引申出相关问题。 同时,需要正确引用站内的内容。例如,引用[2]和[3]直接提到了LENGTH函数的使用方法,所以要在回答中标注这些引用。注意引用标识要自然地添加在段落末尾,比如在提到基本用法时引用[^2],在数据清洗时引用[^3]。 另外,要检查是否有其他可能的函数,比如CHAR_LENGTH,但根据引用[4]中的内容,可能没有提到,所以主要围绕LENGTH函数展开。确保回答正确,没有语法错误,并且示例代码正确无误。最后,组织回答结构,先明确回答函数是LENGTH,然后分步骤说明用法,给出示例,再讲应用场景,最后相关问题。这样用户能够逐步理解和应用。</think>在Hive统计字段长度的标准方法是使用`LENGTH()`函数,该函数返回字符串的字符数。以下是具体使用方法与应用场景说明: ### 一、基本用法 语法格式: ```sql SELECT LENGTH(字段名) AS 长度别名 FROM 表名; ``` 示例: ```sql SELECT username, LENGTH(username) AS name_length FROM user_profiles; -- 统计用户名字段长度[^2] ``` ### 二、进阶应用 1. **筛选特定长度数据** 通过WHERE子句过滤长度异常数据: ```sql SELECT * FROM logs WHERE LENGTH(error_message) > 100; -- 筛选错误信息超长的记录[^3] ``` 2. **多字段长度统计** 支持同时计算多个字段: ```sql SELECT LENGTH(address) AS addr_len, LENGTH(phone) AS phone_len FROM contacts; ``` 3. **结合其他函数使用** 可与TRIM配合处理带空格的字段: ```sql SELECT LENGTH(TRIM(description)) FROM products; ``` ### 三、注意事项 - 该函数仅适用于STRING/VARCHAR类型字段 - 中文等多字节字符按字符计数(如"你好"返回2) - 空值返回NULL,可用NVL处理:`LENGTH(NVL(col, ''))` ### 四、应用场景 1. 数据质量校验:检测字段长度是否符合业务规则 2. 异常数据清洗:识别超长/过短的无效数据[^3] 3. 存储优化:分析字段实际长度分布,优化表结构设计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小基基o_O

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

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

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

打赏作者

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

抵扣说明:

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

余额充值