优化Vertica SQL查询以进行运行总计
我有一个表S,其中包含如下时间序列数据:优化Vertica SQL查询以进行运行总计,sql,vertica,window-functions,cumulative-sum,Sql,Vertica,Window Functions,Cumulative Sum,我有一个表S,其中包含如下时间序列数据: key day delta 对于给定的密钥,有可能但不太可能错过几天 我想从增量值正整数中构造一个累积列,以便将此累积数据插入到另一个表中。到目前为止,我得到的是: SELECT key, day, SUM(delta) OVER (PARTITION BY key ORDER BY day asc RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), delta FROM S 在
key day delta
对于给定的密钥,有可能但不太可能错过几天
我想从增量值正整数中构造一个累积列,以便将此累积数据插入到另一个表中。到目前为止,我得到的是:
SELECT key, day,
SUM(delta) OVER (PARTITION BY key ORDER BY day asc RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
delta
FROM S
在我的SQL风格中,默认窗口子句的范围介于无界的前一行和当前行之间,但我将其保留在其中,以便显式显示
这个查询的速度非常慢,就像旧的中断查询的数量级慢一样,它的累计计数是0。对生成累积数字的其他方法有何建议
我在这里看到了解决方案:
我使用的RDBMs是Vertica。Vertica SQL排除了第一个子选择解决方案,其查询规划器预测,第二个左外连接解决方案的成本大约是我在上面展示的分析表单的100倍。有时只使用相关子查询会更快:
SELECT
[key]
, [day]
, delta
, (SELECT SUM(delta) FROM S WHERE [key] < t1.[key]) AS DeltaSum
FROM S t1
我认为你基本上就在那里。您可能只需要稍微更新一下语法:
SELECT s_qty,
Sum(s_price)
OVER(
partition BY NULL
ORDER BY s_qty ASC rows UNBOUNDED PRECEDING ) "Cumulative Sum"
FROM sample_sales;
输出:
参考链接:
https://dwgeek.com/vertica-cumulative-sum-average-and-example.html/
您为此表定义了哪些投影?有多少行和不同的键?“多慢”是“非常慢”?表中有多少行?你如何划分/分割该表的主投影?我很难理解!请提供所需输出的样本数据好吗?这可能有助于Vertica不支持这种性质的相关子查询。
https://dwgeek.com/vertica-cumulative-sum-average-and-example.html/