如何在Hive / Spark SQL中使用窗口功能删除重叠部分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Hive / Spark SQL中使用窗口功能删除重叠部分相关的知识,希望对你有一定的参考价值。

我有一个包含客户和产品信息的表。

customer_id promotion_id   product_id  Rank
1               555            222      1
1               555            223      1 
1               555            999      1
1               556            154      2
1               556            222      2
1               556            278      2 
1               557            432      3
1               557            434      3
1               557            435      3

某些促销在产品信息中重叠。例如,可以在产品222上使用promotion_id 555和556。我想删除promotion_id 556并重新排列,以便促销557排名第二,如下所示:

customer_id promotion_id   product_id  Rank
1               555            222      1
1               555            223      1 
1               555            999      1
1               557            432      2
1               557            434      2
1               557            435      2 

我一直在SQL中使用row_number()/ rank()函数,但我似乎无法理解它。

答案

使用ROW_NUMBER

SELECT *, DENSE_RANK() OVER(ORDER BY promotion_id) AS new_rank
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY product_id ORDER BY promotion_id) rn
      FROM tab) s
WHERE rn = 1

以上是关于如何在Hive / Spark SQL中使用窗口功能删除重叠部分的主要内容,如果未能解决你的问题,请参考以下文章

Spark,Hive SQL - 实现窗口功能?

hive 使用同一个session执行不同的sql注意事项

了解如何在 Spark 中执行 Hive SQL

源码级解读如何解决Spark-sql读取hive分区表执行效率低问题

如何使用 jupyter notebook 在 pyspark 中的 Hive 上使用 %sql Magic 字符串启用 spark SQL

spark sql应该如何配置访问hive metastore? [复制]