我是靠谱客的博主 鳗鱼外套,最近开发中收集的这篇文章主要介绍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索引表数据;

 

最后

以上就是鳗鱼外套为你收集整理的Hive和MYSQL(传统数据库)的区别的全部内容,希望文章能够帮你解决Hive和MYSQL(传统数据库)的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部