如何在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-sql读取hive分区表执行效率低问题
如何使用 jupyter notebook 在 pyspark 中的 Hive 上使用 %sql Magic 字符串启用 spark SQL