知識布局-sql-impala解析
03-27
問題
今天開始學習一些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語言?