Hive:从另一个表中减去一个表?

时间:2014-11-19 12:44:15

标签: sql join hive difference

在Hive中我有两个表:

'old_books' 
 title String, author String, year Int, outOfPrint Boolean; 

'new_books'  
title String, author String, year Int;

由于某些错误,创建这些表的人已经在“old_books”表中添加了一些新标题。

是否可以通过Hive从'old-books'表中减去两个表中存在的记录?

到目前为止,我只是选择使用Hive请求选择存在于两个表中的书籍:

SELECT old_books.* FROM old_books JOIN new_books ON (old_books.title=new_books.title);

如何从'old_books'中对此请求的结果进行子结构?

2 个答案:

答案 0 :(得分:0)

假设你有Hive 01.3或更高版本,你可以使用not exists子句:

从old_books中选择* a不存在( SELECT 1 FROM old_books b JOIN new_books c ON(b.title = c.title) 其中a.book_id = b.book_id);

以下是参考: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries

答案 1 :(得分:0)

我发现以下内容对我有用:

INSERT OVERWRITE TABLE corrected_old_books
SELECT old_books.* FROM old_books left JOIN new_books ON (new_books.title=old_books.title) where new_books.title is NULL;

我使用/usr/lib/hive/lib/hive-hwi-0.13.0.2.1.3.0-563.jar