impala和hive語法的區別

最近在工作中遇到了一些語句在impala可以執行但hive不支持的情況,內容如下:

hive的date_sub函數對應impala的days_sub函數

hive不支持add_years函數,只支持add_months函數

hive的TIMESTAMP對應impala的to_TIMESTAMP函數

hive的FROM_UNIXTIME函數要求參數必須是'yyyy-MM-dd HH:mm:ss'類型,不能只是'yyyy-MM-dd'

hive的current_timestamp()對應impala的now()

hive不用執行 invalidate metadata,impala操作前需執行一下更新元數據。

hive不支持在關聯條件裏不等值關聯:<>,解決辦法:把不等值關聯的條件放到case when裏,滿足case when的條件纔將數據選取出來,例如:
-oracle
SELECT a.*, b.id ASb_id, b.class AS b_class
FROM lpx_test_a a
LEFT OUTER JOIN lpx_test_b b
ON (a.id = b.id AND a.class < b.class);
--hive
SELECT a.*,
CASE WHEN a.class < b.class THEN b.idEND AS b_id,
CASE WHEN a.class < b.class THEN b.class END AS b_class
FROM lpx_test_a a
LEFT OUTER JOIN lpx_test_b b
ON (a.id = b.id);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章