NTILE()如何处理不平衡的数据?

问题描述 投票:0回答:1

长话短说,我将一些数据分为不同的部分,并注意到在同一列中的迁移使用NTILE(10) OVER(ORDER BY column_name DESC)分成了十进制。

此列中大约50%的值是0,这意味着前5个十分位都将具有相同的值。

NTILE()函数如何处理这种情况?

我会天真地假设它按值排序,然后将其分成10个偶数块,这意味着它或多或少地将0随机分配给了十分位数,但我一直无法找到解释这一特殊含义的文档案件。

奖金问题-如果值是NULL而不是0,行为会改变吗?

sql hiveql presto
1个回答
1
投票

NTILE()被定义为使图块的大小尽可能相等。大小可能相差1行,但不能超过一行。

因此,具有order by键的相同值的行可以在不同的图块中。

documentation试图描述这一点:

将每个窗口分区的行划分为n个存储桶,范围从1到最多n个。存储桶值最多相差1。

第二句话实际上是存储桶sizes最多相差1。

© www.soinside.com 2019 - 2024. All rights reserved.