Hive函数

本文介绍了Hive函数的分类,包括标准函数、聚合函数和表生成函数,并详细阐述了内置函数如字符、类型转换和聚合函数等。此外,还探讨了Hive的性能调优,包括使用EXPLAIN和ANALYZE工具、优化设计如分区表和压缩格式,以及Job优化策略如本地模式运行、JVM重用和并行执行。
摘要由CSDN通过智能技术生成

1. Hive函数分类

1.1 从输入输出角度分类
  1. 标准函数:一行数据中的一列或多列为输入,结果为单一值
  2. 聚合函数:多行的零列到多列为输入,结果为单一值
  3. 表生成函数:零个或多个输入,结果为多列或多行
1.2 从实现方式分类
  1. 内置函数
    • 标准函数
      ①字符函数
      ②类型转换函数
      ③数学函数
      ④日期函数
      ⑤集合函数
      ⑥条件函数
    1. 聚合函数
    2. 表生成函数
  2. 自定义函数
    • UDF:自定义标准函数
    • UDAF:自定义聚合函数
    • UDTF:自定义表生成函数
1.3 具体函数
  1. 字符函数
    在这里插入图片描述

  2. 数据转换函数在这里插入图片描述

  3. 数学函数
    在这里插入图片描述

  4. 日期函数
    在这里插入图片描述

  5. 集合函数 在这里插入图片描述

  6. 条件函数
    在这里插入图片描述

  7. 表生成函数
    在这里插入图片描述

2. hive性能调优

2.1 Hive性能调优工具
  1. EXPLAIN
  2. ANALYZE
    分析表数据,用于执行计划选择的参考
    收集表的统计信息,如行数、最大值等
    使用时调用该信息加速查询
    语法
ANALYZE TABLE employee COMPUTE STATISTICS; 

ANALYZE TABLE employee_partitioned 
PARTITION(year=2014, month=12) COMPUTE STATISTICS;

ANALYZE TABLE employee_id COMPUTE STATISTICS 
FOR COLUMNS employee_id;
2.2 Hive优化设计

使用分区表、桶表
使用索引
使用适当的文件格式,如orc, avro, parquet
使用适当的压缩格式,如snappy
考虑数据本地化 - 增加一些副本
避免小文件
使用Tez引擎代替MapReduce
使用Hive LLAP(在内存中读取缓存)
考虑在不需要时关闭并发

2.3 Job优化
  1. 本地模式运行
    • Hive支持将作业自动转换为本地模式运行
      当要处理的数据很小时,完全分布式模式的启动时间比作业处理时间要长
      设置开启本地模式
      SET hive.exec.mode.local.auto=true; --default false
      SET hive.exec.mode.local.auto.inputbytes.max=50000000;
      SET hive.exec.mode.local.auto.input.files.max=5; --default 4
      ob必须满足以下条件才能在本地模式下运行
    • Job总输入大小小于 hive.exec.mode.local.auto. inputbytes.max
      map任务总数小于 hive.exec.mode.local.auto. input.files.max
      所需的Reduce任务总数为1或0
  2. JVM重用(JVM Reuse)
    • 通过JVM重用减少JVM启动的消耗
      默认每个Map或Reduce启动一个新的JVM
      Map或Reduce运行时间很短时,JVM启动过程占很大开销
      通过共享JVM来重用JVM,以串行方式运行MapReduce Job
      适用于同一个Job中的Map或Reduce任务
      对于不同Job的任务,总是在独立的JVM中运行
    • 设置开启JVM重用
      set mapred.job.reuse.jvm.num.tasks = 5; – 默认值为1
  3. 并行执行
    • 并行执行可提高集群利用率
      Hive查询通常被转换成许多按默认顺序执行的阶段
      这些阶段并不总是相互依赖的
      它们可以并行运行以节省总体作业运行时间
      如果集群的利用率已经很高,并行执行帮助不大
    • 通过以下设置开启并行执行
      SET hive.exec.parallel=true; – default false
      SET hive.exec.parallel.thread.number=16; – default 8,定义并行运行的最大数量
2.4 查询优化
  1. 自动启动Map端Join
  2. 防止数据倾斜
    set hive.optimize.skewjoin=true;
  3. 启用CBO(Cost based Optimizer)
    set hive.cbo.enable=true;
    set hive.compute.query.using.stats=true;
    set hive.stats.fetch.column.stats=true;
    set hive.stats.fetch.partition.stats=true;
  4. 启动Vectorization(矢量化)
    set hive.vectorized.execution.enabled = true;
    set hive.vectorized.execution.reduce.enabled = true;
  5. 使用CTE、临时表、窗口函数等正确的编码约定
2.5 压缩算法
  1. 减少传输数据量,会极大提升MapReduce性能
    采用数据压缩是减少数据量的很好的方式
  2. 常用压缩方法对比
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值