總體一致:
Hive-sql與SQL基本上一樣,因為當初的設計目的,就是讓會SQL不會編程MapReduce的也能使用Hadoop進行處理數據。
因此,大膽使用SQL的,如果遇到不對的,再查。
區別:
Hive沒有delete和update。可能新版本有
------以下轉載---http://blog.csdn.net/u010385646/article/details/53167707--------
1、Hive不支持等值連接?
?SQL中對兩表內聯可以寫成:
?select * from dual a,dual b where a.key = b.key;
?Hive中應為
?select * from dual a join dual b on a.key = b.key;?
而不是傳統的格式:
SELECT t1.a1 as c1, t2.b1 as c2FROM t1, t2
WHERE t1.a2 = t2.b2
2、分號字符
?分號是SQL語句結束標記,在HiveQL中也是,但是在HiveQL中,對分號的識別沒有那么智慧,例如:
?select concat(key,concat(';',key)) from dual;
?但HiveQL在解析語句時提示:
? ?? ???FAILED: Parse Error: line 0:-1 mismatched input '<EOF>' expecting ) in function specification
?解決的辦法是,使用分號的八進制的ASCII碼進行轉義,那么上述語句應寫成:
?select concat(key,concat('\073',key)) from dual;
3、IS [NOT] NULL
?SQL中null代表空值, 值得警惕的是, 在HiveQL中String類型的字段若是空(empty)字符串, 即長度為0, 那么對它進行IS NULL的判斷結果是False.
4、Hive不支持將數據插入現有的表或分區中,
僅支持覆蓋重寫整個表,示例如下:
5、hive不支持INSERT INTO 表 Values(), UPDATE, DELETE操作
? ? 這樣的話,就不要很復雜的鎖機制來讀寫數據。
? ? INSERT INTO syntax is only available starting in version 0.8。INSERT INTO就是在表或分區中追加數據。
6、hive支持嵌入mapreduce程序,來處理復雜的邏輯
如:
--doctext: 是輸入
--word, cnt: 是map程序的輸出
--CLUSTER BY: 將wordhash后,又作為reduce程序的輸入
并且map程序、reduce程序可以單獨使用,如:
-DISTRIBUTE BY: 用于給reduce程序分配行數據
7、hive支持將轉換后的數據直接寫入不同的表,還能寫入分區、hdfs和本地目錄
這樣能免除多次掃描輸入表的開銷。