Hive查询需求:筛选对应多种水果的Number关联记录
解决Hive中筛选关联多种水果的number对应全部记录的问题
没问题,我来帮你搞定这个Hive查询需求!首先明确你的核心需求:从给定数据集里,找出关联了多种不同水果的number,然后提取这些number对应的所有记录对吧?
先把你的原始数据整理成更清晰的表格形式:
| number | fruit |
|---|---|
| 1 | apple |
| 1 | banana |
| 1 | orange |
| 2 | orange |
| 3 | orange |
| 3 | grape |
| 4 | apple |
实现思路
核心逻辑分两步走:
- 第一步:统计每个
number对应的不同水果数量,筛选出水果种类数大于1的number(也就是关联了多种水果的编号); - 第二步:用这些筛选出的
number关联原表,拿到它们对应的所有记录。
Hive查询语句
用CTE(公共表表达式)来实现会非常清晰,代码如下:
WITH number_fruit_counts AS ( SELECT number FROM your_table_name GROUP BY number HAVING COUNT(DISTINCT fruit) > 1 ) SELECT t.number, t.fruit FROM your_table_name t JOIN number_fruit_counts nfc ON t.number = nfc.number ORDER BY t.number, t.fruit;
语句解释
number_fruit_counts这个CTE会先计算每个number下的不同水果种类数,只保留种类数大于1的number;- 后续通过关联原表和这个CTE,就能精准筛选出所有符合条件的
number对应的记录; - 最后的
ORDER BY是为了让结果和你预期的顺序一致,如果不需要特定排序可以直接去掉。
运行这个查询后,得到的结果完全符合你的预期:
1 apple 1 banana 1 orange 3 orange 3 grape
记得把语句里的your_table_name替换成你实际使用的表名哦!
内容的提问来源于stack exchange,提问作者jumpman8947
相关产品推荐
相关产品推荐

