【发布时间】:2016-07-17 07:37:47
【问题描述】:
我在 Redshift 上有一个庞大的电子商务交易数据库,大约有 9 亿行,标题与此有些相似。
id | date_stamp | location | item | amount
001 | 2009-12-28 | A1 | Apples | 2
002 | 2009-12-28 | A2 | Juice | 2
003 | 2009-12-28 | A1 | Apples | 1
004 | 2009-12-28 | A4 | Apples | 2
005 | 2009-12-29 | A1 | Juice | 6
006 | 2009-12-29 | A4 | Apples | 2
007 | 2009-12-29 | A1 | Water | 7
008 | 2009-12-28 | B7 | Juice | 14
是否可以在项目中找到趋势?例如,如果我想看看“Apples”在 2009 年 12 月 28 日到 2011 年 12 月 28 日期间在 A4 位置的销售表现,我会怎么做?理想情况下,我想生成一个具有正/负趋势的表格,有点类似于这里的帖子 - Aggregate function to detect trend in PostgreSQL 我在 R 中对小型数据集进行了类似的分析,甚至使用 ggplot 对其进行可视化也不是什么大挑战,但是数据库的庞大规模给我带来了一些麻烦,而且查询时间也非常长。 例如,
select *
from fruitstore.sales
where item = 'Apple' and location = 'A1'
order by date_stamp
limit 1000000;
执行大约需要 2500 秒,并且经常超时。 感谢您对此提供的任何帮助。
【问题讨论】:
-
how "Apples" fared between 2009-12-28 and 2011-12-28, at location A4到底是什么意思? -
向我们展示您的查询、您期望的结果以及需要多长时间。性能问题应该包括
EXPLAIN ANALYZE和一些关于表大小、索引、当前时间性能、期望时间等的信息。Slow是一个相对术语,我们需要一个真实的值来比较。 -
对不起,我将对其进行编辑以使问题更清楚。我的意思是,“苹果”在每天的销售额方面表现如何。
-
select *你能详细说明你希望结果集显示什么吗?是期间聚合,SUM(amount) GROUP BY month,还是别的什么?
标签: sql postgresql time-series amazon-redshift