HIVE数据库与ORACLE数据库有什么区别,⽬前HIVE数据库不⽀持
哪些函数?
a. 查询语⾔。由于 SQL 被⼴泛的应⽤在数据仓库中,因此,专门针对 Hive 的特性设计了类 SQL 的查询语⾔ HQL。熟悉 SQL 开发的开发者可以很⽅便的使⽤ Hive 进⾏开发。
b. 数据存储位置。Hive 是建⽴在 Hadoop 之上的,所有 Hive 的数据都是存储在 HDFS 中的。⽽数据库则可以将数据保存在块设备或者本地⽂件系统中。
c. 数据格式。Hive 中没有定义专门的数据格式,数据格式可以由⽤户指定,⽤户定义数据格式需要指定三个属性:列分隔符(通常为空格、
”\t”、” 001″)、⾏分隔符 (”\n”)以及读取⽂件数据的⽅法(Hive 中默认有三个⽂件格式 TextFile,SequenceFile 以及 RCFile)。由于在加载数据的过程中,不需要从⽤户数据格式到 Hive 定义的数据格式的转换,因此,Hive 在加载的过程中不会对数据本⾝进⾏任何修改,⽽只是将数据内容复制或者移动到相应的 HDFS ⽬录中。⽽在数据库中,不同的数据库有不同的存储引擎,定义了⾃⼰的数据格式。所有数据都会按照⼀定的组织存储,因此,数据库加载数据的过程会⽐较耗时。
d. 数据更新。由于 Hive 是针对数据仓库应⽤设计的,⽽数据仓库的内容是读多写少的。因此,Hive 中
不⽀持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。⽽数据库中的数据通常是需要经常进⾏修改的,因此可以使⽤ INSERT INTO … VALUES 添加数据,使⽤UPDATE … SET 修改数据。
update是什么e. 索引。之前已经说过,Hive 在加载数据的过程中不会对数据进⾏任何处理,甚⾄不会对数据进⾏扫描,因此也没有对数据中的某些 Key 建⽴索引。Hive 要访问数据中满⾜条件的特定值时,需要暴⼒扫描整个数据,因此访问延迟较⾼。由于 MapReduce 的引⼊, Hive 可以并⾏访问数据,因此即使没有索引,对于⼤数据量的访问,Hive 仍然可以体现出优势。数据库中,通常会针对⼀个或者⼏个列建⽴索引,因此对于少量的特定条件的数据的访问,数据库可以有很⾼的效率,较低的延迟。由于数据 的访问延迟较⾼,决定了 Hive 不适合在线数据查询。
f. 执⾏。Hive 中⼤多数查询的执⾏是通过 Hadoop 提供的 MapReduce 来实现的(类似 select * from tbl 的查询不需要 MapReduce)。⽽数据库通常有⾃⼰的执⾏引擎。
g. 执⾏延迟。之前提到,Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较⾼。另外⼀个导致 Hive 执⾏延迟⾼的因素是MapReduce 框架。由于 MapReduce 本⾝具有较⾼的延迟,因此在利⽤ MapReduce 执⾏ Hive 查询时,也会有较⾼的延迟。相对的,数据库的执⾏延迟较低。当然,这个低是有条件的,即数据规模较⼩,当数据规模⼤到超过数据库的处理能⼒的时 候,Hive 的并⾏计算显然能体现出优势。
h. 可扩展性。由于 Hive 是建⽴在 Hadoop 之上的,因此 Hive 的可扩展性是和 Hadoop 的可扩展性是⼀致的(世界上最⼤的 Hadoop 集在Yahoo!,2009年的规模在 4000 台节点左右)。⽽数据库由于 ACID 语义的严格限制,扩展⾏⾮常有限。⽬前最先进的并⾏数据库 Oracle 在理论上的扩展能⼒也只有 100 台左右。
i. 数据规模。由于 Hive 建⽴在集上并可以利⽤ MapReduce 进⾏并⾏计算,因此可以⽀持很⼤规模的数据;对应的,数据库可以⽀持的数据规模较⼩。
Hive不⽀持的函数:decode、rownum、to_char、replace、||、nvl、months_between、add_months、rollup、cube、rank() over、dense_rank() over、row_number() over
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论