有效地对 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()
生成了我认为更合理的拼贴,但拼贴的大小不一定相同。领带被放入他们匹配的第一个桶中。
我正在尝试 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()
生成了我认为更合理的拼贴,但拼贴的大小不一定相同。领带被放入他们匹配的第一个桶中。