【发布时间】:2019-07-04 00:57:10
【问题描述】:
我有一个超过 1800 万行的大表,我想计算中位数,为此我使用 PRECENTILE。不过耗时17分钟左右,不太理想。
这是我的查询
WITH raw_data AS
(
SELECT name AS series,
(duration) /(60000) AS value
FROM warehouse.table
),
quartiles AS
(
SELECT series,
value,
PERCENTILE_CONT(0.25) WITHIN GROUP(ORDER BY value) OVER (PARTITION BY series) AS q1,
MEDIAN(value) OVER (PARTITION BY series) AS median,
PERCENTILE_CONT(0.75) WITHIN GROUP(ORDER BY value) OVER (PARTITION BY series) AS q3
FROM raw_data
)
SELECT series,
MIN(value) AS minimum,
AVG(q1) AS q1,
AVG(median) AS median,
AVG(q3) AS q3,
MAX(value) AS maximum
FROM quartiles
GROUP BY 1
有什么办法可以加快速度吗?
谢谢
【问题讨论】:
-
我对您的时间/数据量感到惊讶!还有什么在运行吗?你有多少个什么类型的节点?我刚刚针对我的 2600 万行数据运行了您的代码,耗时 45 秒。中位数和百分位数在大型数据库中是相当困难的计算,所以
-
我正在使用 8 个计算节点。
标签: amazon-redshift percentile