first()或last()聚合函数

nszi6y05  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(647)

我是新来的Hive和Spark。
假设我在sql中有以下查询。

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

因为我不想将col4包含在组中,所以我首先使用了(col4)(但我希望col4被显示)
我想在配置单元中编写相同的查询,但在配置单元中没有第一个函数。
裁判:https://docs.treasuredata.com/articles/hive-aggregate-functions
我想在sparksql中编写相同的查询(使用dataframes)。类似地,在spark聚合函数中没有第一个函数。(*可用的聚合方法有 avg , max , min , sum , count . *)
参考:org.apache.spark.sql.groupeddata
例如: val df1 = sqlContext.sql(" select * from TABLENAME").groupBy("COL1","COL2").agg("COL3" -> "MIN", "COL4" -> "????") 有没有办法用Hive和星火来写同样的东西?

hec6srdp

hec6srdp1#

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
;

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

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

        from        tablename 

        group by    col1
                   ,col2
        ) t
;

https://cwiki.apache.org/confluence/display/hive/languagemanual+udf

omtl5h9j

omtl5h9j2#

如果你不想包括 col4group 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

相关问题