【问题标题】:How does NTILE() handle imbalanced data?NTILE() 如何处理不平衡的数据?
【发布时间】:2020-09-25 03:42:04
【问题描述】:

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

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

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

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

额外问题——如果值是 NULL 而不是 0,行为会改变吗?

【问题讨论】:

    标签: sql hiveql presto


    【解决方案1】:

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

    因此,order by 键值相同的行可以位于不同的磁贴中。

    documentation 试图描述这一点:

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

    第二句真的是桶sizes最多相差1。

    【讨论】:

      猜你喜欢
      • 2022-10-14
      • 2012-07-28
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 2017-01-23
      • 2018-11-19
      • 2017-11-23
      相关资源
      最近更新 更多