在Postgres中使用daterange作为聚合时间序列数据的关键字

时间:2017-02-23 09:56:56

标签: postgresql data-modeling data-warehouse

我们正在处理时间序列汇总数据,汇总到固定类型的期间,例如周二到周三的几周。

对于此数据,将Postgres daterange类型用作key会被视为“不良做法”吗? (而不是使用"PeriodID" - 键定义此日期范围,然后加入日历维度以标识该日期范围。)

在我看来,由于"PeriodID" daterange具有非常明确的定义(在我们的设置中,每个观察都是唯一的),因此单独的hive> select translate('123,56€',',€','.'); OK 123.56 将是多余的。

是否:

  • 性能考虑因素?
  • 其他考虑因素?

1 个答案:

答案 0 :(得分:2)

在抽象层面上,tstzrange将是这种聚合的完美表现。

您应该考虑的问题是如何查询数据,以及如何有效地使用索引。

如果要索引“包含”运算符@>或“重叠”运算符&&,则不能使用B树索引,只能使用GiST和SP-GiST索引(请参阅{{3 }})。您必须对此进行基准测试,但使用此类索引的可能性要小于使用timestamptz列上的B树索引。索引也可能使用更多空间。

timestamptz与B树索引一起使用的一种简单方法是存储范围的下端并进行查询,如下所示:

... WHERE weekstart <= atimestamp
      AND weekstart > atimestamp - INTERVAL '1 week'

或查询重叠间隔:

... WHERE weekstart <= endtimestamp
      AND weekstart > starttimestamp - INTERVAL '1 week'