当前位置:   article > 正文

Hive和MYSQL(传统数据库)的区别_hive表和mysql的区别

hive表和mysql的区别

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索引表数据;

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/529224
推荐阅读
相关标签
  

闽ICP备14008679号