首页技术文章正文

什么是索引?怎样在Hive中创建索引?

更新时间:2023-08-01 来源:黑马程序员 浏览量:

IT培训班

索引创建在Hive表的指定列,创建索引的列称为索引列,通过索引列执行查询操作时,可以避免全表扫描以及全分区扫描,从而提高查询速度。然而在提高查询速度的同时,hive会额外消耗资源去创建索引,以及需要更多的磁盘空间存储索引。索引可以总结为是一种以空间换取时间的方式。

Hive的索引其实是一张索引表,在表中存储了索引列的值、索引列的值在HDFS对应的数据文件路径以及索引列的值在数据文件中的偏移量。涉及索引列的查询时,首先会去索引表中查找索引列的值在HDFS对应的数据文件路径以及索引列的值在数据文件中的偏移量,通过数据文件路径和偏移量去扫描全表的部分数据,从而避免全表扫描。

创建索引的语法格式如下。

CREATE INDEX index_name
  ON TABLE base_table_name (col_name, ..)
  AS index_type
  [WITH DEFERRED REBUILD]
  [IN TABLE index_table_name]
  [RON FORMAT .….] STORED AS...
  [STORED BY ...
  ]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (..)]
  [COMMENT "index comment"];

上述语法的具体讲解如下。

· CREATEINDEX:表示创建索引的语句。

· index_name:用于指定创建索引时实现的类,通常使用类 org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler。

· ON TABLE base_table_name(col_name,..):用于指定数据表中创建索引的列。

· AS index_type:用于指定索引类型。

· WITH DEFERRED REBUILD:可选,用于重建索引。

· IN TABLE index_table_name:可选,用于指定索引表的名称。

· ROWFORMAT:可选,用于序列化行对象。

· STOREDAS:可选,用于指定存储格式。

· STOREDBY:可选,用于指定排序规则。

· LOCATION hdfs_path:可选,用于指定索引表在HDFS的存储位置。

· TBLPROPERTIES:可选,用于指定索引表属性。

· COMMENT“index comment”:可选,用于指定索引描述。

接下来,在虚拟机Node_03中使用Hive客户端工具Beeline,远程连接虚拟机Node_02的HiveServer2服务操作Hive,为数据库hive_database的内部表managed_table_new创建索引,具体命令如下。

CREATE INDEX index_staff_name
ON TABLE hive_database.managed_table_new (staff_name)
AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
NITH DEFERRED REBUILD
IN TABLE index_name_table
TBLPROPERTIES ("create"="itcast")
COMMENT "index comment";

上述命令在数据库hive_database的内部表managed_table_new中创建索引index_staff_name,指定索引列为staff_name,指定索引类型为org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler,指定索引表名称为index_name_table,指定索引表属性create的属性值为itcast,指定索引描述为index comment。


分享到:
在线咨询 我要报名
和我们在线交谈!