hive size()统计长度问题

hive官网描述:
在这里插入图片描述
size()方法:用于获取泛型集合有多少个元素
例:

select size(array('a','b','c','d')) ;
结果:4

需要注意问题:当array或者map为null时,size的值为1。会导致统计结果出现误差
例:

select  size(split('a,b,c,d',','))        -- 正常情况
       ,if(length('a,b,c,d')==0,0,size(split('a,b,c,d',','))) -- 添加判断
       ,size(array(null))   -- 为null的情况
       ,size(collect_set(concat_ws(',',null))) -- 为null的情况
    ,if(length(concat_ws(',',null))==0,0,size(collect_set(concat_ws(',',null)))) -- 添加判断
      ;
    结果: 4 4 1 1 0

官网链接: link.

### 提升Hive Size操作性能的方法 #### 使用向量化执行引擎提升查询速度 为了加速数据处理流程,启用Vectorized Execution Engine是一个有效手段。该特性通过批处理大量行来减少解释开销并利用现代CPU指令集增强计算密集型任务的表现[^1]。 ```sql SET hive.vectorized.execution.enabled = true; ``` #### 启用基于成本的优化(Cost-Based Optimization, CBO) CBO能够根据表统计信息自动选择最优执行路径,对于涉及复杂条件判断以及多表关联的情况尤为有用。确保数据库中的表已收集足够的统计数据以便让CBO做出更明智的选择。 ```sql ANALYZE TABLE table_name COMPUTE STATISTICS; ``` #### 配置合理的Reducer数量以平衡负载 适当调整`hive.exec.reducers.bytes.per.reducer`参数可帮助控制每个reducer接收的数据量大小,默认情况下此值设得较低可能导致过多的小文件生成影响整体性能。依据实际业务场景合理估算每条记录平均占用空间后进行相应配置能显著改善作业运行效率[^2]。 ```sql SET hive.exec.reducers.bytes.per.reducer=67108864; -- 设置为64MB/record作为示例 ``` #### 处理数据倾斜现象防止资源浪费 针对存在key分布不均而导致的部分reduce task耗时过长问题,可以通过开启skewed join功能使第一次map reduce阶段实现初步汇总降低后续stage压力。这一步骤有助于缓解因个别键值过度集中造成的瓶颈效应,进而加快整个ETL流程的速度[^3]。 ```sql SET hive.groupby.skewindata=true; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值