当前位置: 首页 > news >正文

hive的索引

一、索引的介绍

索引的作用:加快查询的效率

为什么索引可以提升查询效率呢?

二、hive的索引

         hive索引是在 分区 分桶优化基础上, 又提供一种新的优化手段, 如果分区 和分桶受限, 可以尝试使用索引的方式来优化处理

        hive提供了三种索引:

                原始索引

                row group index(行组索引)

                bloom filter index(布隆过滤索引)

1、hive的原始索引

​ 结论: 此索引已经不再使用, 在hive3.0以上, 彻底不支持

        hive的原始索引, 可以针对表中某一列或者某几列构建索引, 构建之后, 当查询的时候使用到索引字段, 可以帮助提升一定效率

弊端:

        hive原始索引, 不会自动更新, 每一次对表中数据进行处理后, 都需要进行重建索引, 而这个效率是比较差, 而且整体效率的提升,相对比较有限

 2、row group index(行组索引)

条件

        1) 要求表必须是ORC存储格式

        2) 需要对那个字段进行索引, 必须对这个字段进行排序, 否则索引意义不大

        3) 在创建表的时候, 必须开启行组索引: ’orc.create.index’=’true’

        4) 主要应用在 < > = 场景中, 主要针对数值类型数据

ORC是一种专为大数据优化的列存储格式,具有以下特点:

        1)高效压缩:按列存储相似数据,压缩率比行存储高 3-5 倍,节省存储空间。

        2)快速查询:内置多级索引(文件、stripe、行组),支持跳过无关数据,加速过滤和聚合。

        3)复杂类型支持:原生支持嵌套结构(如 JSON / 数组),适合半结构化数据。

        4)事务支持:结合 Hive 实现 ACID 事务(插入 / 更新 / 删除)。

        5)这就是orc存储格式

常用于 Hive、Spark 等框架,是数据仓库的主流存储格式,适合批量分析场景。

建表操作

CREATE TABLE lxw1234_orc2(

    ....

) stored AS ORC

TBLPROPERTIES

(

    'orc.compress'='SNAPPY',

--     开启行组索引

    'orc.create.index'='true'

)

stored AS ORC 指定使用 ORC(Optimized Row Columnar) 存储格式,这是一种高效的列存格式,适合大数据分析。

'orc.compress'='SNAPPY':启用 Snappy 压缩,在压缩率和性能间平衡,适合快速读写场景。

'orc.create.index'='true':开启 ORC 行组索引,记录每个行组的统计信息(如最小值、最大值),加速数据过滤。

插入数据

insert into table xxxx

    SELECT CAST(siteid AS INT) AS id,

    pcid

    FROM lxw1234_text

--     插入的数据保持排序

    DISTRIBUTE BY id sort BY id;

CAST(siteid AS INT) AS id 将 siteid 字段从字符串转为整数类型,并命名为 id

DISTRIBUTE BY id:按 id 的哈希值将数据分发到不同的 Reducer,确保相同 id 的记录被分到同一节点

3、bloom filter index(布隆过滤索引)

行组索引可以和布隆索引一起使用

条件

1) 必须是ORC类型的表

2) 需要按照哪一个字段进行等值连接, 就需要对这个字段构建布隆索引

3) 仅适合做等值连接, 不局限于数据类型

4) 在建表的时候, 必须指定为那些字段开启: ”orc.bloom.filter.columns”=”pcid,字段2..”

建表操作

CREATE TABLE lxw1234_orc2 (

   ....

) stored AS ORC

TBLPROPERTIES

(

    'orc.compress'='SNAPPY',

    'orc.create.index'='true',

--     pcid字段开启BloomFilter索引

    "orc.bloom.filter.columns"="pcid"

)

插入数据

insert into table xxxx

SELECT CAST(siteid AS INT) AS id,

pcid

FROM lxw1234_text

DISTRIBUTE BY id sort BY id;

使用索引

SET hive.optimize.index.filter=true --开启 hive的自动使用索引

SELECT COUNT(1) FROM lxw1234_orc1 WHERE id >= 0 AND id <= 1000   (行组索引)

AND pcid IN ('0005E26F0DCCDB56F9041C','A'); (布隆过滤索引)

注意 如果要使用hive的索引, 必须开启hive自动使用索引

SET hive.optimize.index.filter=true --开启 hive的自动使用索引  

当然也可以将这个配置, 直接配置到cm的hive的配置窗口中, 进行统一配置

在生产中这些索引如何选择呢?

1) 对于行组索引, 建议是常开即可

在插入数据, 如果不明确对那个字段使用行组索引, 可以任意的插入, 在条件合适情况下, 也在使用行组索引

2) 布隆过滤索引:  主要将那些用于 等值连接的字段开启索引即可

一般主要指的是 join关联字段 以及清洗字段

http://www.dtcms.com/a/276464.html

相关文章:

  • DBeaver连接MySQL8.0报错Public Key Retrieval is not allowed
  • C语言基础知识--位段
  • UE制作的 AI 交互数字人嵌入到 Vue 开发的信息系统中的方法和步骤
  • 【MaterialDesign】谷歌Material(Google Material Icons) 图标英文 对照一览表
  • AI问答:成为合格产品经理所需能力的综合总结
  • dify工作流1:快速上手ai应用
  • 计算机毕业设计Java停车场管理系统 基于Java的智能停车场管理系统开发 Java语言实现的停车场综合管理平台
  • 网络通信模型对比:OSI与TCP/IP参考模型解析
  • 《Java Web程序设计》实验报告三 使用DIV+CSS制作网站首页
  • ServiceNow Portal前端页面实战讲解
  • [案例八] NX二次开发长圆孔的实现(支持实体)
  • C++中Lambda表达式 [ ] 的写法
  • Redis面试精讲 Day 1:Redis核心特性与应用场景
  • 浅谈 Python 中的 yield——生成器对象与函数调用的区别
  • 2025必问46道软件测试面试题(答案+文档)
  • Armstrong 公理系统深度解析
  • 网络安全初级第一次作业
  • super task 事件驱动框架
  • Openpyxl:Python操作Excel的利器
  • 浅谈npm,cnpm,pnpm,npx,nvm,yarn之间的区别
  • Python 数据建模与分析项目实战预备 Day 3 - 特征工程基础与数据预处理(针对简历结构化数据)
  • 使用iso制作ubuntu22.04docker镜像
  • 处理日期与时间
  • 【嵌入式电机控制#13】PID参数整定的全面步骤
  • ClickHouse 25.6 版本发布说明
  • 【华为机试】HJ68 成绩排序
  • 从0设计一个短链接服务:如何实现尽可能短、可变长的短网址系统?
  • 过拟合 跷跷板 幻觉 混合精度
  • 计算机毕业设计springboot影视周边推荐系统 基于SpringBoot的电影衍生品智能推荐平台 JavaWeb实现的影视文化周边个性化服务系统
  • git版本发布