由于Hive采用了SQL的查询语言HQL,因此很容易将Hive理解为数据库。其实从结构上来看,Hive和数据库除了拥有类似的查询语言,再无类似之处。数据库可以用在Online的应用中,但是Hive是为数据仓库而设计的,清楚这一点,有助于从应用角度理解Hive的特性。
Hive | 传统数据库 | |
---|---|---|
查询语言 | HQL | SQL |
数据存储 | HDFS | Raw Device或者 Local FS |
数据格式 | 用户自定义 | 系统决定 |
数据更新 | 不支持 | 支持 |
执行 | MapReduce | Excutor |
执行延迟 | 高 | 低 |
处理数据规模 | 大 | 小 |
索引 | 0.8版本后加入位图索引 | 有复杂的索引 |
可扩展性 | 高 | 低 |
1.查询语言 由于 SQL被广泛的应用在数据仓库中,因此,专门针对 Hive的特性设计了类 SQL的查询语言 HQL。熟悉 SQL开发的开发者可以很方便的使用 Hive进行开发。
2.数据存储位置 Hive 是建立在 Hadoop之上的,所有 Hive的数据都是存储在 HDFS中的。而数据库则可以将数据保存在块设备或者本地文件系统中。
3.数据格式 Hive 中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数据格式需要指定三个属性:列分隔符(通常为空格、”\t”、”\x001″)、行分隔符(”\n”)以及读取文件数据的方法(Hive中默认有三个文件格式TextFile,SequenceFile以及 RCFile)。由于在加载数据的过程中,不需要从用户数据格式到Hive定义的数据格式的转换,因此,Hive在加载的过程中不会对数据本身进行任何修改,甚至不会对数据进行扫描。而只是将数据内容复制或者移动到相应的 HDFS目录中。而在数据库中,不同的数据库有不同的存储引擎,定义了自己的数据格式。所有数据都会按照一定的组织存储,因此,数据库加载数据的过程会比较耗时。