hive例項講解實現in和not in子句
阿新 • • 發佈:2019-01-31
目前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;