標籤:

知識布局-sql-impala解析

問題

今天開始學習一些sql的知識。

假設存在兩個表,A(id int,name string),B(id int,name string)。求A表中id在B表中不存在的值。請寫出sql。

解決方法

第一種方法:

採用子查詢,select * from A where A.id not in(select B.id from B)

第二種方法:

採用left join,select * from A left join B on A.id = B.id

where B.id is null;

hive和impala執行情況

上述的兩種方法都能夠查出結果。

由於我搭建了impala執行引擎,內部使用了hive,而hive內部又使用了mysql。也就是說,我可以測試這三種引擎的情況。我不想測試mysql的情況。

測試表A 4條數據,測試表B 2條數據。

使用了hive,耗時70秒

使用impala,耗時0.75秒

通過對比可見impala的速度還是很快的。

impala explain

我們使用impala的explain看下上面的兩條sql

select * from A where A.id not in(select B.id from B)

select * from A left join B on A.id = B.id where B.id is null;

分析impala

今天先到這裡,明日在進行解讀。


推薦閱讀:

以 MySQL 為例,如何進行 SQL 注入和防止被注入?
MathematicaSQL導出示例
SQLiGODs 注入(一個有意思的玩法)
sql語句面試問題?
從編程語言設計的角度,如何評價SQL語言?

TAG:Hive | 大數據 | SQL |