赞
踩
Hive和MYSQL(传统数据库)的区别:
1、查询语言不同:hql/sql
2、数据存储位置不同:hdfs/数据库系统
3、数据格式:可自定义/数据库系统定义格式
4、数据更新:Hive不支持数据更新/mysql支持数据更新update
5、索引:没有索引,使用MapReduce/mysql有索引
6、延迟性:高/低
7、数据规模:大/小
8、底层执行原理: MapReaduce/Excutor执行器
9、可扩展性:Hadoop/数据库由于 ACID 语义的严格限制,扩展行非常有限
Hive索引原理(0.8版本后加入了位图索引)
Hive里的2维坐标系统(第一步定位行键 -> 第二步定位列修饰符)
Hbase里的4维坐标系统(第一步定位行键 -> 第二步定位列簇 -> 第三步定位列修饰符 -> 第四步定位时间戳)
建索引表的步骤:
1、建表,存储格式为textfile
use dw_htldatadb;
drop table TableName;
create table TableName(aa string comment 'asd',bb int comment 'asd')
PARTITIONED BY(d STRING COMMENT 'date') COMMENT 'table comment'
row format delimited fields terminated by ',' stored as textfile;
2、创建索引,对表table的aa列创建索引
use database;
create index idx_table on table TableName(aa)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
with deferred rebuildIN TABLE tablen_index;
分区创建索引
use database;
create index idx_table on table table(eid)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
with deferred rebuildIN TABLE table_index PARTITIONED BY (d,eid);
3、重建索引
use database;
ALTER INDEX idx_table REBUILD;
对表的分区重建建索引:
use database;
ALTER INDEX idx_table partition (d = '2019-04-01') REBUILD ;
4、查看索引
show formatted INDEX ON table;
注意:索引在查询时生效,需要设置参数,默认情况下不使用索引。
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
SET hive.optimize.index.filter=true;
SET hive.optimize.index.filter.compact.minsize=0;
缺点:
从以上过程可以看出,Hive索引的使用过程比较繁琐:
每次查询时候都要先用一个job扫描索引表,如果索引列的值非常稀疏,那么索引表本身也会非常大;
索引表不会自动rebuild,如果表有数据新增或删除,那么必须手动rebuild索引表数据;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。