更新时间:2023-08-01 来源:黑马程序员 浏览量:
索引创建在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。