美文网首页
hive 实用技能

hive 实用技能

作者: 天之見證 | 来源:发表于2018-07-12 16:29 被阅读0次

1. 注意点

1.正则转义,反向引用

select regexp_replace('lat:test,lon:test,province:prov,city:city,area:area,cnt:3','.*province:([\\w]+),city:([\\w]+),area:([\\w]+),.*','$1 $2 $3');
-- prov city area
  1. hive自己本身的正则规范
  2. shell脚本中,hive正则的规范
#!/bin/sh
hive -v -e "
select regexp_replace('lat:test,lon:test,province:prov,city:city,area:area,cnt:3','.*province:([\\\\w]+),city:([\\\\w]+),area:([\\\\w]+),.*','\$1 \$2 \$3');
"

2. cast问题

select cast('12345678901' as int);
-- NULL

cast一般不会抛出异常,而是吞掉异常,返回NULL

3. coalesce 注意

select coalesce('', 'a');  -- => ''
select coalesce(null, 'a'); -- => a

coalesce作用于null,而不是空字符串

4. 小文件合并

set mapred.max.split.size=256000000;
set mapred.min.split.size.per.node=100000000;
set mapred.min.split.size.per.rack=100000000;
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
set hive.merge.smallfiles.avgsize=256000000;
set hive.merge.mapfiles = true;
set hive.merge.mapredfiles = true;
set hive.merge.size.per.task = 256000000;
set hive.hadoop.supports.splittable.combineinputformat=true;

5. 本地测试

select key, value, sum(value) over(partition by key) as total
from (
    select 'a' key, 1 as value
    union all
    select 'a' key, 2 as value
) as a
-- 
a 1 3
a 2 3
--

2. 优化点

1. 正则反向

select regexp_replace('lat:test,lon:test,province:prov,city:city,area:area,cnt:3','.*province:([\\w]+),city:([\\w]+),area:([\\w]+),.*','$1 $2 $3');

2. 任务参数优化

  1. 向量化
  2. 并行跑
set hive.vectorized.execution.enabled=true;
set hive.vectorized.execution.reduce.enabled=true;
set hive.exec.parallel=true;

3. 用join做差集

select device from a
left join b
on a.device = b.device
where b.device is null

4. 窗口函数

  1. 单字段统计
select field_str as field_str,  field,  cnt,  round(cnt/total, 4) as percent, 
    row_number() over (partition by field_str order by cnt desc) as rank 
from (
    select field_str, field, cnt, sum(cnt) over(partition by field_str) as total
    from stat_temp
) as a
  1. 数据去重
insert overwrite table test
select id,country
from (
    select id,country, row_number() over (partition by id order by processtime desc) rank
    from (
        select id,country, processtime from test
        union all
        select id,country day as processtime
        from test_incr where day=20180101
    )a
)b where rank=1;

5. 对NULL好一点

聚合函数像collect_set,collect_list,count,sum 这些在聚合数据的时候,会自动剔除NULL这样的值,这样出来的数据更好看,所以建议空字符串 => NULL

相关文章

  • hive 实用技能

    1. 注意点 1.正则转义,反向引用 hive自己本身的正则规范 shell脚本中,hive正则的规范 2. ca...

  • 实用技能

    Android Studio simpleUML(UML工具)使用详解 《阿里巴巴Java开发规约》插件使用详细指...

  • Hive调优

    本文种记录的大多是开源版本hive调优方式 我也会补充TDH集群Inceptor的优化方式 面试必备技能-Hive...

  • docker 构建hadoop 环境

    技能库 docker 相关 linux 相关 shell 相关 hadoop hive 准备文件 jdk 安装包:...

  • 面试必备技能-HiveSQL优化

    Hive SQL基本上适用大数据领域离线数据处理的大部分场景。Hive SQL的优化也是我们必须掌握的技能,而且,...

  • 《富兰克林传》7.0

    一.创办了宾夕法尼亚大学,实用的技能培养。 富兰克林创建学校,重点放在实用技能的指导上,如写作,数...

  • 我们为什么要学习?

    我们为什么要学习? 一,为了实用,为了生存于这个社会。这类实用知识可以表现为规则,技能。缺乏这些规则和技能,我们就...

  • 看完这本书,我考试再没挂过科!

    干货指数:★★★★★ 实用指数:★★★★ 技能get指数:★★★★ 颜值:★★ 标签:学习方法、个人管理、社科实用...

  • 日常实用技能

    1. Ubuntu下硬盘加载故障 解决方法: 在终端输入如下命令,查看分区挂载情况 修复挂载错误的相应的分区,如提...

  • 院前急救学习分享2022年2月6日

    华医网~实用急救技能专题培训学习分享

网友评论

      本文标题:hive 实用技能

      本文链接:https://www.haomeiwen.com/subject/zmsrpftx.html