有效地对 Teradata 中的数据进行分段/分桶

Segmenting / bucketing data in Teradata ntile equvilent

我正在尝试 bucket/segement Teradata 中的数据。

我已经通过 BigQuery 成功实现了这一点:

ntile(5) OVER (order by pageLoadTime) Segment

然后按段分组和排序以生成如下内容:

这在 Teradata 中怎么可能,因为它不支持 ntile。我做了很多谷歌搜索,但找不到解决方案。我从官方文档中看到了这个,但不确定

B * (RANK() OVER (PARTITION BY part_col ORDER BY data_col) - 1) 
/ COUNT(*) OVER(PARTITION BY part_col) AS "QUANTILE"

如有任何帮助,我们将不胜感激

等同于 NTILE() 在你的表达式中是:

CEILING(ROW_NUMBER() OVER (ORDER BY pageLoadTime) * 5.0 / COUNT(*) OVER ()) AS "NTILE"

NTILE() 确保组的大小尽可能接近。它通过将关系拆分到不同的存储桶(如有必要)来实现。 ROW_NUMBER() 做同样的事情。

CEILING() 实现与您的版本相同的算法,但稍微简单一些。

RANK() 生成了我认为更合理的拼贴,但拼贴的大小不一定相同。领带被放入他们匹配的第一个桶中。