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

2021-07-02 14:10:30 字數 1157 閱讀 6320

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

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

如果要查詢當天登陸的註冊使用者,需要用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,那麼查詢2023年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查詢,hive sql如下:

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

如果login表和regusers表按天分割槽,欄位是dt,那麼查詢2023年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;

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

目前hive不支援 in或not in 中包含查詢子句的語法,所以只能通過left join實現。假設有乙個登陸表login 當天登陸記錄,只有乙個uid 和乙個使用者登錄檔regusers 當天註冊使用者,字段只有乙個uid 這兩個表都包含乙個字段,uid。如果要查詢當天登陸的註冊使用者,需要用i...

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

目前hive不支援 in或not in 中包含查詢子句的語法,所以只能通過left join實現。假設有乙個登陸表login 當天登陸記錄,只有乙個uid 和乙個使用者登錄檔regusers 當天註冊使用者,字段只有乙個uid 這兩個表都包含乙個字段,uid。如果要查詢當天登陸的註冊使用者,需要用i...

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

目前hive不支援 in或not in 中包含查詢子句的語法,所以只能通過left join實現。假設有乙個會員表tb member 當天會員記錄,只有乙個memberid 和乙個會員消費表tb sales 當天會員消費,欄位有乙個memberid 這兩個表都包含乙個字段,memberid。in查詢...