Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive 配置单元如何限制collect_集合中的条目数_Hive_Hiveql - Fatal编程技术网

Hive 配置单元如何限制collect_集合中的条目数

Hive 配置单元如何限制collect_集合中的条目数,hive,hiveql,Hive,Hiveql,假设我有一个包含两列的表: Category Productname Cat1 prod1 Cat1 prod2 Cat1 prod3 Cat1 prod4 Cat1 prod5 Cat2 prod6 Cat2 prod7 Cat2 prod8 现在如果我这样做: SELECT Category, collect_set(Productname) FROM myTable; Cat1 [prod1...prod5] Cat

假设我有一个包含两列的表:

Category Productname
Cat1     prod1
Cat1     prod2
Cat1     prod3
Cat1     prod4
Cat1     prod5
Cat2     prod6
Cat2     prod7
Cat2     prod8
现在如果我这样做:

SELECT Category, collect_set(Productname)
FROM myTable;
Cat1    [prod1...prod5]
Cat2    [prod6...prod8]
我会得到这样的结果:

SELECT Category, collect_set(Productname)
FROM myTable;
Cat1    [prod1...prod5]
Cat2    [prod6...prod8]

目前,Cat1和Cat2分别有5种和3种产品。但是,我想限制每个类别中的产品数量。假设上限是3。这3种产品可以是任意一种,只要它们属于同一类别。此外,上限可以是一个很大的数字。值得注意的是,我希望collect_设置在达到上限阈值后停止。因为生成输出然后执行过滤可能很昂贵。也欢迎使用收集集以外的方法。谢谢你的建议

您可以通过组合窗口功能和按类别收集集合分区来完成此操作,并获得感谢!您能否澄清为什么要在from(…)a子句中按类别分组。在我看来,您应该在from(…)a子句之外执行此操作。此外,我的表已经有一个日期字符串分区。我尝试了您的查询,但没有给出正确的输出。你能建议如何修理它吗?谢谢因此,一旦我将row_number()添加到(按类别划分)上作为row_no,输出就会混乱。我想知道这是否是因为在创建表时,该表已经在其他列上进行了分区。你能澄清一下吗?谢谢输出是什么?执行时,只需从表\u name中选择category、productname、row\u number()(按类别划分)作为row\u no,就会得到什么结果。解决方案是为category、productname的每一行分配一个行号,并获取小于3行号的所有行。这是为category、productname提供一个子集,然后应用collect\u setI获取类似于:x的内容�U�ے�@E+���"���T���. 如果我只是从表_name中选择一个类别、productname。我将按预期获得类别和productname。