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() 如何处理不平衡的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理不均衡数据

Apache Spark 如何处理不适合内存的数据?

如何处理不受信任的服务 URL?

如何处理不安全的 XMLHttpRequest 端点 [重复]

如何处理不返回的函数

如何处理不抛出 catch 的 API 请求? (403 错误)