HIVST中的FIRST()或LAST()聚合函数

时间:2017-02-07 13:52:46

标签: mysql apache-spark hive apache-spark-sql spark-dataframe

我是HIVE和SPARK的新手。

考虑我在SQL中有以下查询。

select col1, col2, min(col3), first(col4) from tablename group by col1, col2

因为我不想将col4包含在第一组中(col4)(但我希望显示col4)

  1. 我想在Hive中编写相同的查询,但是在hive中没有第一个函数。

    参考:https://docs.treasuredata.com/articles/hive-aggregate-functions

  2. 我想在 Spark SQL (使用数据帧)中编写相同的查询。 类似地,在火花聚合函数中没有第一个函数。 (*可用的汇总方法为avgmaxminsumcount。*)

  3. 参考:org.apache.spark.sql.GroupedData

    E.g。 : val df1 = sqlContext.sql(" select * from TABLENAME").groupBy("COL1","COL2").agg("COL3" -> "MIN", "COL4" -> "????")

    有没有办法用蜂巢和火花写同样的东西?

2 个答案:

答案 0 :(得分:1)

如果您不想在col4中加入group by并将其与sum()一起包含在内,则需要使用分析功能:

select col1, 
       col2, 
       min(col3) over (partition by col1, col2) as min_col3,
       col4 
  from tablename;

请参阅此处的文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics

答案 1 :(得分:1)

double

select  col1
       ,col2
       ,s34.col3
       ,s34.col4 

from   (select      col1
                   ,col2
                   ,min(named_struct('col3',col3,'col4',col4)) as s34 

        from        tablename 

        group by    col1
                   ,col2
        ) t
;

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF