Hive - Select 使用 in 限制范围

发布时间:2024年01月05日

目录

一.引言

二.Select Uid Info

1.少量 Uid

2.大量 Uid

◆ 建表

◆ 本地 Load

◆ HDFS Load

◆ Select In

三.总结


一.引言

工业场景下 Hive 表通常使用 uid 作为用户维度构建和更新 Hive 表,当我们需要查询指定批次用户信息时,可以使用 in 限定范围,下面实践不同 uid 数量下 Select 的示例。

二.Select Uid Info

1.少量 Uid

使用 'IN' 可以指定一个范围,让查询返回指定列表中所对应的元素,假设我们有一个 user 表,里面有一列 uid,我们需要查询多个 uid 的信息,可以使用下述语句查询:

hive -e "
SELECT * FROM users WHERE uid IN (uid1, uid2, uid3, ..., uidN);
"

查询后会将列表中所有 uid 符合的 row 都拿到。

2.大量 Uid

上面的方法很简洁,我们只需要将 uid 逗号分割放到脚本即可,但是还有一种复杂的情况,就是我们的 uid 非常多,例如上万个用户信息,这时候如果还使用上面 in (uid1, uid2 ...) 的形式脚本的可读性会很差,而且不易维护,所以我们通过建表的形式存储多个 uid,通过 in 与新表交互,实现优雅的查询代码。

◆ 建表

hive -e "create Table tmp_uid_list (uid INT);"

◆ 本地 Load

hive -e "LOAD DATA LOCAL INPATH '$local_path' INTO TABLE tmp_uid_list"

◆ HDFS Load

hive -e "LOAD DATA INPATH '$hdfs_path' INTO TABLE tmp_uid_list;

◆ Select In

hive -e "
select * from users
where dt between '20231225' and '20231231'
and uid in (select uid from tmp_uid_list);
"

通过建表我们将大量 uid 存储至 Hive 的 tmp 临时表中,如果 uid 数量不多可以放置在本地,如果 uid 数量很大可以放置在 HDFS 文件系统,随后 LOAD 进 Hive 表再配合 Select 操作即可。

三.总结

这里博主是 7.2 w 个 uid,所以直接放在本地 File Local Load 了,只用 3 行 SQL 就能解决,如果换成手写 7w 个 Uid,脑壳疼。

文章来源:https://blog.csdn.net/BIT_666/article/details/135344213
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。