1. 程式人生 > >hive例項講解實現in和not in子句

hive例項講解實現in和not in子句

目前hive不支援 in或not in 中包含查詢子句的語法,所以只能通過left join實現。

假設有一個登陸表login(當天登陸記錄,只有一個uid),和一個使用者登錄檔regusers(當天註冊使用者,欄位只有一個uid),這兩個表都包含一個欄位,uid。

in查詢

如果要查詢當天登陸的註冊使用者,需要用in查詢,hive sql如下:

select login.uid from login left outer join regusers on login.uid=regusers.uid where regusers.uid is not null

如果login表和regusers表按天分割槽,欄位是dt,那麼查詢2013年1月1號當天登陸的註冊使用者,hive sql如下:

select login.uid from login day_login left outer join 
   (select uid from regusers where dt='20130101') day_regusers
on day_login.uid=day_regusers.uid where day_login.dt='20130101' and day_regusers.uid is not null

not in查詢

如果要查詢當天登陸的老使用者(這裡假設非當天註冊使用者就是老使用者),需要用not in查詢,hive sql如下:

select login.uid from login left outer join regusers on login.uid=regusers.uid where regusers.uid is null;

如果login表和regusers表按天分割槽,欄位是dt,那麼查詢2013年1月1號當天登陸的老使用者,hive sql如下:

select login.uid from login day_login left outer join 
   (select uid from regusers where dt='20130101') day_regusers
on day_login.uid=day_regusers.uid where day_login.dt='20130101' and day_regusers.uid is null;