使用 group by 和 MAX 函数的 Pig Latin 查询

Posted

技术标签:

【中文标题】使用 group by 和 MAX 函数的 Pig Latin 查询【英文标题】:Pig Latin query using group by and MAX function 【发布时间】:2013-04-15 04:07:57 【问题描述】:

给定表格:

Place(name, province, population, mayorid)

你会如何用 Pig Latin 编写以下查询? 为每个省返回人口最多的地方。您的结果集应包含省名、地名和该地的人口。

【问题讨论】:

一如既往:你尝试过什么?这个网站不是为其他人做你的工作,而是帮助你解决你的问题。您需要先阅读文档并亲自尝试。 我已经阅读了文档..问题是我还必须返回名称,这意味着这应该使用子查询来完成,但我不知道B = GROUP place BY province; X = FOREACH B GENERATE province, MAX(population); 好吧。 试试。一点一点地写,当你卡住的时候,问一个问题。包括您想要什么、您尝试过什么以及为什么它不起作用。 我们这些极客也不再做别人的功课了。 【参考方案1】:

还没有测试过,但是类似

places = LOAD 'placesInput' AS (name, province, population, mayorid);
placesProjected = FOREACH places GENERATE name,province,population;
placesGrouped = GROUP placesProjected by province;
biggestPlaces = FOREACH placesGrouped 
    sorted = ORDER placesProjected by population DESC;
    maxPopulation = LIMIT sorted 1;
    GENERATE group as province, FLATTEN(maxPopulation.name) as name, FLATTEN(maxPopulation.population) as population;
;

应该工作。

【讨论】:

以上是关于使用 group by 和 MAX 函数的 Pig Latin 查询的主要内容,如果未能解决你的问题,请参考以下文章

与 GROUP BY 子句一起使用的 MAX 函数

不能在 Group by/Order by/Where/ON 子句中使用 Group 或 Aggregate 函数(min()、max()、sum()、count()、...等)

PIG Group by 避免包

Apache Pig GROUP BY ,ORDER BY

MySQL5.5版本 MAX函数与Group By一起使用的注意事项

UNION ALL和order by 的关系,group by 和字段的关系,以及MAX函数