NTILE() 如何处理不平衡的数据?
Posted
技术标签:
【中文标题】NTILE() 如何处理不平衡的数据?【英文标题】:How does NTILE() handle imbalanced data? 【发布时间】:2020-09-25 03:42:04 【问题描述】:长话短说,我将一些数据分组到不同的段中,并注意到一列中的迁移使用NTILE(10) OVER(ORDER BY column_name DESC)
分成十分位数。
此列中大约 50% 的值是 0,这意味着前 5 个十分位数都具有相同的值。
NTILE()
函数如何处理这样的情况?
我会天真地假设它按值排序并将其分成 10 个偶数部分,这意味着它或多或少随机地将 0 分配给十分位数,但我无法找到解释这一点的文档特殊案例。
额外问题——如果值是 NULL
而不是 0
,行为会改变吗?
【问题讨论】:
【参考方案1】:NTILE()
被定义为使图块的大小尽可能相等。大小可能相差 1 行,但不会超过 1 行。
因此,order by
键值相同的行可以位于不同的磁贴中。
documentation 试图描述这一点:
将每个窗口分区的行划分为 n 个桶,范围从 1 到最多 n。存储桶值最多相差 1。
第二句真的是桶sizes最多相差1。
【讨论】:
以上是关于NTILE() 如何处理不平衡的数据?的主要内容,如果未能解决你的问题,请参考以下文章