博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)Hive Index
阅读量:5313 次
发布时间:2019-06-14

本文共 3549 字,大约阅读时间需要 11 分钟。

Hive中可以创建Index。

索引是标准的数据库技术,hive 0.7版本之后支持索引。hive索引采用的不是'one size fites all'的索引实现方式,而是提供插入式接口,并且提供一个具体的索引实现作为参考。
hive索引具有以下特点:
1.索引key冗余存储,提供基于key的数据视图
2.存储设计以优化查询&检索性能
3.对于某些查询减少IO,从而提高性能。

hive索引创建语句:

[plain] 
 
  1. CREATE INDEX index_name   
  2. ON TABLE base_table_name (col_name, ...)  
  3. AS 'index.handler.class.name'  
  4. [WITH DEFERRED REBUILD]  
  5. [IDXPROPERTIES (property_name=property_value, ...)]  
  6. [IN TABLE index_table_name]  
  7. [PARTITIONED BY (col_name, ...)]  
  8. [  
  9.    [ ROW FORMAT ...] STORED AS ...  
  10.    | STORED BY ...  
  11. ]  
  12. [LOCATION hdfs_path]  
  13. [TBLPROPERTIES (...)]  
  14. [COMMENT "index comment"]  

注意:
1.index的partition默认和数据表一致
2.视图上不能创建index
3. index可以通过stored as配置存储格式

重建索引:

[plain] 
 
  1. ALTER INDEX index_name ON table_name [PARTITION (...)] REBUILD  

假如在创建索引是我们使用“ WITH DEFERRED REBUILD”语句,则索引创建是为空,可以通过“Alter index ... REBUILD”在一个partition上或所有partition上构建索引。
注意:
1.当hive数据更新时,必须调用该语句更新索引。
2. index rebuild操作时一个原子操作,因此,当rebuild失败时,先前构建的索引也无法使用

删除索引:

[plain] 
 
  1. DROP INDEX index_name ON table_name  


示例:
创建表&索引

[plain] 
 
  1. hive> create table index_test(id INT, name STRING)  
  2.     > partitioned by (dt STRING)  
  3.     > row format delimited fields terminated by ',';  
  4. OK  
  5. Time taken: 32.446 seconds  
  6. hive> create table index_tmp(id INT, name STRING, dt STRING)  
  7.     > row format delimited fields terminated by ',';  
  8. OK  
  9. Time taken: 0.157 seconds  
  10. hive> load data local inpath '/home/work/data/alter_test.txt' into table index_tmp;  
  11. Copying data from file:/home/work/data/alter_test.txt  
  12. Copying file: file:/home/work/data/alter_test.txt  
  13. Loading data to table default.index_tmp  
  14. OK  
  15. Time taken: 1.587 seconds  
  16. hive> set hive.exec.dynamic.partition.mode=nonstrict;  
  17. hive> set hive.exec.dynamic.partition=true;    
  18. hive> insert overwrite table index_test partition(dt)  
  19.     > select id,name,dt  
  20.     > from index_tmp;  
  21. Total MapReduce jobs = 2  
  22. ......  
  23. OK  
  24. Time taken: 56.103 seconds  
  25. hive> create index index1_index_test on table index_test(id) AS  'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' WITH DEFERRED REBUILD ;     
  26. OK  
  27. Time taken: 0.764 seconds  
  28. hive> alter index index1_index_test on index_test rebuild;  
  29. Total MapReduce jobs = 3  
  30. ......  
  31. OK  
  32. Time taken: 138.589 seconds  
  33. hive> show index on index_test;  
  34. OK  
  35. index1_index_test       index_test              id                      default__index_test_index1_index_test__ compact               
  36. Time taken: 0.163 seconds  
  37. hive> show  partitions index_test;   
  38. OK  
  39. dt=2012-08-10  
  40. dt=2012-08-11  
  41. dt=2012-08-12  
  42. Time taken: 0.17 seconds  

查看索引数据:
$ hadoop fs -ls /user/hive/warehouse/default__index_test_index1_index_test__
Found 3 items
drwxr-xr-x   - work supergroup          0 2012-08-16 18:27 /user/hive/warehouse/default__index_test_index1_index_test__/dt=2012-08-10
drwxr-xr-x   - work supergroup          0 2012-08-16 18:27 /user/hive/warehouse/default__index_test_index1_index_test__/dt=2012-08-11
drwxr-xr-x   - work supergroup          0 2012-08-16 18:28 /user/hive/warehouse/default__index_test_index1_index_test__/dt=2012-08-12
$ hadoop fs -cat /user/hive/warehouse/default__index_test_index1_index_test__/dt=2012-08-10/000000_0
5,hdfs://localhost:9000/user/hive/warehouse/index_test/dt=2012-08-10/000000_0,0
6,hdfs://localhost:9000/user/hive/warehouse/index_test/dt=2012-08-10/000000_0,10
7,hdfs://localhost:9000/user/hive/warehouse/index_test/dt=2012-08-10/000000_0,20
删除索引:

[plain] 
 
  1. hive> drop index index1_index_test on index_test;  
  2. OK  
  3. Time taken: 0.761 seconds  
  4. hive> show index on index_test;                    
  5. OK  
  6. Time taken: 0.095 seconds  

索引数据也被删除
$ hadoop fs -ls /user/hive/warehouse/default__index_test_index1_index_test__
ls: Cannot access /user/hive/warehouse/default__index_test_index1_index_test__: No such file or directory.

转载于:https://www.cnblogs.com/end/archive/2013/01/21/2870352.html

你可能感兴趣的文章
jmeter添加自定义扩展函数之DoubleSum
查看>>
Session和Cookie详解(1)
查看>>
第八天
查看>>
JQuery基本知识、选择器、事件、DOM操作、动画
查看>>
C# ASP.NET MVC:使用Cookie记住账号密码
查看>>
Algebrizer
查看>>
【Java面试题】60 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?...
查看>>
Kubernetes核心概念总结(摘选)
查看>>
ruby中输入命令行编译sass(ruby小白)
查看>>
js this指向理解
查看>>
ibatis分页查询(2)
查看>>
Tornado的autoreload
查看>>
Springmvc 重定向参数传递方式
查看>>
企业库5.0 | 关于创建企业库 Database 实例的两种方式
查看>>
小米刷4.0.3原生Android系统遇到的一些问题
查看>>
给图片添加标签
查看>>
nginx入门与实战
查看>>
获取exe所在目录路径,速度
查看>>
CMD命令行二
查看>>
poj 1236 Network of Schools(tarjan缩点)
查看>>