如何在Hive SQL中列出每个类别的前10行

优达008

我有一个表,该表包含带有分类数据的列(我们称其为“类别”)和另一列包含任意字符串(我们称其为“文本”)。

现在,我想为每个类别查看几个文本示例,换句话说:对于每个类别,请显示文本的前5个值。文本值不需要按任何条件排序(我不希望前5个最长的字符串或类似的东西),而只需遇到的第一个(随机)字符串即可。

结果应如下所示:

+----------+------------------+
| category | text             |
+----------+------------------+
| cat A    | random string 1  |
| cat A    | random string 2  |
| cat A    | random string 3  |
| cat A    | random string 4  |
| cat A    | random string 5  |
| cat B    | random string 6  |
| cat B    | random string 7  |
| cat B    | random string 8  |
| cat B    | random string 9  |
| cat B    | random string 10 |
| cat C    | random string 11 |
| ...      | ...              |

我负担不起二次复杂性,因为表确实很大,有数以百万计的行。

我也想避免手动合并每个类别的子查询

select ... where category = catA
union 
select ... where category = catB
union
select ... where category = catC
union
...

因为有50种不同的类别

最重要的是,我不能使用任何特定于数据库的功能,因为我的数据库不是任何传统的关系数据库,而是一个仅支持基本SQL语法的Apache Hive。

我知道很多严格的要求。但是,如果有人知道如何用普通的SQL解决这个问题,那对我会有很大帮助。谢谢。

戈登·利诺夫

您可以row_number()在包括Hive在内的大多数数据库中使用每个类别有10个示例,例如:

select t.*
from (select t.*,
             row_number() over (partition by category order by category) as seqnum
      from t
     ) t
where seqnum <= 10;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章