Hive(3)函数row_number()over(partitionby..)问题



尝试按列nb_pde降序排列列表中的项目:

DROP TABLE IF EXISTS temp_2;
CREATE TEMPORARY TABLE temp_2 AS
SELECT
code_pde, nb_pde,row_number() OVER(PARTITION BY code_pde ORDER BY nb_pde DESC) AS rank
FROM
(
SELECT code_pde, SUM(den_05) AS nb_pde
FROM z_lab_int_hive_socle.gddi_303_elodi_32_agreg_mois_unit
WHERE code_pde IS NOT NULL AND pde_moteur IS NOT NULL AND pde_moteur = 'non'
GROUP BY code_pde
) AS temp_1
;
INSERT OVERWRITE TABLE z_lab_int_hive_socle.gddi_303_elodi_33_ranking_pde_non_moteur_unit
SELECT rank AS rang, code_pde AS code_pde_non_moteur, nb_pde AS nombre_pde_non_moteur
FROM temp_2;

子查询temp_1的结果集是这样的,可以:

code_pde nb_pde
-------- -------
01 8E    3392
01 70    265487
01 7F    310
01 82    8
01 M1    630058
01 M2    110083
01 M3    531438
01 30    1321617
01 37    1141343

但最终结果集是:

rang code_pde nombre_pde
---- -------- ----------
1    01 37    1141343
1    01 8E    3392
1    01 M1    630058
1    01 M3    531438
1    01 7F    310
1    01 M2    110083
1    01 70    265487
1    01 30    1321617
1    01 82    8

所有等级均为1:-(

就像对于每一行,只考虑STRING值code_pde的前两个字符一样。尝试首先压缩code_pde值(例如:0137而不是01 37(,但结果仍然相同。。。

知道怎么了吗?这是我第一次遇到这种问题,在多次使用row_number() over(partition by...之后

PARTITION BY code_pde表示row_number在接收到新的code_pde时将重置。数据示例中的所有行都有不同的代码。如果有多个具有相同code_pde的行,则会根据ORDER BY为它们分配1、2、3。查看窗口功能如何工作的更多详细信息:https://stackoverflow.com/a/55909947/2700344

相关内容

  • 没有找到相关文章

最新更新