Hive创建索引

Hive索引的目标就是为了提高表中确定的列的查询速度.没有索引,查询,类似于带有谓词WHEREcol=val这样的查询会加载整张表或者分区然后扫面所有行,如果在col这个列上我们建了索引,那么我们仅仅只需要家在一份文件,然后进行处理。

 

与传统关系型数据库一样,增加索引在提升查询性能的时候,会消耗额外的资源去创建索引和需要更多磁盘空间存储索引数据

 

一 创建、更改和删除索引

1.1创建索引

CREAT EINDEX index_name ON TABLE table_name (col_name,……)

ASindex_type [WITH DEFERRED REBUILD]

[IDXPROPERTIES(property_name=property_valaue,……)]

[INTABLE index_table_name]

[

      [ROW FORMAT ……] STORED AS ……

      |STORED BY……

]

[LOCATION hdfs_path]

[TBLPROPERTIES(……)]

[COMMENTcomment]

 

CREATEINDEX movie_index ON TABLE movie(mid)

AS'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'

WITHDEFERRED REBUILD

INTABLE movie_id_idx;

 

分析:

ASindex_type: 指定索引的处理器或者索引类型,实现了索引接口的Java 类,Hive本身包含一些典型的索引实现,比如Compact索引以及Bitmap索引(一般用于排重后值较少的列)

WITHDEFERRED REBUILD: 如果用户指定,那么新索引将呈现空白状态。需要使用ALTER INDEX对索引进行重建。

 

 

1.2删除索引

DROP INDEX [IF EXISTS] index_name ON table_name;

 

DROP INDEX IF EXISTS movie_index ON movie;

1.3更改索引

ALTER INDEX index_name ON table_name [PARTITION part_spec] REBUILD;

如果省略掉PARTITION,将会对所有分区重建索引

还没有机制嫩能够在底层的表或者某个特定的分区发生改变时,自动触发重建索引

ALTER TABLE movie_index ON movie REBUILD;

 

二 SHOW INDEX 查看索引

SHOW(INDEX|INDEXES) ON TABLE table [(FROM|

IN)db_name];

 

hive(hadoop)> show index on director;

OK

idx_name tab_name col_names idx_tab_name      idx_type   comment

direcotr_indexdirector  id   director_id_idx compact    

 

三 索引原理

在指定列上创建索引,会产生一张额外的表,里面包括索引字段,以及该值所对应的HDFS文件路径,和该值在文件中的偏移量。

在执行索引字段查询的时候,首先生成一个额外的MR Job,根据对索引列的过滤条件,从索引表中过滤出索引列的值对应的HDFS文件路径以及偏移量,输出带hdfs一个文件中,然后根据这些文件的hdfs路径和偏移量筛选原始的input文件生成新的split,作为真个job的split,这样就可以不用全表扫描。

 

四 索引 分区

一般来说,如果分区够用也就不必建立索引,但是如果一个表的逻辑分区很多很多,这时候,分区可能就不太适合。

 

建索引可以裁剪掉一张表的一些数据块,这样能够减少MapReduce的输入数据。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值