在Greenplum上以块的形式执行查询

时间:2013-07-18 14:32:52

标签: postgresql greenplum

我正在尝试创建一种将批量日期查询转换为增量查询的方法。例如,如果查询的条件指定为

WHERE date > now()::date - interval '365 days' and date < now()::date
如果今天执行,这将获取一年的数据。现在,如果明天执行相同的查询,将再次获取365天的数据。但是,我上次运行的最后364天数据。我只想要提取一天的数据并从系统中删除一天的数据,这样我最终得到365天的数据,性能更好。该数据将存储在单独的临时表中。

为实现这一目标,我创建了一个增量查询,该查询将在下次运行时执行。但是,当“date”列在SELECT子句中没有特性而在WHERE条件中具有特性时,删除单个日期数据会变得很棘手,因为临时表模式将没有“日期”列。

所以我想到以块的形式执行批量查询并为该块分配ID。这样,我可以删除一个块并添加一个块,其他数据不受影响。

有没有办法在postgres或greenplum中实现相同的目标?像一些内置功能。我浏览了整个文档但找不到任何文档。

另外,如果没有,是否有更好的解决方案来解决这个问题。

1 个答案:

答案 0 :(得分:0)

我认为这最好用聚合表来处理(我假设问题是你有很多聚合来处理大量数据)。这不一定会导致规范化问题(并且数据仓库通常会反正规化)。在这方面,您可以每天存储所需的聚合,这样您就可以减少每天关闭数据的一条记录,以及非关闭数据。将聚合保存到无法更改的数据是避免规范化阻止的正常插入/更新异常所需的内容。