1. hive是针对什么问题提出的? 之前有什么解决方案吗?
超大结构化数据集,超出了一般MPP 的存储能力。
MPP海量并行处理数据库的强项在于CPU,实时处理能力强,但其空间比较紧张;而hadoop的存储能强,但cpu的实时处理能力比较弱。Hive是一个基于hadoop的数据仓库。
所以,二者是一个互补的关系。并且,逐渐的,二者会相互融合。
2. hive在数据类型上与普通的SQL有什么区别?
hive除了支持普通的Integer(从8字节到1字节)、Float(float与double)、String 内置类型外
hive还支持 Map、Structure、List,这些复杂的数据类型。
如 list<map<string, struct<p1:int, p2:int>>> 一个嵌套多层的复杂数据结构。
3. hive在语法上与标准的SQL有什么区别? 以及原由是什么?
1)多表之间的join操作,只支持 等号 = 条件,且语法格式如下:
SELECT t1.a1 as c1, t2.b1 as c2
FROM t1 JOIN t2 ON (t1.a2 = t2.b2);
而不是传统的格式:
SELECT t1.a1 as c1, t2.b1 as c2
FROM t1, t2
WHERE t1.a2 = t2.b2
2)hive不支持将数据插入现有的表或分区中,仅支持覆盖重写整个表,示例如下:
INSERT OVERWRITE TABLE t1
SELECT * FROM t2;
3)hive不支持INSERT INTO, UPDATE, DELETE操作,这样的话,就不要很复杂的锁机制来读写数据。
INSERT INTO syntax is only available starting in version 0.8。INSERT INTO就是在表或分区中追加数据。
4)hive支持嵌入mapreduce程序,来处理复杂的逻辑
如:
FROM (
MAP doctext USING 'python wc_mapper.py' AS (word, cnt)
FROM docs
CLUSTER BY word
) a
REDUCE word, cnt USING 'python wc_reduce.py';
--doctext: 是输入
--word, cnt: 是map程序的输出
--CLUSTER BY: 将wordhash后,又作为reduce程序的输入
并且map程序、reduce程序可以单独使用,如: