大数据Spark “蘑菇云”行动第91课:Hive中Index和Bucket案例实战及存储类型实战详解
索引:例如每行扫描,假如1000列,要扫1000列;但做了索引以后,key为关键字做索引,只扫描1列.建立索引的时候,一般都有分区表!建立一个partition
视图上不能建立索引;
索引表存储格式可以与原有表存储格式不一样。
hive>
use hivestudy;
show tables;
desc rating;
CREATE INDEX index_ratings ON TABLE ratings(userid) AS 'org.apache.hadoop.hive.sql.index.compact.CompactIndexHandler' WITH DEFERRED REBUILD;
SHOW INDEX ON ratings;
查看一下数据,但里面是空的。假如在创建索引是我们使用“ WITH DEFERRED REBUILD”语句,则索引创建是为空,可以通过“Alter index ... REBUILD”在一个
partition上或所有partition上构建索引。
执行以下语句,查看索引有了目录了。但还是失败的,数据没有
hive〉 ALTER INDEX index_ratings ON ratings rebuild;
桶表:桶就是一个数据单位,表大的时候使用桶;例如5个桶表,根据key hash落到哪个桶中,提高查询速度。在企业中用的不多,但必须掌握。
先设置参数 hive.enforce.bucketing=true; 原先是一个目录,就变成了几个目录,例如设置3、5、9奇数个桶。
在分区表的基础上重来一次索引,在创建过程中实际移动数据,现在ok了
CREATE INDEX index_users ON TABLE users(userid) AS 'org.apache.hadoop.hive.sql.index.compact.CompactIndexHandler' WITH DEFERRED REBUILD;
ALTER INDEX index_ratings ON users rebuild;
select * from (hdfs webui查询的目录 user_index_user) 查询出了数据
存储格式的例子:
hive>
use default;
CREATE TABLE table_rc() .......as rcfile;