码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Hive矢量化


    Hive 计算的时候默认是一次处理一行。在处理下一行之前,这一行数据需要先经过所有计算。这种处理模式的 CPU 使用效率非常低。而且Hive 目前严重依赖比较慢的反序列化方式,数据会通过一层对象检查器,用来标识列类型、反序列化数据并在内部循环中确定适当的(计算)表达式。这些虚拟方法调用会进一步减慢了处理速度。(翻译自https://issues.apache.org/jira/browse/HIVE-4160)

    所以 Hive 添加了矢量化查询、执行的支持,这样在 Hive 中就能一次处理大约一千行的批次(默认),而不是一行。批处理中的每一列都表示为基本数据类型的向量。执行的内部循环的时候能非常快速地扫描这些向量,避免了方法调用、反序列化、不必要的 if-then-else 等,这大大减少了CPU的使用时间。

    支持的数据类型:

    当前支持以下数据类型:

    • tinyint
    • smallint
    • int
    • bigint
    • boolean
    • float
    • double
    • decimal
    • date
    • timestamp
    • string

    表达式:

    在受支持的类型上使用时,可以对以下表达式进行矢量化:

    • 算术: +, -, *, /, %
    • 并且,或者,不是
    • 比较<、>、<=、>=、=、!=、BETWEEN、IN( )
    • 使用 AND、OR、NOT、<、>、<=、>=、=、=、!= 的布尔值表达式(非筛选器)
    • IS [NOT] NULL
    • 所有数学函数(SIN, LOG等)
    • 字符串函数 SUBSTR, CONCAT, TRIM, LTRIM, RTRIM, LOWER, UPPER, LENGTH
    • 类型转换函数
    • Hive 用户定义函数,包括标准和通用 UDF
    • 日期函数(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, UNIX_TIMESTAMP)
    • IF 条件表达式

    开启方式

    hive开启矢量执行

    set hive.vectorized.execution.enabled=true;

    指定哪些文件可以矢量化处理,支持逗号分割

    set hive.vectorized.input.format.excludes=org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat

    执行计划

    在这里插入图片描述

    注意:

    并不是只有orc支持,parquet在https://issues.apache.org/jira/browse/HIVE-14826也加入矢量支持。

    仅当时间戳值介于 1677-09-20 和 2262-04-11 之间时,时间戳才能正确处理矢量化执行。此限制是由于矢量化时间戳值存储为1970-01-01 00:00:00 UTC 的 Unix Epoch 时间之前/之后的纳秒的长值。

    矢量化筛选器操作按从左到右的顺序计算,因此为了获得最佳性能,请将 UDF 放在 WHERE 子句的 ANDed 表达式列表中的右侧。例如,使用

    column1 = 10 and myUDF(column2) = "x"
    
    • 1

    而不是

    myUDF(column2) = "x" and column1 = 10
    
    • 1
  • 相关阅读:
    Mysql索引知识补充
    vi/vim 删除:一行, 一个字符, 单词, 每行第一个字符 命令
    机器学习(十):朴素贝叶斯
    【优选算法系列】第二节.双指针(202. 快乐数和11. 盛最多水的容器)
    卷积神经网络结构设计,卷积神经网络参数设置
    数电学习(十、脉冲波形的产生和整形)(三)
    【面试刷题】——Qt事件处理器级别的划分
    Java高频面试题:一文掌握JVM虚拟机体系结构的深层内涵!
    计算机毕业设计SSM电脑配件仓储后台管理系统【附源码数据库】
    【毕业季·进击的技术er】大学生计算机毕业设计应该这样写
  • 原文地址:https://blog.csdn.net/qq_19933029/article/details/127413391
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号